首页 > 其他分享 >一统天下 flutter - widget 状态管理: 状态管理 - 在树上,父监听子的通知

一统天下 flutter - widget 状态管理: 状态管理 - 在树上,父监听子的通知

时间:2023-04-14 09:00:35浏览次数:45  
标签:MyNotification 状态 widget 通知 flutter 一统天下 notification 监听

一统天下 flutter https://github.com/webabcd/flutter_demo
作者 webabcd

一统天下 flutter - widget 状态管理: 状态管理 - 在树上,父监听子的通知

示例如下:

lib\state\notification_listener.dart

/*
 * 状态管理 - 在树上,父监听子的通知
 *
 * 在树上,子通过 Notification 触发通知,父通过 NotificationListener 监听通知
 */

import 'package:flutter/material.dart';

import '../helper.dart';

class NotificationListenerDemo extends StatefulWidget {
  const NotificationListenerDemo({Key? key}) : super(key: key);

  @override
  _NotificationListenerDemoState createState() => _NotificationListenerDemoState();
}

class _NotificationListenerDemoState extends State<NotificationListenerDemo> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      /// 监听子触发的通知
      body: NotificationListener<_MyNotification>(
        onNotification: (notification) {
          log('aaa ${notification.id}, ${notification.message}');
          /// 是否已处理
          /// true - 不冒泡
          /// false - 冒泡
          return true;
        },
        /// 监听子触发的通知
        child: NotificationListener<_MyNotification>(
          onNotification: (notification) {
            log('bbb ${notification.id}, ${notification.message}');
            /// 是否已处理
            /// true - 不冒泡
            /// false - 冒泡
            return false;
          },
          child: Builder(builder: (context) {
            return Center(
              child: MyButton(
                onPressed: () {
                  /// 触发通知
                  _MyNotification(999, 'abc').dispatch(context);
                },
                child: const MyText('触发 _MyNotification 通知'),
              ),
            );
          }),
        ),
      ),
    );
  }
}

/// 自定义 Notification
class _MyNotification extends Notification {
  _MyNotification(this.id, this.message);

  final int id;
  final String message;
}

一统天下 flutter https://github.com/webabcd/flutter_demo
作者 webabcd

标签:MyNotification,状态,widget,通知,flutter,一统天下,notification,监听
From: https://www.cnblogs.com/webabcd/p/flutter_lib_state_notification_listener.html

相关文章

  • 一统天下 flutter - widget 列表类: GridView - 网格
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget列表类:GridView-网格示例如下:lib\widget\list\grid_view.dart/**GridView-网格*/import'dart:math';import'package:flutter/material.dart';im......
  • Enemy状态机设计思路
    前言:为了更清晰的认识状态机并且理清Enemy设计思路,所以整理了一下Enemy的代码设计逻辑做了一张简单的思维图先进行一个简单的认识干货:FMS有限状态机状态机类似于动画器(animator),动画器可以简单清晰地管理游戏角色的动画:待机、跳跃、下落、跑步……,状态机的目的也是如......
  • 【防止恶意用户注册】-- 手机在网状态 API 的防欺诈应用解析
     简介手机在网状态API支持传入手机号码,查询手机号在网状态,返回在网、在网不可用、不在网(销号/未启用/停机)等多种状态,查询手机号在网状态之后,可以根据具体的业务需求来进行不同的处理。 本文主要介绍手机在网状态API的工作原理、以及手机号码注册验证、金融服务、数据......
  • 直播系统搭建,判断屏幕横竖屏状态
    直播系统搭建,判断屏幕横竖屏状态一点击返回键,竖屏销毁activity,横屏切换为竖屏 @Override  publicvoidonBackPressed(){    if(getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT){//判断是否为竖屏      f......
  • Qt之QTableWidget的使用
    #ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QtWidgets>#include<QDebug>#include<QJsonArray>#include<QJsonObject>#include<QJsonValue>#include<QJsonDocument>#defineTABLE_HEADER_STYLE"QHeaderVie......
  • Flutter/React native/un-app
    Flutter是Google开源的构建用户界面(UI)工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台。[5] Flutter开源、免费,拥有宽松的开源协议,适合商业项目。Flutter可以方便的加入现有的工程中。在全世界,Flutter正在被越来越多的开发者和组织使......
  • windows系统设置状态栏时间显示读秒
    windows系统设置状态栏时间显示读秒要实现的效果如下图:一、打开注册表WIN+R输入【cmd】之后输入【regedit】回车二、修改注册表在注册表地址栏输入:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced在该目录【Advanced】下,右侧列表中寻......
  • 深度神经网络的电力系统实时状态估计与预测源代码代码按照高水平文章复现
    深度神经网络的电力系统实时状态估计与预测源代码代码按照高水平文章复现,保证正确利用深度神经网络(DNNs)进行电力系统实时监测。在IEEE118系统的实际负载数据实验中,新的基于dnn的PSSE方案的性能几乎优于竞争对手的数量级,包括广泛采用的Gauss-NewtonPSSE求解器。基于数据驱动......
  • 组件公共状态管理react-redux
    知乎日报项目中,公共状态使用了redux和react-redux,记录学习的知识redux工程化其实就是按模块划分,在开发中能更好的理解和维护,因此该项目将状态管理划分为如下的模块:store用作存放状态管理的文件夹action是store中数据的来源,actions文件夹用来管理派发行为对象的,index......
  • Flutter和小程序容器技术,全新的小程序解决方案
    Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。它也是构建未来的GoogleFuchsia应用的主要方式。什么是Flutter?Flutter是一种......