BlocProvider.value的确与BlocProvider相似,但是多了一个value参数,该参数允许开发者显式地提供一个bloc实例。如果你要使用BlocProvider.value,则需要首先创建一个Bloc实例,然后再将其提供给BlocProvider.value。这意味着,BlocProvider.value通常只在特殊情况下使用,例如在单元测试中手动创建Bloc实例或共享同一个Bloc实例以跨层访问。
示例代码:
class CounterBloc extends Bloc {
CounterBloc() : super(0);
@override
Stream mapEventToState(CounterEvent event) async* {
if (event == CounterEvent.increment) {
yield state + 1;
} else if (event == CounterEvent.decrement) {
yield state - 1;
}
}
}
void main() {
final bloc = CounterBloc(); // 创建一个Bloc实例
runApp(
BlocProvider.value(
value: bloc, // 将Bloc实例提供给BlocProvider.value
child: MyApp(),
),
);
}