我有一个使用底部导航栏在页面之间切换的应用程序。为此,我正在使用Bloc。 在一个标签页上,我呈现了一个列表,其中包含一些项目。当状态更改为SchedulesLoaded时,将构建此列表(请参见图片)。
我遇到的问题是,当我使用底部导航栏(使用的是完全不同的Bloc)更改页面时,正在重建图片中的列表。侦听器实际上是在不更改正在侦听的Bloc状态的情况下重绘窗口小部件。我无法理解为什么会这样。有人知道吗?
我发现this链接正在讨论这个问题,但是我没有得到任何有用的帮助。
答案 0 :(得分:0)
对于现在正在查看此内容的任何人,您都可以在构建Builder之后调用buildWhen来提供构建条件。
来自文档:
可以实现可选的[buildWhen],以更精细地控制[BlocBuilder]的重建频率。每次[cubit] state
更改时都会调用[buildWhen]。 [buildWhen]接受先前的state
和当前的state
,并且必须返回一个[bool],该布尔值确定是否将调用[builder]函数。
[BlocBuilder]初始化后,先前的state
将被初始化为[cubit]的state
。
[buildWhen]是可选的,如果省略,它将默认为true
。
示例:
return Scaffold(
appBar: AppBar(
title: BlocBuilder<Bloc, State>(
buildWhen: (p, c) => p.isEditing != c.isEditing,
builder: (context, state) {
return Text(state.isEditing ? 'Edit' : 'Create');
},
),