You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:25:54