Flutter通信中介插件broker的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter通信中介插件broker的使用

Magator Logo

Broker

Flutter应用程序的对象代理
从应用的任何位置向任意小部件发送消息

Broker 是一个为 Flutter 应用程序设计的消息代理包,它允许你从应用的任何地方向任何小部件发送消息。通过 Broker,你只需初始化一次 Broker 类,就可以在应用的任何地方向上下文中的小部件发送消息。此外,如果你有多个订阅者,Broker 支持消息广播,确保所有相关的小部件都能接收到相同的消息。

功能特性

  • 为 Flutter 应用提供消息代理。
  • 不论小部件在 widget 树中的位置如何,都可以向其发送消息。
  • 支持消息广播。
  • 初始化一次即可全局使用,使用 getBroker() 函数。
import 'package:broker/broker.dart';

使用步骤

第一步:初始化 Broker

void main() {
    // 初始化 Broker 一次,并在任何地方使用
    Broker broker = Broker();

    runApp(const MyApp());
}

第二步:注册和监听消息

// 建议将以下代码作为无状态或有状态小部件的属性
late Broker broker;

// 建议将以下代码放在 initState() 方法中
broker = getBroker();
broker.register("<subscriber-name>");

broker.listen("<subscriber-name>", (event) {
    Protocol protocol = (event as Protocol);
    print("Message: ${protocol.data}");
});

如果在设置过程中遇到问题,请查看 示例代码


完整示例代码

以下是一个完整的示例,展示了如何使用 Broker 插件来实现消息的发布和订阅功能。

import 'package:flutter/material.dart';
import 'package:broker/broker.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final broker = Broker();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // 这是你的应用根组件
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Broker Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  late Broker broker;

  String data = "";

  // 演示如何为特定订阅者发布消息
  _brokerMessagePublisherDemo() {
    int count = 0;
    final _timer = Timer.periodic(Duration(seconds: 2), (_) {
      broker.publish("<publisher-name>", "<subscriber-name>", "${count++}");
    });
  }

  [@override](/user/override)
  void initState() {
    super.initState();

    // 初始化 Broker 并注册订阅者
    broker = getBroker();
    broker.register("<subscriber-name>");

    // 监听来自订阅者的事件
    broker.listen("<subscriber-name>", (event) {
      Protocol protocol = (event as Protocol);
      setState(() {
        data = protocol.data;
      });
    });

    // 启动定时器以模拟消息发布
    _brokerMessagePublisherDemo();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Broker Demo"),
        actions: [
          IconButton(
            icon: const Icon(Icons.calculate_rounded),
            onPressed: () {},
          )
        ],
      ),

      body: Container(
        child: Center(
            child: Text("Data: $data")
        )
      )
    );
  }
}

更多关于Flutter通信中介插件broker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter通信中介插件broker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,broker 是一个用于简化组件间通信的插件。它允许你在不同的组件、页面或模块之间传递消息和数据,而无需直接引用彼此。这种解耦的方式使得代码更加模块化和易于维护。

安装 broker 插件

首先,你需要在 pubspec.yaml 文件中添加 broker 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  broker: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

使用 broker 插件

1. 创建 Broker 实例

首先,你需要创建一个 Broker 实例。通常,你可以在应用的顶层(如 main.dart 中)创建这个实例,并将其传递给需要通信的组件。

import 'package:broker/broker.dart';

final broker = Broker();

2. 注册消息处理器

你可以通过 registerHandler 方法来注册一个消息处理器。当有消息发送到指定的主题时,这个处理器会被调用。

broker.registerHandler<String>('greet', (message) {
  print('Received: $message');
});

3. 发送消息

你可以使用 send 方法来发送消息到指定的主题。

broker.send('greet', 'Hello, World!');

4. 取消注册处理器

如果你不再需要某个处理器,可以使用 unregisterHandler 方法来取消注册。

broker.unregisterHandler('greet');

示例代码

以下是一个完整的示例,展示了如何在 Flutter 应用中使用 broker 插件进行组件间通信。

import 'package:flutter/material.dart';
import 'package:broker/broker.dart';

void main() {
  final broker = Broker();

  // 注册消息处理器
  broker.registerHandler<String>('greet', (message) {
    print('Received: $message');
  });

  runApp(MyApp(broker: broker));
}

class MyApp extends StatelessWidget {
  final Broker broker;

  MyApp({required this.broker});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Broker Example')),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              // 发送消息
              broker.send('greet', 'Hello, World!');
            },
            child: Text('Send Message'),
          ),
        ),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!