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 用于不同的事件
两个不同页面上的两个元素可以在 HTML/CSS 中具有相同的 ID 吗?