插件地址:event_bus
用法
- 定义事件类型,通常来说是定义类,可以在类中定义属性来传参
class LoginSuccessEvent {}
class WarningEvent {
String msg;
WarningEvent(this.msg);
}
- 在需要监听事件的页面
initState
阶段添加监听
void initState() {
// TODO: implement initState
super.initState();
bus.on<WarningEvent>().listen((event) {
showCenterToast(event.msg);
});
bus.on<LoginSuccessEvent>().listen((event) {
Navigator.popAndPushNamed(context, '');
});
}
- 在需要触发事件的代码中fire事件
if (username.isEmpty) {
bus.fire(WarningEvent('用户名不能为空!'));
} else if (password.isEmpty) {
bus.fire(WarningEvent('密码不能为空!'));
} else {
Response res = await LoginModel(username, password);
if (res.data != null) {
if (!res.data['success']) {
bus.fire(WarningEvent(res.data['msg']));
} else {
bus.fire(LoginSuccessEvent());
}
}
}
- 记得退出页面时把事件监听关掉
@override
void dispose() {
// TODO: implement dispose
super.dispose();
this._username.dispose();
this._password.dispose();
bus.destroy();
}