返回

用Flutter进行跨页面通知广播

见解分享

Flutter 中的通知传值

Flutter 中,通知是一种跨页面传输数据的方式。它允许您在不直接引用对方的情况下,将数据从一个页面发送到另一个页面。这对于跨页面共享数据非常有用,例如,当您需要从一个页面导航到另一个页面时,并且您希望将一些数据从第一个页面传递到第二个页面。

创建通知

要创建通知,您需要使用 BroadcastChannel 类。BroadcastChannel 类允许您创建命名通道,您可以通过此通道向其他页面发送数据。以下是如何创建一个名为“my_channel”的通知:

final BroadcastChannel _channel = BroadcastChannel('my_channel');

发送通知

要发送通知,您需要使用 _channel.send() 方法。此方法将数据作为参数,并将数据发送到命名通道。以下是如何发送一个字符串“Hello world!”的通知:

_channel.send('Hello world!');

订阅通知

要订阅通知,您需要使用 _channel.receiveBroadcastStream() 方法。此方法返回一个 Stream,您可以使用它来侦听广播通知。以下是如何订阅名为“my_channel”的通知:

_channel.receiveBroadcastStream().listen((message) {
  // 这里处理收到的通知
});

取消订阅通知

要取消订阅通知,您需要使用 _channel.close() 方法。此方法将关闭命名通道,并且您将不再收到该通道的通知。以下是如何取消订阅名为“my_channel”的通知:

_channel.close();

使用单例和事件总线

在 Flutter 中,使用单例和事件总线是实现广播通知的一种常见方式。单例是一个全局对象,它可以在应用程序的任何地方访问。事件总线是一个对象,它允许您订阅和发布事件。以下是如何使用单例和事件总线来实现广播通知:

  1. 创建一个单例类,该类将包含事件总线。
  2. 在需要订阅通知的页面中,将该单例类实例化并订阅事件总线。
  3. 在需要发送通知的页面中,将该单例类实例化并发布事件到事件总线。

以下是如何使用单例和事件总线来发送和接收通知的示例代码:

// 单例类
class MySingleton {
  final _eventBus = EventBus();

  EventBus get eventBus => _eventBus;
}

// 订阅通知
class MyFirstPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final singleton = MySingleton.instance;
    singleton.eventBus.on<MyEvent>().listen((event) {
      // 这里处理收到的通知
    });

    return Scaffold(
      appBar: AppBar(
        title: Text('My First Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 跳转到第二个页面
            Navigator.push(context, MaterialPageRoute(builder: (context) => MySecondPage()));
          },
          child: Text('Go to Second Page'),
        ),
      ),
    );
  }
}

// 发送通知
class MySecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final singleton = MySingleton.instance;
    singleton.eventBus.fire(MyEvent());

    return Scaffold(
      appBar: AppBar(
        title: Text('My Second Page'),
      ),
      body: Center(
        child: Text('This is the second page'),
      ),
    );
  }
}

// 事件类
class MyEvent {}

结语

广播通知是 Flutter 中跨页面传递数据的一种非常有用的方式。它允许您在不直接引用对方的情况下,将数据从一个页面发送到另一个页面。这对于跨页面共享数据非常有用,例如,当您需要从一个页面导航到另一个页面时,并且您希望将一些数据从第一个页面传递到第二个页面。