<li id="fw3su"></li>
  • <li id="fw3su"></li>
  • <div id="fw3su"><tr id="fw3su"></tr></div>
    <dl id="fw3su"></dl>
  • <div id="fw3su"><tr id="fw3su"></tr></div>
  • <sup id="fw3su"></sup>
    <progress id="fw3su"></progress><div id="fw3su"><tr id="fw3su"></tr></div><input id="fw3su"><ins id="fw3su"></ins></input>

    Flutter多个页面广播通知传值

    Flutter查阅了很多资料,暂时没有发现类似Android/iOS的页面广播通知传值,如有欢迎评论告知~

    为何需要广播通知传值?

    假如有一个需求是这样的,导航有三个页面,第一页有一个按钮跳到第二页,第二页有一个按钮跳到第三页,第三页有个按钮来改变第一页的背景色。这时候就可以通过通知传值的方式。在第一页添加一个通知监听者,第三页发送通知告知第一页。

    效果如下gif:

    思路

    ?#19994;?#24605;路是创建一个单例类,在你需要监听的页面创建这个监听者。在需要发送通知的页面也继续创建这个单例类,通过回调的方式传递值。

    代码

    创建一个单例类

    typedef GetObject = Function(dynamic object);
    
    class NotificationCenter {
      // 工厂模式
      factory NotificationCenter() => _getInstance();
    
      static NotificationCenter get instance => _getInstance();
      static NotificationCenter _instance;
    
      NotificationCenter._internal() {
        // 初始化
      }
    
      static NotificationCenter _getInstance() {
        if (_instance == null) {
          _instance = new NotificationCenter._internal();
        }
        return _instance;
      }
    
      //创建Map来记录名称
      Map<String, dynamic> postNameMap = Map<String, dynamic>();
    
      GetObject getObject;
    
      //添加监听者方法
      addObserver(String postName, object(dynamic object)) {
    
        postNameMap[postName] = null;
        getObject = object;
      }
    
      //发送通知传值
      postNotification(String postName, dynamic object) {
        //检索Map是否含有postName
        if (postNameMap.containsKey(postName)) {
    
          postNameMap[postName] = object;
          getObject(postNameMap[postName]);
        }
    
      }
    }
    复制代码

    在首页添加一个监听

    //添加监听者
    NotificationCenter.instance.addObserver('changColor', (object){
    
      setState(() {
    
        backColor = object;
      });
    });
    复制代码
    我来评几句
    登录后评论

    已发表评论数()

    相关站点

    +订阅
    热门文章
    11选五