Flutter:两个连续页面上的相同 BlocBuilder
Flutter : same BlocBuilder on two consecutive pages
我正在开发一个应用程序,我们决定使用 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();
}
所以当我(从第二个)弹出到第一个屏幕时,数据已经改变了。
避免这种行为的最干净的方法是什么?
为第 2 页创建该 bloc 的新实例
第一个解决方案:见w461答案
第二种解决方案:就我而言,我认为为每个页面创建新状态会更好。
我正在开发一个应用程序,我们决定使用 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();
}
所以当我(从第二个)弹出到第一个屏幕时,数据已经改变了。
避免这种行为的最干净的方法是什么?
为第 2 页创建该 bloc 的新实例
第一个解决方案:见w461答案
第二种解决方案:就我而言,我认为为每个页面创建新状态会更好。