是否可以在块中、在块消费者内仅在以下情况下重画Widget 区块状态更改的属性子集
我希望一个屏幕中的"BuildWhen"只有当3个props 改变时才返回True,而在另一个屏幕中我有另一个BLocConsumer,如果状态的任何属性改变,它将被重新构建.
到目前为止,我的估计是,我只能通过将集团分裂成几个不同状态的集团来做到这一点.
谢谢.
是否可以在块中、在块消费者内仅在以下情况下重画Widget 区块状态更改的属性子集
我希望一个屏幕中的"BuildWhen"只有当3个props 改变时才返回True,而在另一个屏幕中我有另一个BLocConsumer,如果状态的任何属性改变,它将被重新构建.
到目前为止,我的估计是,我只能通过将集团分裂成几个不同状态的集团来做到这一点.
谢谢.
有两种方法可以实现这一点.
我们在何时使用Build来告诉BLOC消费者/构建器,它需要基于在previous
和current
状态之间更改的特定内容来重建小部件.
例如:
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更改时才会再次构建小部件.
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 器),并且如果区块的其他部分被更新,则不应该再次构建该小部件.