bloc_notification 包提供了一个 mixin,用于将响应 Flutter Bloc 分派的某个操作的机制与状态分离开来。在使用 bloc 库时,您可能会发现某些类型的操作需要在 UI 层进行处理,例如显示对话框或导航到另一个屏幕。当与 BlocListener 一起使用时,管理这些操作及其相关数据可能会变得繁琐。
例如,如果状态中有一个标志变量,通知应用程序显示一个对话框,那么您需要在对话框完成后关闭该标志。虽然这种方法在某些情况下是必要的,但为每个操作管理这些标志可能会很麻烦。
为了简化这些与 UI 相关的操作的管理,bloc_notification 包提供了一个简单的通知机制,该机制由 Bloc 触发,由 UI 层处理。这些通知不与当前状态绑定,而是依赖于简单的流-回调机制。这种方法有助于降低应用程序中管理与 UI 相关的操作的复杂性。
要使用 bloc_notification 包,只需导入 mixin 并将其应用于您的 Bloc。然后,您可以照常定义和分派操作,同时使用提供的回调机制在 UI 层单独处理与 UI 相关的操作。
功能
BlocNotificationMixin:一个允许您通过 bloc 向 UI 层发送通知的 mixin。BlocNotificationListener:一个监听BlocNotificationMixin发送的通知的 widget,它包装了BlocListenser。BlocNotificationConsumer:一个监听BlocNotificationMixin发送的通知的 widget,它包装了BlocConsumer。NotificationObserverMixin:用于BlocObserver的 mixin,用于额外监听通知。- 易于迁移:通过多个 mixin 轻松添加功能,无需继承。
- 兼容性:与
Bloc和Cubit都兼容。
用法
BlocNotificationMixin
BlocNotificationMixin 提供了一种通过回调机制通知 UI 某些事件的方式。您可以使用它如下:
class MyBloc extends Bloc<MyEvent, MyState> with BlocNotificationMixin<MyState, MyNotification> {
void performAction() {
// ...
// `notify(...)` come with the mixin.
notify(MyNotification());
}
@override
void onNotification(BlocNotification<MyNotification> blocNotification) {
// response to notification
}
}
MyNotification 类可以是任何数据结构,例如:
abstract class Notification {}
class ShowDialogNotification extends Notification {
ShowDialogNotification(this.message);
final String message;
}
class NavigateToPageNotification extends Notification {
NavigateToPageNotification(this.pageName);
final String pageName;
}
BlocNotificationListener
BlocNotificationListener 类似于 BlocListener widget,但它除了监听状态更改外,还监听通知。您可以使用它如下:
BlocNotificationListener<MyBloc, MyState, MyNotification>(
notificationListener: (BuildContext context, MyNotification notification) {
// Handle the notification here.
},
child: MyWidget(),
);
BlocNotificationConsumer
BlocNotificationConsumer 类似于 BlocConsumer widget,但它除了监听状态更改外,还监听通知。您可以使用它如下:
BlocNotificationConsumer<MyBloc, MyState, MyNotification>(
notificationListener: (BuildContext context, MyNotification notification) {
// ..
},
builder: (BuildContext context, MyState state) {
// Build your widget here.
},
);
请注意,触发的通知不会导致 UI 重建。
NotificationObserver
通过 mixin 已有的 BlocObserver,轻松观察从 bloc/cubit 触发的通知。
class MyObserver extends BlocObserver with NotificationObserverMixin{
@override
void onNotification(BlocBase bloc, BlocNotification notification) {
// ..
}
}
许可证
本软件包根据 MIT 许可证授权。详情请参阅 LICENSE 文件。