Skip to content

Latest commit

 

History

History
86 lines (61 loc) · 1.92 KB

README.md

File metadata and controls

86 lines (61 loc) · 1.92 KB

action_broadcast

pub package

一个简单的全局广播系统,类似于Android的本地广播

Usage

Listen

  • 传统使用方式

 const actionUserLogin = 'actionUserLogin';
 const actionUserInfoChange = 'actionUserInfoChange';
 const actionLogout = 'actionLogout';
 
 // in State

 StreamSubscription receiver;

 @override
 void initState() {
    super.initState();

    receiver = registerReceiver([actionUserLogin, actionUserInfoChange, actionLogout]).listen((intent){
            switch(intent.action){
                case actionUserLogin: 
                  accountId = intent.data;
                  break;
                case actionUserInfoChang: 
                  nickname = intent['nickname'];
                  break;
                case actionLogout: 
                  Navigator.pop(context);
                  break;
            }
    });
 }

 @override
 void dispose(){
   receiver.cancel();
   super.dispose();
 }

  • State中混入自动化管理StreamSubscriptionAutoCancelStreamMixin以简化工作

class _ExampleState extends State<Example> with AutoCancelStreamMixin{

  @override
  Iterable<StreamSubscription> get registerSubscriptions sync* {
    yield registerReceiver([actionUserLogin]).listen((intent) {
        setState(() {
          // do something
        });
      },
    );
    
    yield registerSingleReceiver(actionLogout).listen((intent) {
        setState(() {
          // do something
        });
      },
    );
  }

}

Notify

sendBroadcast(actionUserLogin, data : 'accountId');

sendBroadcast(actionUserInfoChang, extras: {'nickname' : 'asdasd'});

sendBroadcast(actionLogout);