flutter - 如何防止数据在 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);
}
有没有办法防止这个问题?
解决方案
您必须检查 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");
}
},
推荐阅读
- c# - WPF TreeView,IsExpanded 的 TwoWay 绑定不影响 C# 代码中的 GUI
- python - 使用 find() 从字符串变量中提取电子邮件
- python - django中招摇的网址
- reactjs - 安装反应时如何解决“未找到项目”错误
- c - 如何在C中分配字符串数组?
- ruby-on-rails - 如何检查数组中的每个单词是否包含子字符串并拒绝 Ruby on Rails 中的子字符串?
- swagger-2.0 - 如何使用 Spring Boot Open API 3 定义错误模式?
- gpflow - 对 SGPR 的 GPflow 多输出支持
- python - 无法将从 XPath 抓取的德语字符写入 CSV 文件
- r - R中的火山图:添加细节:仅着色公因数