美文网首页Flutter圈子
Flutter之EventBus消息总线

Flutter之EventBus消息总线

作者: Qson1 | 来源:发表于2020-03-18 11:58 被阅读0次

EventBus事件总线

原生开发中,时常遇到通知或广播机制,应对需要跨页面的事件通知。作为移动端跨平台框架的Flutter而言,也有同样的解决方案-EventBus,event_bus提供事件总线功能来实现一些状态的更新,核心是基于Dart Streams(流);事件总线通常实现了订阅者模式,订阅者模式包含发布者和订阅者两种角色,可以通过事件总线来触发事件和监听事件,下面来通过更改主题颜色的案例认识下event_bus。

1 集成插件

在pubspec.yaml文件中添加event_bus,当前版本1.1.1

event_bus: ^1.1.0

在使用的地方import

import 'package:asset_pickers/asset_pickers.dart';

2 创建EventBus

通常每个应用程序只有一个事件总线,但可以设置多个事件总线以对一组特定事件进行分组。新建event_bus.dart类,在类中创建EventBus实例,并使其能够在其他类中被使用,并定义了ThemeEvent通知修改主题样式的事件

import 'package:event_bus/event_bus.dart';EventBus eventBus = EventBus();enum ThemeModel {  light, // 浅色  dark, // 深色}class ThemeEvent {  ThemeModel model = ThemeModel.light;  ThemeEvent(this.model);}

3 注册订阅者

下面我们在main.dart中,注册订阅者,收到修改模式的通知后,处理样式更改逻辑,多个页面同样处理。

@override  void initState() {    super.initState();    _themeModelscription = eventBus.on<ThemeEvent>().listen((event) {      setState(() {        color = event.model == ThemeModel.light            ? Color(0xfff5f5f5)            : Color(0xff000000);      });    });  }

4 触发订阅通知

在需要触发的地方,调用下面方法,即可通知到已订阅该类型通知指出相应逻辑。

eventBus.fire(ThemeEvent(model));

5 解除订阅

所涉及的订阅者在生命周期结束前,需要解除订阅,防止内存泄漏。

void dispose() {    super.dispose();    //取消订阅    _themeModelscription.cancel();  }
image

1.案例github地址:https://github.com/Qson8/event_bus_demo
2.event_bus插件地址:https://pub.dev/packages/event_bus

了解学习更多关于Flutter技术,欢迎公众号: Hi Flutter,个人微信:qiukangsheng

相关文章

网友评论

    本文标题:Flutter之EventBus消息总线

    本文链接:https://www.haomeiwen.com/subject/kxyqyhtx.html