查看定义BlocObserver的类,所有方法都没有定义任何功能。BlocObserver不从任何其他类继承任何东西。它只是通过在示例化Bloc期间创建来连接到Bloc类。当BlocObserver中的方法在BlocObserver中为空时,它们如何具有功能?通读BlocObserver定义和Bloc定义。
BlocObserver
Bloc
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()方法。
CustomObserver.onChange()
为某个框架对象提供当某些事件发生时要运行的代码的定义是一种非常常见的模式,因此掌握它是很有用的,通常(在本例中也是如此)它比看起来要简单得多。如上所述,通过设置静态成员,可以为Bloc提供一个BlocObserver。这意味着:
Bloc.observer
然后,在进行状态更改时,确保通过BlocBase的示例(如Cubit)来完成,该示例负责调用观察器上的适当方法。因此,再次使用Core Concepts作为基础,当调用CounterCubit().increment()时,调用堆栈如下所示:
BlocBase
Cubit
CounterCubit().increment()
CounterCubit.emit
Cubit.emit
BlocBase.emit
CounterCubit.onChange
BlocBase.onChange
SimpleBlocObserver.onChange
此时,您回到了自己的代码中,可以看到SimpleBlocObserver.onChange(...)调用super.onChange(...),这不是魔术,只是函数调用。
SimpleBlocObserver.onChange(...)
super.onChange(...)
1条答案
按热度按时间b1uwtaje1#
该怎么做
核心概念中很好地描述了您期望使用
BlocObserver
的方式。基本上,由于
BlocObserver
是一个抽象类,您可以在自己的类中扩展它,为处理程序方法提供适合您的用例的实现。所以,大致上:
然后,将此类的示例指定为
Bloc
上的静态observer,例如:在此之后,您将期望通过
Bloc
传播的任何更改调用您的CustomObserver.onChange()
方法。工作原理
为某个框架对象提供当某些事件发生时要运行的代码的定义是一种非常常见的模式,因此掌握它是很有用的,通常(在本例中也是如此)它比看起来要简单得多。
如上所述,通过设置静态成员,可以为
Bloc
提供一个BlocObserver
。这意味着:Bloc.observer
直接访问它然后,在进行状态更改时,确保通过
BlocBase
的示例(如Cubit
)来完成,该示例负责调用观察器上的适当方法。因此,再次使用Core Concepts作为基础,当调用
CounterCubit().increment()
时,调用堆栈如下所示:CounterCubit.emit
/Cubit.emit
/BlocBase.emit
(通过继承)CounterCubit.onChange
BlocBase.onChange
SimpleBlocObserver.onChange
此时,您回到了自己的代码中,可以看到
SimpleBlocObserver.onChange(...)
调用super.onChange(...)
,这不是魔术,只是函数调用。