未来建设者不建设

问题描述

我正在尝试包含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?