我正在使用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,是否有其他方法,当我打开我的应用程序时,数据将总是粘在我的widget中,而不需要像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)
),
);
}
现在,在screen2中,你不需要有CircularProcessIndicator()或类似的功能。