Flutter 即使没有状态更改,也要重建颤振群侦听器

Flutter 即使没有状态更改,也要重建颤振群侦听器,flutter,mobile,dart,Flutter,Mobile,Dart,我有一个应用程序,它使用底部导航栏在页面之间切换。要做到这一点,我正在使用。 在其中一个选项卡页面上,我呈现了一个包含一些项目的列表。此列表是在状态更改为SchedulesLoaded时生成的(见图) 我遇到的问题是,当我使用底部导航栏(使用完全不同的Bloc)更改页面时,图片中的列表正在重建。侦听器实际上正在重新绘制小部件,而不改变它正在侦听的Bloc状态。我弄不明白为什么会发生这种事。有人有线索吗 我发现林克在讨论这个问题,但我没有从中得到任何有用的东西 对于现在看到这一点的任何人,您都可以

我有一个应用程序,它使用底部导航栏在页面之间切换。要做到这一点,我正在使用。 在其中一个选项卡页面上,我呈现了一个包含一些项目的列表。此列表是在状态更改为SchedulesLoaded时生成的(见图)

我遇到的问题是,当我使用底部导航栏(使用完全不同的Bloc)更改页面时,图片中的列表正在重建。侦听器实际上正在重新绘制小部件,而不改变它正在侦听的Bloc状态。我弄不明白为什么会发生这种事。有人有线索吗

我发现林克在讨论这个问题,但我没有从中得到任何有用的东西


对于现在看到这一点的任何人,您都可以在构建生成器之后调用buildWhen,以提供一些何时构建的条件

从文档:

可以实现可选的[buildWhen],以便更精确地控制[BlocBuilder]重建的频率。[buildWhen]将在每个[cubit]
状态
更改时调用。[buildWhen]接受上一个
状态
和当前的
状态
,并且必须返回一个[bool],确定是否调用[builder]函数。 当[BlocBuilder]被初始化时,先前的
状态
将被初始化为[cubit]的
状态
。 [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');
      },
    ),
返回脚手架(
appBar:appBar(
标题:BlocBuilder(
构建时间:(p,c)=>p.isEditing!=c.isEditing,
生成器:(上下文、状态){
返回文本(state.isEditing?'Edit':'Create');
},
),

您的Bloc Listener中没有任何内容。若要测试您的Bloc Listener是否实际执行,请尝试在Listener中添加以下内容:(上下文,状态){print('Bloc Listener:$state')}@FederickJonathan是否应该将Bloc Builder放在Bloc Listener中?@FederickJonathan Bloc Listener只会被调用一次,这是正确的。但每次我切换回选项卡时,都会调用Builder,因此会重新生成小部件。如何防止这种情况发生?我只希望在状态更改后生成listviewnges,而不是在生成器中重新绘制。我不确定如何尝试这两种方法AutomaticEpaLiveClientMixin和PageStorage。AutomaticEpaLiveClientMixin在blocbuilder中不起作用。必须在blocbuilder中使用condition属性。