Flutter 如何在widget flift上粘贴数据

Flutter 如何在widget flift上粘贴数据,flutter,widget,sharedpreferences,Flutter,Widget,Sharedpreferences,我正在使用FutureBuilder从共享首选项加载数据。。。这是我的密码 Future getData() async { SharedPreferences prefs = await SharedPreferences.getInstance(); String dataIn = prefs.getString("clockin"); return dataIn; } Widget defaultClock() { return FutureBuild

我正在使用FutureBuilder从共享首选项加载数据。。。这是我的密码

Future getData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String dataIn = prefs.getString("clockin");
    return dataIn;
  }

Widget defaultClock() {
    return FutureBuilder(
      future: getData(),
      builder: (context, snap) {
        if (snap.hasData) {
          return Text(snap.data);
        } else {
          return CircularProgressIndicator();
        }
      },
    );
  }

使用该代码。。。数据总是先检查。。。数据是否存在…如果不存在,它将首先返回CircularProgressIndicator(),当ConnectionState.done和snap.hasData==true时,它将返回数据。。。所以除了使用Future Builder之外,还有其他方法可以使数据始终粘贴在我的小部件中,而无需在我打开应用程序时执行任何类似于CircularProgressIndicator()的过程。不幸的是,这是不可能的。这是因为您使用的是未来构建器。数据将在未来某个时间到达-30毫秒或3秒

另一种选择是——在上一个屏幕中获取数据,并与数据一起调用此屏幕。例如:

screen1.dart将screen2称为:

 string _data = await getData();
 _loadNextScreen(_data);



void _loadNextScreen(string data) {

    Navigator.push(
       context,
      MaterialPageRoute(
         builder: (context) =>
            MyNextScreen(data: _data)
     ),
  );

}

现在,在屏幕2中,您不需要使用CircularProcessIndicator()或类似工具。

在调用共享首选项时,是否有其他方法代替Future Builder将我的数据粘贴到父项中?当然可以。然而,在理论上,它的工作方式与Futurebuilder相同。如果您不想使用“Futurebuilder”,那么您必须以同样的方式编写代码。它正在使用setState()。如果对你有帮助的话,我可以提供一个样品。话虽如此,“未来建设者”是A.现成的B.高效的;更重要的是,与编写我们自己的代码相比,坚持使用现成的代码是很好的:)您愿意通过编辑我的代码来给我一个示例代码吗?这就是一个例子_requestCriminalsFromAPI()进行API调用(在您的例子中,它是一个共享prefs)。加载数据前,_isLoadingCompleted为false,加载数据后设置为true。小部件的主体部分用于显示progressbar或基于true/false的实际小部件。(注意:代码正在构建中,可能不是最佳状态):)有帮助吗?如果你需要更多信息,请告诉我。