Flutter Bloc Listener重建,即使状态没有变化

时间:2020-02-05 19:14:55

标签: flutter mobile dart

我有一个使用底部导航栏在页面之间切换的应用程序。为此,我正在使用Bloc。 在一个标签页上,我呈现了一个列表,其中包含一些项目。当状态更改为SchedulesLoaded时,将构建此列表(请参见图片)。

我遇到的问题是,当我使用底部导航栏(使用的是完全不同的Bloc)更改页面时,正在重建图片中的列表。侦听器实际上是在不更改正在侦听的Bloc状态的情况下重绘窗口小部件。我无法理解为什么会这样。有人知道吗?

我发现this链接正在讨论这个问题,但是我没有得到任何有用的帮助。

enter image description here

1 个答案:

答案 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');
      },
    ),