Flutter:两个连续页面上的相同 BlocBuilder

Posted

技术标签:

【中文标题】Flutter:两个连续页面上的相同 BlocBuilder【英文标题】:Flutter : same BlocBuilder on two consecutive pages 【发布时间】:2021-04-07 03:43:09 【问题描述】:

我正在开发一个应用程序,我们决定使用 BLoC 模式。 我在我的应用程序中遇到了一个反复出现的问题。 事实上,我创建了一个名为 CatalogBloc 的集团。

在我的第一页上,有一个使用以下 BlocBuilder 的小部件:

...
BlocBuilder<CatalogBloc, CatalogState>(
            buildWhen: (previous, current) 
              return current is CatalogArticlesLoadIsFinished ||
                  current is CatalogArticlesLoadInProgress;
            ,
            builder: (context, state) 
              return CatalogArticlesWidget(
                data: state.data,
              );
            ,
          );
...

从此页面中,我可以导航到包含相同 BlocBuilder 和相同小部件 (CatalogArticlesWidget) 的页面。第二个页面调用 bloc CatalogBloc 重新加载相同类型的数据,但在 initState 中过滤:

@override
void initState() 
  context.read<CatalogBloc>().add(CatalogArticlesLoadRequested(family: widget.family));
  super.initState();

所以当我跳到第一个屏幕(从第二个屏幕)时,数据发生了变化。

避免这种行为的最干净的方法是什么?

【问题讨论】:

首先,在initState中不能访问context。我想知道它是如何工作的 github.com/felangel/bloc/issues/210#issuecomment-482205559 【参考方案1】:

为第二页创建该块的新实例

【讨论】:

【参考方案2】:

第一个解决方案:参见 w461 答案。

第二种解决方案:就我而言,我认为最好为每个页面创建新状态。

【讨论】:

以上是关于Flutter:两个连续页面上的相同 BlocBuilder的主要内容,如果未能解决你的问题,请参考以下文章

同一流(QuerySnapshot)可以与不同页面上的多个 StreamBuilder 一起使用吗? - -扑

使用相同 Bloc/Cubit 的多个 BlocBuilder,每个 BlocBuilder 用于不同的事件

Flutter – 连续两个文本,左边一个优雅地溢出

两个不同页面上的两个元素可以在 HTML/CSS 中具有相同的 ID 吗?

两个页面上相同的锚点 ID:如何从一个页面链接到另一页上的锚点

在 Flutter 中推送新页面时,Navigator 堆栈上的页面会重建