flutter - 切换选项卡时防止 StreamBuilder 重新加载

标签 flutter dart

我创建了一个带有两个选项卡的 flutter 应用程序。在第一个选项卡上,我有一个 ListView,它显示来自 StreamBuilder 的信息。此 StreamBuilder 通过 http 获取数据。

问题是:当我切换到第二个选项卡然后返回到第一个选项卡时,ListView 重新加载。

在我使用 StatefulWidgetAutomaticKeepAliveClientMixin 之前,但现在我使用的是 StatelessWidget,所以我不能再使用它了。我认为我的构建方法需要 pure 但我不知道该怎么做。我看到在 StatefulWidget 中有 initState() 方法,但这是同样的问题,我无法使用它。

class ListImmeubleTab extends StatelessWidget{

  @override
  Widget build(BuildContext context) {
    bloc.fetchAllImmeubles();
    return Scaffold(
        body: StreamBuilder(
            stream: bloc.allImmeubles,
            builder: (context, AsyncSnapshot<List<ImmeubleModel>> snapshot) {
              if (snapshot.hasData) {
                return ListView.builder(
                    itemCount: snapshot.data.length,
                    itemBuilder: (BuildContext context, int index) {
                      String color;
                      switch(index % 3){
                        case 0:
                          color = "green";
                          break;
                        case 1:
                          color = "blue";
                          break;
                        case 2:
                          color = "red";
                          break;
                      }
                      return ListTile(
                        leading: CircleAvatar(
                          child: Image.asset("assets/houses/house_$color.png"),
                        ),
                        title: Text(snapshot.data[index].numero.toString() + " " + snapshot.data[index].rue),
                        subtitle: Text(snapshot.data[index].zip.toString() + " " + snapshot.data[index].ville),
                      );
                    }
                );
              } else if (snapshot.hasError) {
                return Text(snapshot.error.toString());
              }
              return Center(child: CircularProgressIndicator());
            }
        )
    );
  }
}

最佳答案

尝试添加一个 postFrame 回调


class Test extends StatelessWidget {

  _callBack(_){

  }

  @override
  Widget build(BuildContext context) {
    WidgetsBinding.instance.addPostFrameCallback(_callBack);
    return Container();
  }
}

关于flutter - 切换选项卡时防止 StreamBuilder 重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56872021/

相关文章:

flutter - 在 Dart 中将一个变量指向另一个变量的正确方法

flutter - 如何处理在 flutter 中动态创建的复选框列表?

android - 如何存储临时值?

android - 如何在 Flutter 中使用本地资源播放音频?

Flutter web - 向下滚动但水平滚动

dart - 重用 AnimationController

flutter - 如何忽略 `dart-lang/coverage` 中的一行

dart - Flutter 圆角头像 appBar

firebase - 我的 Flutter firebase 注销与我的预订系统发生冲突

flutter 应用程序 : Pick multiple images using Image picker and then drag and drop the selected images in Flutter