Flutter中的数据更改后,StreamBuilder不更新ListView.builder

时间:2019-03-28 16:25:49

标签: flutter

我不熟悉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");
      }
    }

预期结果:当我进行网络通话时,如果成功,则基于网络结果,其他按钮必须显示在相应的卡上。

1 个答案:

答案 0 :(得分:0)

我已解决此问题。问题是我的窗口小部件树结构不正确,这破坏了窗口小部件的构建过程。