Flutter 使用event_bus 监听数据

目录

1、先创建一个EventBusUtils的单例类

2、调用

3、监听事件


1、先创建一个EventBusUtils的单例类

import 'package:event_bus/event_bus.dart';

class EventBusUtils {
  // 私有的静态实例
  static EventBusUtils _singeton = EventBusUtils._internal();
  // 内部的 EventBus 实例
  static EventBus eventBus = EventBus();
  // 私有构造函数
  EventBusUtils._internal();
  // 提供单例实例 factory确保EventBusUtils只被实例化一次
  factory EventBusUtils() {
    return _singeton;
  }
}

///只需要调用方法
class RequestDetailOrder {
  RequestDetailOrder();
}

///调用方法并传值
class SearchDeviceList {
  String search;

  SearchDeviceList(this.search);
}


2、调用

在发送通知的地方直接调用fire 后面是监听具体的某个类型

//传值
EventBusUtils.eventBus.fire(SearchDeviceList(searchText));

//只实现方法
EventBusUtils.eventBus.fire(RequestDetailOrder());

3、监听事件

在StatefulWidget 组件中

 late StreamSubscription subscription;

@override
  void initState() {
    super.initState();

    //接收通知

    ///有传值写法
    subscription = EventBusUtils.eventBus.on<SearchDeviceList>().listen((event) {
      searchText = event.search;
      // 监听到searchText变化,进行逻辑操作
      _refreshController.requestRefresh(
        duration: const Duration(milliseconds: 100),
      );
    });

    //无传值写法
    subscription =
        EventBusUtils.eventBus.on<RequestDetailOrder>().listen((event) {
      getData();
    });
  }
// 注销监听
 @override
  void dispose() {
    subscription.cancel();
    super.dispose();
  }