当前位置: 首页 > news >正文

Flutter笔记--通知

       这一节回顾一下Flutter中的Notification,Notification(通知)是Flutter中一个重要的机制,在widget树中,每一个节点都可以分发通知,通知会沿着当前节点向上传递,所有父节点都可以通过NotificationListener来监听通知,通过它可以实现跨组件的事件传递,使应用变得更加灵活。

主要步骤包括:

1 创建NotificationListener:在需要监听通知的Widget的build方法中,创建NotificationListener实例。
2 设置onNotification回调函数:NotificationListener需要一个onNotification回调函数,用于处理接收到的通知。在回调函数中,可以编写逻辑来处理不同类型的通知。
3 指定子Widget:将需要被监听通知的Widget作为NotificationListener的子Widget。

栗子:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';class NotificationTest extends StatefulWidget {@overrideState<StatefulWidget> createState() {return _NotificationTest();}
}class _NotificationTest extends State<NotificationTest> {int _progress = 0;@overrideWidget build(BuildContext context) {return Scaffold(body: NotificationListener<ScrollNotification>(onNotification: (ScrollNotification notification) {if(notification is ScrollStartNotification) {print('开始滚动...');} else if(notification is ScrollUpdateNotification) {final currentPixel = notification.metrics.pixels;final totalPixel = notification.metrics.maxScrollExtent;double progress = currentPixel / totalPixel;setState(() {_progress = (progress * 100).toInt();print('滚动..._progress:$_progress');});print('正在滚动: ${currentPixel} - ${totalPixel}');} else if(notification is ScrollEndNotification) {print('结束滚动...');}//  返回false表示不阻止事件继续向上冒泡  return false;},child: Stack(alignment: Alignment.bottomRight,children: [ListView.builder(itemCount: 100,itemExtent: 60,itemBuilder: (BuildContext context,int index) {return ListTile(title: Text("Item $index"),);})],)),);}}

通知冒泡:

1 通知的发起:在Flutter的Widget树中,任何节点都可以分发通知。这通常通过调用Notification.dispatch(context)方法实现,其中context是当前节点的上下文信息。
dispatch方法会调用context.visitAncestorElements(visitAncestor),这个方法会向上遍历父元素,并对每个父元素执行visitAncestor回调。

2 通知的传递:通知从子节点开始,沿着Widget树向上传递,在传递过程中,每个父节点都有机会通过NotificationListener组件来监听这些通知。

3. 通知的中止:通知冒泡可以中止。如果在NotificationListener的onNotification回调中返回true,则表示当前节点已经处理了通知,并决定不再向上传递。如果返回false,则通知会继续向上传递,直到遇到下一个NotificationListener或到达Widget树的顶部。

http://www.lryc.cn/news/454482.html

相关文章:

  • Aegisub字幕自动化及函数篇(图文教程附有gif动图展示)(二)
  • 系统分析师16:系统测试与维护
  • 详解Java中的堆内存
  • C++类和对象下详细指南
  • 【瑞昱RTL8763E】音频
  • videojs 播放监控
  • 电源管理芯片PMIC
  • C++ 线性表、内存操作、 迭代器,数据与算法分离。
  • PHP如何解析配置文件
  • 【Java】六大设计原则和23种设计模式
  • Java IO流全面教程
  • PCIe6.0 AIC金手指和板端CEM连接器信号完整性设计规范
  • 二、创建drf纯净项目
  • 算法1:双指针思想的运用(2)--C++
  • L1415 【哈工大_操作系统】CPU调度策略一个实际的schedule函数
  • 免费版U盘数据恢复软件大揭秘,拯救你的重要数据
  • Pikachu-Unsafe FileUpload-客户端check
  • 【数据结构】什么是红黑树(Red Black Tree)?
  • Xcode16适配
  • Vue - 路由用法
  • SpringBoot框架下校园资料库的构建与优化
  • vscode 连接云服务器(ubantu 20.04)
  • 【SpringBoot详细教程】-09-Redis详细教程以及SpringBoot整合Redis【持续更新】
  • 排序算法之——归并排序,计数排序
  • Linux中环境变量
  • 163页PPT罗兰贝格品牌战略升级:华为案例启示与电器集团转型之路
  • 系统设计,如何设计一个秒杀功能
  • Linux:进程入门(进程与程序的区别,进程的标识符,fork函数创建多进程)
  • 索尼MDR-M1:超宽频的音频盛宴,打造沉浸式音乐体验
  • 【Linux】线程的概念