flutter EventBus
flutter EventBus
2023-09-14 09:04:29 时间
定义好这个eventbus工具
可以在里面定义事件
import 'dart:async';
import 'package:event_bus/event_bus.dart';
import 'package:flutter/material.dart';
import 'package:social_im/models/im_customInfo_model.dart';
import 'package:social_im/pages/IMCCalling/ui/base/CallTypes.dart';
import 'package:social_im/pages/IMCCalling/ui/base/CallingScenes.dart';
import 'package:tencent_im_sdk_plugin/models/v2_tim_conversation.dart';
class EventBusUtil {
static EventBus? _eventBus;
//获取单例
static EventBus getInstance() {
if (_eventBus == null) {
_eventBus = EventBus();
}
return _eventBus!;
}
//返回某事件的订阅者
static StreamSubscription<T> listen<T extends Event>(
Function(T event) onData) {
if (_eventBus == null) {
_eventBus = EventBus();
}
//内部流属于广播模式,可以有多个订阅者
return _eventBus!.on<T>().listen(onData);
}
//发送事件
static void fire<T extends Event>(T e) {
if (_eventBus == null) {
_eventBus = EventBus();
}
_eventBus!.fire(e);
}
}
abstract class Event {}
class LoginEvent extends Event {
static int eventIn = 1;
static int eventOut = 0;
static int onKickedOffline = 2;
static int onUserSigExpired = 3;
final int status;
LoginEvent(this.status);
}
class LoginSuccessdEvent extends Event {}
class MomentListEvent extends Event {}
class ObtainingLocationPermissionEvent extends Event {}
class PhotoListEvent extends Event {
int photoType = 0;
///0上传 1删除
PhotoListEvent(this.photoType);
}
class PhotoPayEvent extends Event {
int photoId = 0;
PhotoPayEvent(this.photoId);
}
class VideoListEvent extends Event {
int videoType = 0;
///0上传 1删除
VideoListEvent(this.videoType);
}
class VideoPayEvent extends Event {
int videoId = 0;
VideoPayEvent(this.videoId);
}
class StowKeyboardEvent extends Event {}
class MomentEvent extends Event {
final bool? isLike;
final int? commentCount;
final int? likeCount;
MomentEvent({this.isLike, this.commentCount, this.likeCount});
}
class MessageNoticeEvent extends Event {
final int? messageType;
final int? messageNum;
final int? activityType;
MessageNoticeEvent({this.messageType, this.messageNum,this.activityType});
}
class MessageEvent extends Event {
final V2TimConversation v2timConversation;
MessageEvent({required this.v2timConversation});
}
class CallingVideoEvent extends Event {
final CallingScenes callingVideoType;
CallingVideoEvent({required this.callingVideoType});
}
class ScreeningNearbyEvent extends Event {
RangeValues? rangeValues;
int? checkType;
ScreeningNearbyEvent({this.rangeValues, this.checkType});
}
class ImCustomInfoEvent extends Event {
ImCustomInfoModel? imCustomInfoModel;
ImCustomInfoEvent(this.imCustomInfoModel);
}
class MatchDialogEvent extends Event {
int matchType;
int matchUserId;
int playType;
MatchDialogEvent(this.matchType, this.matchUserId, this.playType);
}
class MatchPayNumDialogEvent extends Event {
Map<String, dynamic> payData;
MatchPayNumDialogEvent(this.payData);
}
class ShakeCloseDialogEvent extends Event{
bool isClose;
ShakeCloseDialogEvent(this.isClose);
}
class IsCanShakeEvent extends Event{
bool isCanShake;
IsCanShakeEvent(this.isCanShake);
}
使用:
发布者
//如果达到阈值,EventBus发布消息,让结果弹窗返回该界面,重新摇一摇
EventBusUtil.fire(ShakeCloseDialogEvent(true));
订阅者
late StreamSubscription<ShakeCloseDialogEvent> _shakeCloseDialogEvent;
@override
void initState() {
// TODO: implement initState
_shakeCloseDialogEvent = EventBusUtil.listen((event) {//不断监听,如果收到的是true就返回界面
if (event.isClose) {
Navigator.pop(context, true);
}
});
super.initState();
}
@override
void dispose() {
// TODO: implement dispose
_shakeCloseDialogEvent.cancel();//取消
super.dispose();
}
相关文章
- Flutter之屏幕适配
- 重走Flutter状态管理之路—Riverpod最终篇
- 源码推荐:一款flutter实现的闹钟
- Flutter 绘制集录 | 第四画 - 风车
- Flutter 下载篇 - 贰 | 当下载器遇上网络库切换
- Flutter 组件集录 | 3.7 新增 - ContextMenu 菜单
- Flutter & ChatGPT | 代码生成器
- flutter系列之:flutter中listview的高级用法
- 【错误记录】Flutter 设备连接显示 Loading... ( 断网 | 删除 flutter/bin/cache/lockfile 文件 )
- 【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )
- 【Flutter】Image 组件 ( 配置本地 gif 图片资源 | 本地资源加载 placeholder )
- 【Flutter】侧拉导航栏实现 ( Drawer 组件 | PageView 组件 )
- 【Flutter】Banner 轮播组件 ( flutter_swiper 插件 | Swiper 组件 )
- 【Flutter】Future 异步编程 ( 简介 | then 方法 | 异常捕获 | async、await 关键字 | whenComplete 方法 | timeout 方法 )