Flutter事件总线插件get_event_bus的使用

Flutter事件总线插件get_event_bus的使用

get_event_bus.dart 是一个轻量级的事件总线库,专门为 get.dart 设计。它支持所有平台,并且具有100%的测试覆盖率和稳定的API。

快速开始

无需任何设置即可使用该库。以下是一些基本用法示例:

void main() {
  // 触发一个事件
  Get.bus.fire(SomeClass());

  // 监听一个事件
  Get.bus.on<SomeClass>((event) => Get.log(event), cancelOnError: true);

  // 只监听一次事件
  Get.bus.once<SomeClass>((event) => Get.log(event));

  // 直接使用流
  Get.bus.stream.listen((event) => Get.log(event), onData() => Get.log('onData'));

  // 自定义底层流
  Get.bus.streamController = PublishSubject();

  // 独立使用
  final bus = EventBus();
}

特性

  • 极简和可扩展:设计简洁,易于扩展。
  • 支持 get.dart:与 get.dart 深度集成。
  • 支持所有平台:适用于所有Flutter支持的平台。
  • 100% 测试覆盖率:确保代码的可靠性和稳定性。

维护

  • 维护中:持续更新和维护。
  • 稳定 API:提供稳定的接口以供使用。

示例

基本示例

下面是一个简单的示例,展示如何使用 get_event_bus 来触发和监听事件:

import 'package:get/get.dart';
import 'package:get_event_bus/get_event_bus.dart';

class MyEvent {}
class MyEvent1 extends MyEvent {}
class MyEvent2 extends MyEvent {}
class MyEvent3 extends MyEvent {}

void main() {
  // 监听所有MyEvent及其子类事件
  Get.bus.on<MyEvent>((event) => Get.log('called')); // 将被调用3次
  
  // 只监听一次MyEvent及其子类事件
  Get.bus.once<MyEvent>((event) => Get.log('once called')); // 将被调用1次
  
  // 监听特定类型的事件
  Get.bus.on<MyEvent1>((event) => Get.log('MyEvent1 called')); // 将被调用1次
  Get.bus.on<MyEvent2>((event) => Get.log('MyEvent2 called')); // 将不被调用
  
  // 触发事件
  Get.bus.fire(MyEvent1());
  Get.bus.fire(MyEvent2());
  Get.bus.fire(MyEvent3());
}

自定义示例

如果需要自定义事件总线的行为,可以继承 EventBus 并替换默认的 streamController

import 'package:get/get.dart';
import 'package:rxdart/rxdart.dart';
import 'package:get_event_bus/get_event_bus.dart';

class MyEventBus extends EventBus {
  // 在这里添加自定义代码
}

void main() {
  // 自定义StreamController
  Get.bus.streamController = PublishSubject(); 

  // 自定义整个挂载的EventBus
  GetEventBusExtension.eventBus = MyEventBus();
}

通过这些示例,您可以快速上手 get_event_bus 插件,并根据项目需求进行扩展和定制。希望这些内容对您有所帮助!


更多关于Flutter事件总线插件get_event_bus的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter事件总线插件get_event_bus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用get_event_bus插件来实现事件总线的示例代码。

安装get_event_bus插件

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

dependencies:
  flutter:
    sdk: flutter
  get_event_bus: ^2.0.0  # 请检查最新版本号

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

创建事件类

定义你想要通过事件总线传递的事件类。例如,我们可以创建一个简单的事件类MessageEvent

// event.dart
class MessageEvent {
  final String message;

  MessageEvent(this.message);
}

配置和使用事件总线

在你的Flutter应用中,你可以通过以下步骤来使用get_event_bus

  1. 初始化事件总线

    你可以在应用启动时初始化事件总线。例如,在main.dart文件中:

    import 'package:flutter/material.dart';
    import 'package:get_event_bus/get_event_bus.dart';
    import 'event.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        // 初始化事件总线
        GetEventBus.init();
    
        return MaterialApp(
          title: 'Flutter EventBus Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(),
        );
      }
    }
    
  2. 发送事件

    在需要发送事件的地方,你可以使用GetEventBus.emit方法。例如,在一个按钮点击事件中:

    import 'package:flutter/material.dart';
    import 'package:get_event_bus/get_event_bus.dart';
    import 'event.dart';
    
    class SendEventScreen extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Send Event Screen'),
          ),
          body: Center(
            child: ElevatedButton(
              onPressed: () {
                // 发送事件
                GetEventBus.emit(MessageEvent("Hello, this is a message!"));
                Navigator.pop(context);  // 关闭当前页面
              },
              child: Text('Send Message'),
            ),
          ),
        );
      }
    }
    
  3. 监听事件

    在需要监听事件的地方,你可以使用GetEventBus.on方法。例如,在另一个页面中:

    import 'package:flutter/material.dart';
    import 'package:get_event_bus/get_event_bus.dart';
    import 'event.dart';
    
    class ReceiveEventScreen extends StatefulWidget {
      @override
      _ReceiveEventScreenState createState() => _ReceiveEventScreenState();
    }
    
    class _ReceiveEventScreenState extends State<ReceiveEventScreen> {
      String _message = "";
    
      @override
      void initState() {
        super.initState();
    
        // 监听事件
        GetEventBus.on<MessageEvent>().listen((event) {
          setState(() {
            _message = event.message;
          });
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Receive Event Screen'),
          ),
          body: Center(
            child: Text(_message),
          ),
        );
      }
    
      @override
      void dispose() {
        // 取消监听
        GetEventBus.off<MessageEvent>();
        super.dispose();
      }
    }
    
  4. 导航到发送和接收事件的页面

    最后,你可以在MyHomePage中添加按钮来导航到发送和接收事件的页面:

    import 'package:flutter/material.dart';
    import 'send_event_screen.dart';
    import 'receive_event_screen.dart';
    
    class MyHomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Flutter EventBus Demo Home'),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                ElevatedButton(
                  onPressed: () {
                    Navigator.push(
                      context,
                      MaterialPageRoute(builder: (context) => SendEventScreen()),
                    );
                  },
                  child: Text('Send Event'),
                ),
                ElevatedButton(
                  onPressed: () {
                    Navigator.push(
                      context,
                      MaterialPageRoute(builder: (context) => ReceiveEventScreen()),
                    );
                  },
                  child: Text('Receive Event'),
                ),
              ],
            ),
          ),
        );
      }
    }
    

总结

以上代码展示了如何在Flutter项目中使用get_event_bus插件来实现事件总线机制。你可以通过发送和监听事件来在不同组件之间传递信息。记得在不需要监听事件时取消监听,以避免内存泄漏。

回到顶部