该
BlocBuilder有optinal参数
condition具有类型
bool Function(State previous, Statecurrent),你需要返回
true,如果你想了Widget调用
builder函数,
false如果你不想要的。此参数是可选的,默认情况下为
true。
因为在
condition参数中您具有
previous状态和状态,所以
current您可以比较此状态的属性,并
true在满足比较条件时返回。
请记住,您需要覆盖
==运算符和
hashCode状态以及在状态类中使用的所有类。简单的方法是使用equatable。
在您的情况下,您需要
State像这样:
class MyState extends Equatable { final bool isPullingState; final List<MyClass> dataList; MyState(this.isPullingState, this.dataList) : super([isPullingState, dataList]);}class MyClass extends Equatable { final int property1; final int property2; MyClass(this.property1, this.property2) : super([ property1, property2, ]);}然后,您可以在小部件中设置所需的条件:
@override Widget build(BuildContext context) { return Column( children: <Widget>[ BlocBuilder( bloc: myBloc, condition: (MyState previous, MyState current) => previous.isPullingState != current.isPullingState, builder: (BuildContext context, MyState state) { // this function is only called when isPullingState change return MyIsPullingWidget(); }, ), BlocBuilder( bloc: myBloc, condition: (MyState previous, MyState current) => previous.dataList != current.dataList, builder: (BuildContext context, MyState state) { // this function is only called when the dataList change return MyListWidget(state.dataList); }, ), BlocBuilder( bloc: myBloc, builder: (BuildContext context, MyState state) { // this function is called in each state change return MyListWidget(state.dataList); }, ), ], ); }


