我有一个带有ListView的FutureBuilder,以显示具有从.txt文件读取的值的自定义项目(小部件)。
问题在于这些项目仅在我以调试模式或运行模式启动应用程序时显示。当我尝试使用AppLauncher打开应用程序时(就像“普通”用户那样做),listView为空。我在AVD和“真实”设备上进行了尝试。
将来的“ listFuture”用于从文件中读取值并返回小部件列表
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]],
);
},
),
),
);
}
感谢您的帮助!
答案 0 :(得分:1)
似乎是异步数据问题,请尝试以下更改:
var obj = { HTTP_Index: p_Index };
var objJSON = JSON.stringify(obj);
sessionStorage.setItem(objJSON);
中删除listFuture
。StatefulWidget
内添加listFuture
变量。State
内移动setupList()
方法。State
答案 1 :(得分:0)
好,我解决了这个问题。构建窗口小部件时,只需调用“ setState”即可。
@protected
@mustCallSuper
void initState() {
super.initState();
Future.delayed(Duration.zero, () {
//This setState is necessary because it refreshes the listView
setState(() {});
});
}