小视频源码,Flutter 事件传递实现的相关代码
typedef void EventCallback(arg);class EventBus{EventBus._internal();static EventBus _singleton = new EventBus._internal();factory EventBus() => _singleton;var _eMap = new Map>();/// 添加订阅者void register(eventName, EventCallback f) {if (eventName == null || f == null) {return;}_eMap[eventName] ??= new List();_eMap[eventName].add(f);}/// 移除订阅者void unRegister(eventName, [EventCallback f]) {var list = _eMap[eventName];if (eventName == null || list == null) return;if (f == null) {_eMap[eventName] = null;} else {list.remove(f);}}/// 触发事件,事件触发后该事件所有订阅者会被调用void post(eventName, [arg]) {var list = _eMap[eventName];if (list == null) return;int len = list.length - 1;//反向遍历,防止订阅者在回调中移除自身带来的下标错位for (var i = len; i > -1; --i) {list[i](arg);}}
}
使用:
主页:
class EventBusMainPage extends StatefulWidget{@overrideState createState() {return _EventBusPageState();}
}class _EventBusPageState extends State{String textRes = "";@overridevoid initState() {}@overridevoid deactivate() {super.deactivate();EventBus().register("testEvent", (arg){setState(() {textRes = "${arg}";});});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("EventBus事件接收页"),),body: Column(children: [Text("参数:${textRes}"),RaisedButton(onPressed: (){Navigator.pushNamed(context, "/EventBusNotifyPage");},child: Text("去传递页"),)],));}@overridevoid dispose() {super.dispose();EventBus().unRegister("testEvent");}
}
传递页:
class EventBusNotifyPage extends StatelessWidget{@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("通知"),),body: RaisedButton(onPressed: (){EventBus().post("testEvent", "我是参数");},child: Text("发送消息"),),);}
}
以上就是小视频源码,Flutter 事件传递实现的相关代码, 更多内容欢迎关注之后的文章