flutter 为什么BlocObserver中的所有方法都是空的?

lmvvr0a8  于 2022-12-19  发布在  Flutter
关注(0)|答案(1)|浏览(84)

查看定义BlocObserver的类,所有方法都没有定义任何功能。BlocObserver不从任何其他类继承任何东西。它只是通过在示例化Bloc期间创建来连接到Bloc类。
BlocObserver中的方法在BlocObserver中为空时,它们如何具有功能?
通读BlocObserver定义和Bloc定义。

b1uwtaje

b1uwtaje1#

该怎么做

核心概念中很好地描述了您期望使用BlocObserver的方式。
基本上,由于BlocObserver是一个抽象类,您可以在自己的类中扩展它,为处理程序方法提供适合您的用例的实现。
所以,大致上:

class CustomObserver extends BlocObserver {
  @override
  void onChange(BlocBase bloc, Change change) {
    super.onChange(bloc, change);

    // Perform logic based on the change
  }
}

然后,将此类的示例指定为Bloc上的静态observer,例如:

Bloc.observer = CustomObserver();

在此之后,您将期望通过Bloc传播的任何更改调用您的CustomObserver.onChange()方法。

工作原理

为某个框架对象提供当某些事件发生时要运行的代码的定义是一种非常常见的模式,因此掌握它是很有用的,通常(在本例中也是如此)它比看起来要简单得多。
如上所述,通过设置静态成员,可以为Bloc提供一个BlocObserver。这意味着:

  • 系统中一次只能有一个观察者,并且
  • 任何代码都可以通过调用Bloc.observer直接访问它

然后,在进行状态更改时,确保通过BlocBase的示例(如Cubit)来完成,该示例负责调用观察器上的适当方法。
因此,再次使用Core Concepts作为基础,当调用CounterCubit().increment()时,调用堆栈如下所示:

  • x1米11米1x
  • CounterCubit.emit/Cubit.emit/BlocBase.emit(通过继承)
  • CounterCubit.onChange
  • BlocBase.onChange
  • SimpleBlocObserver.onChange

此时,您回到了自己的代码中,可以看到SimpleBlocObserver.onChange(...)调用super.onChange(...),这不是魔术,只是函数调用。

相关问题