Flutter event_busの基本的な使い方(足で読んでも書くことができます)
原文:@ As.Kai
ブログアドレス:https://blog.csdn.net/qq_42362997
以下の内容が参考になりましたら、よろしくお願いします〜
まず、最も基本的な必要条件は依存関係をインポートします。
event_bus:^ 1.1.1
最新のpubバージョンクリックして確認
この記事では、サブスクライバーがログインしてすべてのパブリッシャーに通知するかどうかを確認します。
実装シナリオ:ユーザーのログインステータスを監視する
メイントピックにステップインします。
使用する前に:
event_busは、
パブリッシャー/サブスクライバーに分割されたイベントバスを介して通信できます。パブリッシャーはイベントをトリガーでき、サブスクライバーはイベントをリッスン
できます。これにより、オブジェクトを追跡するリスナーを明示的に定義しなくても、オブジェクトが相互に通信および対話できます。
全体として
、非同期処理を必要としないSharedPreferences、およびmain関数に登録する必要がないプロバイダーとして理解できます。
これは個人的な理解です。理解は人によって異なります。誤解を招くエラーがある場合は、送信できます。私にメッセージ。
次に、最も基本的なevent_busの使用方法について説明しましょう。
プロジェクトのデモに入ります。
最初に、現在のプロジェクトのevent_busツールクラスを作成する必要があります
。event_bus_util.dart:
import 'package:event_bus/event_bus.dart';
EventBus eventBus = new EventBus();
//用户是否注册
class UserIsLogin{
final bool isLogin;
UserLoggedInEvent({this.isLogin});
}
最初のページに、現在のログインステータスを表示するテキストを配置し、
次に新しいページにジャンプするボタンを配置します
。two.dartの初期化メソッドで、event_busに書き込んだユーザーがログに記録されるかどうかをサブスクライブしましょう。に
String test = '当前登录状态:';
@override
void initState() {
// TODO: implement initState
super.initState();
eventBus.on<UserLoggedInEvent>().listen((event) {
if(event.isLogin){
print('true');
test = '用户已登录';
}else{
print('false');
test = '用户未登录';
}
setState((){});
});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('aaa'),
),
//event_bus Demo
body: new Column(
children: [
new Text(test),
new GestureDetector(
onTap: () {
Navigator.push(context, new MaterialPageRoute(builder: (context){
return Two();
}));
},
child: new Text('第二个页面'),
)
],
),
);
two.dart:
2ページ目では、主にパブリッシャーのトリガーイベントを
実行します.2つのボタンを配置します。1つはユーザーがログインするためのもので、もう1つはユーザーがログインしないためのものです。
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('two'),
),
body: new Column(
children: [
new GestureDetector(
onTap: (){
print('onTap()');
eventBus.fire(UserLoggedInEvent(isLogin: false));
},
child: new Text('用户未登录'),
),
new GestureDetector(
onTap: (){
print('onTap()');
eventBus.fire(UserLoggedInEvent(isLogin: true));
},
child: new Text('用户登录'),
),
],
)
);
}
eventBus.fire(UserLoggedInEvent(isLogin:false));
eventBus.fire(UserLoggedInEvent(isLogin:true));
パブリッシャーをクリックしてイベントをトリガーします
フラッターランを実行して効果を確認してください!
最後に、親指を立ててください。
私に従って、一緒に成長してください!
@ As.Kai