Flutter Bloc中runZoned已弃用,如何用Bloc.transformer替代?
解决
BlocOverrides.runZoned废弃问题的替代方案 你遇到的提示说明BlocOverrides.runZoned已被标记为废弃,将在v9.0.0版本中移除。针对你当前仅设置全局BlocObserver的场景,正确的替代方式非常简单:直接通过Bloc.observer静态属性配置全局观察者即可。
修改后的代码
import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; void main() { // 直接设置全局BlocObserver,替代废弃的BlocOverrides.runZoned Bloc.observer = AppBlocObserver(); runApp(const App()); } /// 自定义[BlocObserver],监听所有bloc和cubit的状态变化 class AppBlocObserver extends BlocObserver { @override void onChange(BlocBase bloc, Change change) { super.onChange(bloc, change); if (bloc is Cubit) print(change); } @override void onTransition(Bloc bloc, Transition transition) { super.onTransition(bloc, transition); print(transition); } }
补充说明
如果后续需要自定义事件转换器(Transformer)这类更复杂的配置,才需要用到提示中提到的Bloc.transformer。但你的代码仅用于设置全局状态观察者,所以直接赋值Bloc.observer就能完全替代原来BlocOverrides.runZoned的功能,且写法更简洁。
内容的提问来源于stack exchange,提问作者Sweta Jain
相关产品推荐
相关产品推荐

