在Flutter项目中,关于event_bus的理解与简单使用

1,061 阅读1分钟

在进行Flutter项目开始发时,避免不了页面之间的消息通信,比如,我在A页面push到B页面后,点击B页面中的某一个按钮,然后想将这个事件回调给A页面,以前在做ios对的时候很容易想到使用(通知Notification或者Block)可以处理这个业务需求,在Flutter中的话,可以考虑使用event_bus这块框架进行实现

简单描述一下event_bus的使用步骤

  • 首先为了保证我的A页面和B页面使用的是同一个event_bus对象,我将这次的event_bus事件对象放在一个单利类里面进行了初始化:
// 单例类的关联模块
import 'package:event_bus/event_bus.dart';

class Manager {

  // eventBus对象
  EventBus demoEventBus;

  // 工厂模式
  factory Manager() => _getInstance();
  static Manager get instance => _getInstance();
  static Manager _instance;
  Manager._internal() {
    // 初始化Event_Bus对象
    demoEventBus = new EventBus();
    
  }
  static Manager _getInstance() {
    if (_instance == null) {
      _instance = new Manager._internal();
    }
    return _instance;
  }
}
  • 在A页面中进行demoEventBus的注册监听,一般放在initState中进行初始化
class ClassADemoView extends StatefulWidget {

  ClassADemoView({@required this.pageTag});

  @override
  _ClassADemoViewState createState() => _ClassADemoViewState();
}

class _ClassADemoViewState extends State<ClassADemoViewView> with AutomaticKeepAliveClientMixin {

  Manager manager;
  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    manager = Manager.instance;
    // 监听demoEventBus
    // 这里说明一下manager.demoEventBus.on<String>()中的<String>属性,这里其实是一个泛型<T>所有可以是任何你想监听的数据类型
    manager.demoEventBus.on<String>().listen((event) {
      // 打印监听到的消息
      print(event);
    });
  • 假如在B页面中有一个按钮点击事件btnClick,点击按钮之后,发送事件
// 这是B页面中的一个按钮点击事件
onPressed: (){
  Manager manager = Manager.instance;
  manager.demoEventBus.fire("我是B页面,现在进行事件发送");
}

当完成这些步骤之后,点击B页面的按钮,你就可以在控制台看到打印信息:我是B页面,现在进行事件发送,这些就是关于event_bus的简单使用的介绍

不急不躁,好好学习