Flutter总线通信插件flutter_easybus的使用
Flutter总线通信插件flutter_easybus的使用
flutter_easybus
flutter_easybus
是一个用于 Flutter 的订阅通信总线插件。
Getting Started
该项目是一个 Dart 包的起点,作为库模块,可以轻松地在多个 Flutter 或 Dart 项目中共享代码。
有关如何开始使用 Flutter 的更多信息,请参阅我们的在线文档,其中包含教程、示例、移动开发指南以及完整的 API 参考。
基础使用
定义任意订阅对象
class BusTest{
late Map bus;
BusTest({required this.bus});
}
注册订阅
第一种(推荐)
EventSubscription subscription = EasyBus().on<BusTest>().listen((arg) {
print("normal listen ${arg.bus}" );
});
// subscription.free(); /// 在合适的位置释放,防止内存泄露
第二种
/// 注意使用 wait 方法订阅,在第一次回调后会自动销毁
var busTest = await EasyBus().on<BusTest>().wait();
print("wait listen ${busTest.bus}");
发送信息
EasyBus().send(BusTest(bus: {'name': 'easyBus'}));
注销所有当前对象订阅
EasyBus().free<BusTest>();
更简单的使用方法
EasyBus().simpleOn().listen((arg) { /// 直接使用内置对象
print("simple listen ${arg.key}" );
});
/// 发送信息
EasyBus().simpleSend("key123", {'name': 'lisa'});
完整示例 Demo
以下是一个完整的示例,展示如何使用 flutter_easybus
插件进行消息传递。
1. 创建订阅者
import 'package:flutter/material.dart';
import 'package:flutter_easybus/flutter_easybus.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: SubscriberPage(),
);
}
}
class SubscriberPage extends StatefulWidget {
[@override](/user/override)
_SubscriberPageState createState() => _SubscriberPageState();
}
class _SubscriberPageState extends State<SubscriberPage> {
String _message = "Waiting for message...";
[@override](/user/override)
void initState() {
super.initState();
// 使用推荐方式订阅消息
EventSubscription subscription = EasyBus().on<Map<String, dynamic>>().listen((arg) {
setState(() {
_message = arg.toString();
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Subscriber"),
),
body: Center(
child: Text(_message),
),
);
}
}
2. 创建发布者
class PublisherPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Publisher"),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 发送消息
EasyBus().send({"key": "value"});
},
child: Text("Send Message"),
),
),
);
}
}
3. 主页面路由
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return DefaultTabController(
length: 2,
child: Scaffold(
appBar: TabBar(
tabs: [
Tab(text: "Subscriber"),
Tab(text: "Publisher"),
],
),
body: TabBarView(
children: [
SubscriberPage(),
PublisherPage(),
],
),
),
);
}
}
更多关于Flutter总线通信插件flutter_easybus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_easybus
是一个用于在 Flutter 应用中实现事件总线通信的插件。它允许你在不同的组件、页面或模块之间进行松耦合的通信,而不需要直接引用或依赖彼此。以下是如何使用 flutter_easybus
的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_easybus
依赖:
dependencies:
flutter:
sdk: flutter
flutter_easybus: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入包
在你的 Dart 文件中导入 flutter_easybus
:
import 'package:flutter_easybus/flutter_easybus.dart';
3. 发送事件
你可以使用 EasyBus
来发送事件。事件可以是任何类型的对象。
EasyBus.instance.post("my_event", data: "Hello, EasyBus!");
4. 订阅事件
你可以订阅特定类型的事件,并在事件发生时执行回调函数。
EasyBus.instance.on<String>("my_event").listen((data) {
print("Received event: $data");
});
5. 取消订阅
为了避免内存泄漏,你需要在不再需要监听事件时取消订阅。通常,你可以在 dispose
方法中取消订阅。
var subscription = EasyBus.instance.on<String>("my_event").listen((data) {
print("Received event: $data");
});
[@override](/user/override)
void dispose() {
subscription.cancel();
super.dispose();
}
6. 使用示例
以下是一个完整的示例,展示了如何在两个不同的页面之间使用 flutter_easybus
进行通信。
import 'package:flutter/material.dart';
import 'package:flutter_easybus/flutter_easybus.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: FirstPage(),
);
}
}
class FirstPage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("First Page")),
body: Center(
child: ElevatedButton(
onPressed: () {
EasyBus.instance.post("my_event", data: "Hello from First Page!");
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondPage()),
);
},
child: Text("Go to Second Page"),
),
),
);
}
}
class SecondPage extends StatefulWidget {
[@override](/user/override)
_SecondPageState createState() => _SecondPageState();
}
class _SecondPageState extends State<SecondPage> {
String _message = "";
[@override](/user/override)
void initState() {
super.initState();
EasyBus.instance.on<String>("my_event").listen((data) {
setState(() {
_message = data;
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Second Page")),
body: Center(
child: Text(_message),
),
);
}
}