EventBus可以实现组件之间的消息通知,这里是讲述其简单应用(点击+- 按钮操作数据)。
1.添加依赖
2.添加数据总线(因为我看过几篇文章说过数据总线声明一个即可,所以我直接证明在main里面了)
3.声明数据总线分类
4.监听事件
5.声明要提交消息的控件
import 'package:flutter/material.dart';
import 'package:flutterdemo0507/eventBusType.dart';
import 'package:flutterdemo0507/main.dart';
class W1 extends StatefulWidget {
@override
_W1State createState() => _W1State();
}
class _W1State extends State<W1> with SingleTickerProviderStateMixin {
AnimationController _controller;
@override
void initState() {
_controller = AnimationController(vsync: this);
super.initState();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
RaisedButton(child: Text('+'),onPressed: (){
eventBus.fire(EventBus1('+'));
}),
RaisedButton(child: Text('-'),onPressed: (){
eventBus.fire(EventBus1('-'));
})
],
);
}
}
6.主页面显示
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _count1 = 0;
int _count2 = 0;
@override
void initState() {
super.initState();
eventBus.on<EventBus1>().listen((event) {
switch(event.data){
case '+':
_count1++;
break;
case '-':
_count1--;
break;
}
setState(() {
});
});
eventBus.on<EventBus2>().listen((event) {
switch(event.data){
case '+':
_count2++;
break;
case '-':
_count2--;
break;
}
setState(() {
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('demo'),
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[Text('$_count1'), W1(), Text('$_count2'), W2()],
),
);
}
}