Flutter StreamBuilder在推送另一个屏幕后继续更新

uqxowvwt  于 2023-05-19  发布在  Flutter
关注(0)|答案(1)|浏览(169)

我完全失去了与Flutter集团和流..经过大量的调试,我发现BlocBuilder并不能很好地处理流,发射发生,但小部件不更新,可能它对小变化不够敏感(在列表对象字段中..)。所以我尝试了StreamBuilder,它会听一个列表的流,即使它真的感觉不舒服,工作正常-什么真正的块,如果它不更新小部件上的变化?
现在的问题是,在我推送另一个页面后,StreamBuilder继续用数据更新。有没有什么办法暂停一下-看起来像个大腰

eyh26e7m

eyh26e7m1#

如果你想让BlocBuilder根据列表更新而改变,那么你需要复制列表并发出它。

// in bloc function...

final updatedList = [...state.myList]; // making a copy of the list using spread operator

// update your list
// emit updatedList and BlocBuilder will react

没有理由必须使用StreamBuilders。使用Bloc小部件,一旦页面离开导航堆栈,它就不会对任何更改做出React。如果您将一个新页压入堆栈而不弹出前一页,则所有侦听器仍将处于活动状态。
如果需要将上一页保留在导航堆栈中,可以使用BlocBuilder和BlocListener小部件的buildWhenlistenWhen过滤器来检查您在导航中的位置。

BlocListener<YourBloc, YourState>(
      listenWhen: (previous, current) {
        // check if current page is the current page before reacting to state changes
      },
      listener: (context, state) {
         ...
        },
    );

相关问题