【问题标题】:Bloc observer not showing log集团观察员不显示日志
【发布时间】:2022-01-01 08:01:15
【问题描述】:

嘿,我一直将 bloc 观察者作为我 Flutter 应用程序中的主要状态管理工具,使用它让事情变得更容易。 bloc 观察者是我用来调试和观察正在发生的事情的主要工具。但是在迁移到 Bloc v8.0.0 之后,bloc 观察者已经停止记录。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  HttpOverrides.global = MyHttpOverrides();
  await Hive.initFlutter();
  Hive.registerAdapter(UserAdapter());
  await Hive.openBox<User>('user');
  await Firebase.initializeApp();
  BlocOverrides.runZoned(
    () {},
    blocObserver: SimpleBlocObserver(),
  );
   ...
}

这是主函数的sn-p

Bloc observer

import 'package:flutter_bloc/flutter_bloc.dart';

class SimpleBlocObserver extends BlocObserver {
  @override
  void onEvent(Bloc bloc, Object? event) {
    super.onEvent(bloc, event);
    print(event);
  }

  @override
  void onChange(BlocBase bloc, Change change) {
    super.onChange(bloc, change);
    print(change);
  }

  @override
  void onCreate(BlocBase bloc) {
    super.onCreate(bloc);
    print(bloc);
  }

  @override
  void onTransition(Bloc bloc, Transition transition) {
    super.onTransition(bloc, transition);
    print(transition);
  }

  @override
  void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
    print(error);
    super.onError(bloc, error, stackTrace);
  }
}

帮帮我

【问题讨论】:

    标签: android flutter dart bloc


    【解决方案1】:

    您的runApp() 应该在BlocOverrides.runZoned()

    void main() async {
     WidgetsFlutterBinding.ensureInitialized();
     HttpOverrides.global = MyHttpOverrides();
     await Hive.initFlutter();
     Hive.registerAdapter(UserAdapter());
     await Hive.openBox<User>('user');
     await Firebase.initializeApp();
     BlocOverrides.runZoned(
       () {
         runApp(App())
       },
       blocObserver: SimpleBlocObserver(),
     );
    }
    

    【讨论】:

    • 我试过这个解决方案,但仍然没有显示 BloC 日志。它对 v8.0.0 中的任何人都有效吗?
    【解决方案2】:

    在我的情况下,除了blocObserver,我还使用了HydratedStorage

    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
    
      final storage = await HydratedStorage.build(
        storageDirectory: await getApplicationDocumentsDirectory(),
      );
    
      HydratedBlocOverrides.runZoned(
        () => runApp(MyApp(
          appRouter: AppRouter(),
          connectivity: Connectivity(),
        )),
        storage: storage,
        blocObserver: AppBlocObserver(),
      );
    }
    

    当前的集团依赖:

    flutter_bloc: ^8.0.1
    hydrated_bloc: ^8.0.0
    

    【讨论】:

    • @kashlo 试试这个,这对我有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多