cubit层应该可以算是:bloc层和event层一种结合后的简写
class CounterCubit extends Cubit<CounterState> { CounterCubit() : super(CounterState().init()); ///自增 void increase() => emit(state.clone()..count = ++state.count); }view
view层的代码就非常简单了,点击方法里面调用cubit层的自增方法就ok了
class CounterPage extends StatelessWidget { @override Widget build(BuildContext context) { return BlocProvider( create: (BuildContext context) => CounterCubit(), child: BlocBuilder<CounterCubit, CounterState>(builder: _counter), ); } Widget _counter(BuildContext context, CounterState state) { return Scaffold( appBar: AppBar(title: const Text('Cubit范例')), body: Center( child: Text('点击了 ${state.count} 次', style: TextStyle(fontSize: 30.0)), ), floatingActionButton: FloatingActionButton( onPressed: () => context.bloc<CounterCubit>().increase(), child: const Icon(Icons.add), ), ); } } 总结在Bloc模式里面,如果页面不是过于复杂,使用Cubit去写,基本完全够用了;但是如果业务过于复杂,还是需要用Bloc去写,需要将所有的事件行为管理起来,便于后期维护
OK,Bloc的简化模块,Cubit模式就这样讲完了,对于自己业务写的小项目,我就经常用这个Cubit去写
最后Bloc还有很多Api针对不同的场景非常的实用,例如:MultiBlocProvider,BlocListener,MultiBlocListener,BlocConsumer等等,这里面有些Api和Provider的Api是非常相似的,例如MultiXxxxx,这都是为了减少嵌套,提供多个全局Bloc而提供,大家可以去瞧瞧看,用法也都非常的相似
Cubit范例代码地址
Cubit范例代码
Bloc范例代码地址
Bloc范例代码