问题描述
我正在尝试包含FutureBuilder
,但是它进入CircularProgressIndicator()
,并且在从SharedPreferences和{{ 1}}是ConnectionState
。它只是卡在CircularProgressIndicator()中。
我在这里想念什么?
done
解决方法
对于初学者来说,您不需要setState
来获取与FutureBuilder一起使用的Future的结果。 FutureBuilder类的重点是为您处理。另外,最好不要混用.then()
和await
,直到您有更多经验为止。他们在一起工作得很好,但是在您仍在学习时,一次只专注于一个概念。
这是修剪后的方法(如果仍然值得,或者您想直接将代码放入iniState
中,则可以选择):
Future<int> getTime() async {
final value = await MySharedPreferences.instance.getIntValue("time_key");
return value;
}
您不应不将该方法提供给FutureBuilder,否则无论出于任何原因每次调用build
时,都将重新启动该方法。
所以您initState
应该看起来像这样:
Future<int> futureIntFromPreferences;
@override
void initState() {
super.initState();
futureIntFromPreferences = getTime();
}
然后您可以在FutureBuilder
中使用它:
body: FutureBuilder<int>(
future: futureIntFromPreferences,builder: (BuildContext context,AsyncSnapshot<int> snapshot) {
有关详细说明,请阅读What is a Future and how do I use it?