是否可以在块中、在块消费者内仅在以下情况下重画Widget 区块状态更改的属性子集

我希望一个屏幕中的"BuildWhen"只有当3个props 改变时才返回True,而在另一个屏幕中我有另一个BLocConsumer,如果状态的任何属性改变,它将被重新构建.

到目前为止,我的估计是,我只能通过将集团分裂成几个不同状态的集团来做到这一点.

谢谢.

推荐答案

有两种方法可以实现这一点.

1. Bloc consumer with buildWhen

我们在何时使用Build来告诉BLOC消费者/构建器,它需要基于在previouscurrent状态之间更改的特定内容来重建小部件.

例如:

BlocBuilder<TestBloc, TestState>(
  builder: (context, state) {
    return Text(
      '${state.a + state.b + state.c + state.d}',
    );
  },
  buildWhen: (previous, current) {
    return previous.a != current.a ||
        previous.b != current.b ||
        previous.c != current.c;
  },
),

在本例中,仅当a、b或c更改时才会再次构建小部件.

2. BlocSelector

BLocSelector是用于监听和使用块的特定部分的小部件.因此,当我们只需要使用状态的3个参数时,我们可以使用以下示例:

BlocSelector<TestBloc, TestState, int>(
  selector: (state) {
    return state.a + state.b + state.c;
  },
  builder: (context, abcState) {
    return Text('Updated value is: $abcState');
  },
),

这两种不同的方法有不同的用例.

当您想要构建器函数和小部件中的整个状态,但希望小部件仅在状态的某些部分发生更改时才重新构建时,可以使用1st方法(Build When).

当你想要使用区块的特定参数进行小部件渲染时,使用2nd方法(区块 Select 器),并且如果区块的其他部分被更新,则不应该再次构建该小部件.

Flutter相关问答推荐

Cupertino Buttino SheetAction on按下可触发加载指示器,然后勾选并延迟

如何在Flutter 屏幕中添加箭头形状

如何解决这个错误,同时获得的高度的小部件,因此高度的可用工作区域在Flutter ?

在fltter_widget_from_html中启动url

如何知道当前屏幕是否处于抖动状态?

如何使文本表格域在抖动中变圆?

Wired Firebase错误-[CLOUD_FIRESTORE/UNAvailable]该服务当前不可用

NotifierProvider 每次更新都会重新构建并且值不更新

Flutter blue plus 库,当try 从 esp32 驱动程序获取 PlatformException 时读取特性

忽略异步函数上的 context.mounted 访问 linting 错误是否安全?

SfCircularChart 周围的额外间距

单元测试中如何比较NaN和NaN是否相等

如何在 flutter 中更改日期 Select 器 colored颜色 ?

主题:ThemeData() Flutter

如何使用 Riverpod 在运行时动态创建提供程序?

Flutter Firebase:如何判断返回值是否是特定对象

如何在没有上下文的情况下使用国际Flutter ?

如何从dart 中的当前日期时间中减go 1 天?

检索 api 的值时,我得到_TypeError(类型'Null'不是'String'类型的子类型)

Flutter Firebase 可以在真实设备上运行,而不是在 Android 模拟器上运行