flutter - FutureBuilder 仅适用于 Debug
问题描述
我有一个带有 ListView 的 FutureBuilder 来显示具有从 .txt 文件中读取的值的自定义项(小部件)。
问题是这些项目只有在我以调试模式或运行模式启动应用程序时才会显示。当我尝试使用 AppLauncher 打开应用程序时(就像“普通”用户那样),listView 是空的。我在 AVD 和“真实”设备上试过这个。
Future "listFuture" 用于从文件中读取值并返回 Widgets 列表
class Home extends StatefulWidget {
final Future listFuture = setupList();
@protected
@mustCallSuper
void initState() {
print("init complete");
}
@override
State<StatefulWidget> createState() {
return HomeState();
}
}
如果 FutureBuilder 正确获取数据,则应显示带有我的小部件列表的 listView
child: FutureBuilder<List<SubListItem>>(
future: widget.listFuture,
// ignore: missing_return
builder: (BuildContext context, AsyncSnapshot snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return new Text("None");
case ConnectionState.waiting:
return new Text("loading");
default:
if (snapshot.hasError) {
print("Error");
return Center(child: (Text("No data")));
} else {
return subListView(context, snapshot);
}
}
},
),
Widget subListView(BuildContext context, AsyncSnapshot snapshot) {
List<Widget> items = snapshot.data;
//This ScrollConfiguration is used to remove any animations while scrolling
return ScrollConfiguration(
behavior: CustomScrollBehavior(),
child: Container(
padding: EdgeInsets.symmetric(horizontal: 4),
child: new ListView.builder(
itemCount: items.length,
itemBuilder: (BuildContext context, int index) {
return Column(
children: <Widget>[items[index]],
);
},
),
),
);
}
感谢您的帮助!
解决方案
它看起来像一个异步数据问题,请尝试以下更改:
- 从
listFuture
您的StatefulWidget
. - 在
listFuture
你的State
. - 将
setupList()
方法移动到您的State
. - 最后像这样直接调用:
child: FutureBuilder<List<SubListItem>>(
future: setupList(),
// ignore: missing_return
builder: (BuildContext context, AsyncSnapshot snapshot) {
if(!snapshot.hasData) {
return new Text("loading");
}
else if (snapshot.hasError) {
print("Error");
return Center(child: (Text("No data")));
} else {
return subListView(context, snapshot);
}
}
},
),
推荐阅读
- typescript - typescript :类型检查作为参数传递的函数中的可选参数
- javascript - 如何在 if 条件下使用 reduce
- c# - 如何根据 C# 中另一列的值比较返回第一列的行值?
- ruby-on-rails - 翻译缺失:ar.activerecord.errors.models.address.attributes.area.required
- ios - Swift 5 中的 SKTexture 问题 - 内存不足(IOAF 代码 8)
- ansible - 检查 Chocolatey 是否安装在 Ansible 中
- java - Java,通过套接字发送 MouseEvents,我该怎么做?
- python - Telegram bot:来自 webhook 的错误响应:426 需要升级
- python - 使用 GLOB、BS4 从多个本地 .html 文件中提取元素并写入 CSV Excel
- c++ - 如何将大表(QTableView)复制到剪贴板