pub package

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 轻松添加功能,无需继承。
  • 兼容性:与 BlocCubit 都兼容。

用法

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 文件。

GitHub

查看 Github