我不熟悉Flutter,并且遇到StreamBuilder和ListView.builder的问题。
根据显示的其他按钮,我单击卡列表中可用的按钮(“应用按钮”)进行网络通话。
我面临的问题是,在成功的网络调用之后,窗口小部件不会更新,但是当我刷新页面时,我会得到更新的结果。
我做错了什么?
我没有在其中使用任何状态。我需要使用它吗?
StreamBuilder(
initialData: [],
stream: dataBoc.ListData,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemBuilder: (BuildContext context, index) {
return InkWell(
key: Key(snapshot.data[index]["lid"]),
child: DataCard(
DataModel(snapshot.data[index]),
),
onTap: () {
Navigator.pushNamed(context, "/detailPage",
arguments: snapshot.data[index]["id"]);
},
);
},
itemCount: snapshot.data.length,
);
}
},
),
//这是我向流中添加数据的方式
if (res.statusCode == 200) {
var data = json.decode(res.body);
if (data['status'] == true) {
// listDataStream.sink.add(data['result']);
listDataStream.add(data['result']);
} else {
listDataStream.sink.addError("Failed to Load");
}
}
预期结果:当我进行网络通话时,如果成功,则基于网络结果,其他按钮必须显示在相应的卡上。
答案 0 :(得分:0)
我已解决此问题。问题是我的窗口小部件树结构不正确,这破坏了窗口小部件的构建过程。