首页 > 解决方案 > 如何防止数据在 Widget Flutter 中重新渲染

问题描述

我有这样的代码 FutureBuilder Widget

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

  Widget defaultClock() {
    print(clockIn);
    return FutureBuilder(
      future: getJam(),
      builder: (context, snap) {
        if (snap.hasData ) {
              print(snap.data);
          return Text(snap.data);
        }
        else{return Text("false");}
      },
    );
  }

问题是....数据总是先运行else{return Text("false");}然后再运行

if (snap.hasData ) {
              print(snap.data);
          return Text(snap.data);
        }

有没有办法防止这个问题?

标签: fluttersharedpreferences

解决方案


您必须检查 prefs.getString("clock") 是否包含任何值。如果它不包含任何值,那么它将返回 null 并且因此您只会得到错误的文本。

替换代码中处理 null 的以下行。

String dataIn = prefs.getString("clock") ?? 'default';

更新:

我想你想检查连接状态,如果连接状态完成,那么你可以检查 snap 是否包含数据。

如果连接状态未完成,那么您可以显示进度指示器之类的任何内容。

if (snap.connectionState == ConnectionState.done) {
                  if (snap.hasData) {
                    print(snap.data);
                    return Text(snap.data);
                  } else {
                    return Text("false");
                  }
                } else {
                  return Text("Loading");
                }
              },

推荐阅读