在Flutter中,EventBus是一个用于实现跨页面和跨组件通信的常用设计模式。以下是对Flutter EventBus封装的详细步骤,包括理解EventBus的基本概念、设置依赖、编写封装类、实际使用以及测试优化。 1. 理解Flutter EventBus的基本概念和工作原理 EventBus是一个事件总线,它允许不同组件之间进行松耦合的通信。通过使用EventBus...
和尚在 Android 开发过程中经常会用到 EventBus 事件分发机制,EventBus 遵从publish/subscribe 模式,即发布/订阅模式;简化了模块之间通信,对于项目的解耦很实用;而 Flutter 也提供了相应的 event_bus 插件,今天和尚学习尝试一下; EventBus 源码分析 代码语言:javascript 代码运行次数:0 运行 AI代码解释 class EventBus...
EventBus 在 Android 就是特别常用的,用来隔着页面发送消息,处理一些事情;在 Flutter 中我自然也是想到了它。 在这里我对它的封装方式很类似与我在 Android 中封装方式:封装到 BaseActivity 中,想用就直接使用了。 添加依赖: event_bus: ^2.0.0 1. 简单对 EventBus 封装一下,event_bus.dart 中代码: import ...
eventBus.on<LoginEvent>().listen((event) { debugPrint("User logged in:${event.username}"); }); 全部代码如下: import'package:flutter/material.dart';import'package:event_bus/event_bus.dart';// 全局 EventBus 对象EventBus eventBus = EventBus();// 定义事件类// 定义登录事件classLoginEvent{...
多重组件的事件传递使用的是EventBus,很方便。 官方建议我们定义不同的Event ,从而区别不同的event 使用的是插件event_bus ,简单 的三步走操作 1 创建全局的event_bus, import"package:event_bus/event_bus.dart";// 定义一个全局的eventBusfinaleventBus = EventBus();classMyEventMessage{ ...
eventBus.fire(UserLoggedInEvent(user)); 移除eventBus @override void dispose() { loginSubscription.cancel(); super.dispose(); } 主要注意的是 添加过订阅后 一定要将订阅steam移除,否则,页面计算被移除,仍然可以接收到订阅消息,造成内存泄漏 基于官方给的使用方法,对eventbus做了一层封装,方便在项目中使用...
小菜尝试了EventBus和Provider两种方式进行主题色切换,对于不同的场景可以自由选择;给小菜最直接的感觉是EventBus主要是事件分发,只发送/接收数据,更偏向于数据层,而Provider实际是对InheritedWidget的优化和封装,可以在发送/接收数据同时更新UI层; 小扩展 小菜在测试过程中设置ListView对话框时出现如下错误: ...
1. EventBus 初始化 小菜首先创建一个全局的EventBus,通常每个应用只有一个事件总线,但如果需要多个事件总线的话可以在初始化时设置sync = false; EventBus eventBus = EventBus(); 1. 2. EventBus 定义事件 小菜创建两个自定义事件,分别为语言切换和主题色切换;使用方法和Android一致; ...
return streamController.stream.where((event) => event is T).cast<T>(); } } void fire(event) { streamController.add(event); } void destroy() { _streamController.close(); } } 简单分析源码可得,EventBus核心主要是通过Stream来进行事件分发的,其中初始化时会创建一个StreamController.broadcast(sync...
streamController.add(event); }voiddestroy(){ _streamController.close(); } } 简单分析源码可得,EventBus核心主要是通过Stream来进行事件分发的,其中初始化时会创建一个StreamController.broadcast(sync: sync)广播流;fire()广播发送方法主要是向StreamController中添加事件,on()为广播监听,都是对Stream流操作; ...