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

ValueListenableBuilder 和 addListener 在 ChangeNotifier的区别

1、前言

ValueListenableBuilder 和 addListener 在 ChangeNotifier 中有不同的用途和用法,适用于不同的场景。它们的主要区别在于它们如何监听和响应状态变化,以及它们的用法和特性。

2、ValueListenableBuilder用法

ValueListenableBuilder 是一个 Flutter Widget,用于监听 ValueNotifier 或其他 ValueListenable 类型的对象的变化,并自动重建其子 Widget。它非常适合用于简化 UI 更新逻辑,尤其是当你只关心特定值的变化时。

3、ValueListenableBuilder特点

简洁:ValueListenableBuilder 简化了在 UI 中使用 ValueNotifier 的过程。它将监听和 UI 重建逻辑封装在一起,使代码更简洁。
自动重建:每当 ValueNotifier 的值发生变化时,ValueListenableBuilder 会自动调用 builder 函数重新构建 Widget,从而反映最新的值。
局部更新:适用于仅依赖于单一值的场景,可以使 UI 更高效地更新。
示例

ValueNotifier<int> _valueNotifier = ValueNotifier<int>(0);@override
Widget build(BuildContext context) {return Scaffold(body: Center(child: ValueListenableBuilder<int>(valueListenable: _valueNotifier,builder: (context, value, child) {return Text('Current value: $value');},),),floatingActionButton: FloatingActionButton(onPressed: () {_valueNotifier.value++;},child: Icon(Icons.add),),);
}

4、addListener 和 ChangeNotifier用法

addListener 是 ChangeNotifier 类中的一个方法,用于添加监听器,以便在 ChangeNotifier 的状态发生变化时通知监听者。监听器通常是一个回调函数,它在调用 notifyListeners() 时执行。

5、addListener特点

灵活性:addListener 提供了更大的灵活性,适用于更复杂的状态管理需求。你可以手动添加监听器并在任何地方调用 notifyListeners() 来触发状态更新。
自定义:适合用于自定义状态管理类,可以实现更复杂的逻辑和更新机制。
更高的控制权:使用 addListener 可以更精细地控制哪些 Widget 或部分 UI 需要更新。
示例

class MyModel extends ChangeNotifier {int _count = 0;int get count => _count;void increment() {_count++;notifyListeners();}
}// 使用
class MyWidget extends StatefulWidget {@override_MyWidgetState createState() => _MyWidgetState();
}class _MyWidgetState extends State<MyWidget> {final MyModel _model = MyModel();@overridevoid initState() {super.initState();_model.addListener(_onModelChanged);}void _onModelChanged() {setState(() {});}@overridevoid dispose() {_model.removeListener(_onModelChanged);super.dispose();}@overrideWidget build(BuildContext context) {return Scaffold(body: Center(child: Text('Count: ${_model.count}'),),floatingActionButton: FloatingActionButton(onPressed: () {_model.increment();},child: Icon(Icons.add),),);}
}

6、总结

ValueListenableBuilder 是一个用于监听 ValueNotifier 并自动重建 Widget 的便捷工具,适用于简单的 UI 更新。
addListener 和 ChangeNotifier 提供了更高的灵活性和控制力,适合用于更复杂的状态管理和自定义逻辑。
选择哪种方法取决于你的具体需求和应用场景。如果你只是需要监听单一值并自动更新 UI,ValueListenableBuilder 更简单方便。而如果你需要更复杂的状态管理或自定义逻辑,ChangeNotifier 和 addListener 提供了更多的控制选项。

相关文章:

ValueListenableBuilder 和 addListener 在 ChangeNotifier的区别

1、前言 ValueListenableBuilder 和 addListener 在 ChangeNotifier 中有不同的用途和用法&#xff0c;适用于不同的场景。它们的主要区别在于它们如何监听和响应状态变化&#xff0c;以及它们的用法和特性。 2、ValueListenableBuilder用法 ValueListenableBuilder 是一个 …...

ScriptEcho:AI赋能的前端代码生成神器

ScriptEcho&#xff1a;AI赋能的前端代码生成神器 在前端开发中&#xff0c;如果你总是觉得写代码太费时费力&#xff0c;那么 ScriptEcho 将成为你的救星。这个 AI 代码生成平台不仅能帮你省下大量时间&#xff0c;还能让你轻松愉快地写出生产级代码。本文将带你了解 ScriptEc…...

TypeError: ‘float’ object is not iterable 深度解析

TypeError: ‘float’ object is not iterable 深度解析与实战指南 在Python编程中&#xff0c;TypeError: float object is not iterable是一个常见的错误&#xff0c;通常发生在尝试对浮点数&#xff08;float&#xff09;进行迭代操作时。这个错误表明代码中存在类型使用不…...

灵茶八题 - 子序列 +w+

灵茶八题 - 子序列 w 题目描述 给你一个长为 n n n 的数组 a a a&#xff0c;输出它的所有非空子序列的元素和的元素和。 例如 a [ 1 , 2 , 3 ] a[1,2,3] a[1,2,3] 有七个非空子序列 [ 1 ] , [ 2 ] , [ 3 ] , [ 1 , 2 ] , [ 1 , 3 ] , [ 2 , 3 ] , [ 1 , 2 , 3 ] [1],[…...

为什么美元债务会越来越多?

美元债务规模持续膨胀&#xff0c;其背后原因复杂多样&#xff0c;可归结为以下几个主要因素&#xff1a; 财政赤字和刺激政策是导致美元债务增加的重要原因。美国政府长期面临财政赤字问题&#xff0c;支出远超收入&#xff0c;为弥补这一缺口&#xff0c;政府不得不大量发行…...

二维凸包算法 Julia实现

问题描述&#xff1a;给定平面上 n n n 个点的集合 Q Q Q&#xff0c;求其子集 P P P 构成 Q Q Q 的凸包&#xff0c;即 ∀ p ∈ Q , ∃ p 0 , p 1 , p 2 ∈ P \forall p \in Q, \exist p_0, p_1, p_2 \in P ∀p∈Q,∃p0​,p1​,p2​∈P 使得点 p p p 在以点 p 0 , p 1 …...

python dash框架

Dash 是一个用于创建数据分析型 web 应用的 Python 框架。它由 Plotly 团队开发&#xff0c;并且可以用来构建交互式的 web 应用程序&#xff0c;这些应用能够包含图表、表格、地图等多种数据可视化组件。 Dash 的特点&#xff1a; 易于使用&#xff1a;Dash 使用 Python 语法…...

2.外部中断(EXTI)

理论 NVIC&#xff1a;嵌套向量中断控制器&#xff08;解释教程&#xff09; 外部通用中断线(EXTI0~EXTI15)&#xff1a;每个GPIO设置成中断模式&#xff0c;与中断控制器连接的线 外部中断触发方式 上升沿触发、下降沿触发、双边沿触发 外部中断触发函数 在stm32f1xx_it.c文件…...

Python | SyntaxError: invalid syntax 深度解析

Python | SyntaxError: invalid syntax 深度解析 在Python编程中&#xff0c;SyntaxError: invalid syntax是一个常见的错误&#xff0c;它表明Python解释器在尝试解析代码时遇到了语法问题。这个错误通常是由于代码中存在拼写错误、缺少符号&#xff08;如括号、冒号或逗号&a…...

付费进群系统源码原版最新修复全开源版

付费进群&#xff0c;和平时所见到的别人拉你进群是不一样的&#xff0c;付费进群需要先缴费以后&#xff0c;才会看到群的二维码&#xff0c;扫码进群或者是长按二维码图片识别进群&#xff0c;付费进群这个功能广泛应用于拼多多的砍价群&#xff0c;活动的助力群&#xff0c;…...

Docker容器部署的SpringBoot项目jar包,上传文件但是找不到路径的问题

在docker容器内部署的jar包运行后&#xff0c;请求访问都没有问题&#xff0c;在文件上传时&#xff0c;发现上传图片接口响应成功&#xff0c;但是图片路径报404错误&#xff0c;发现找不到路径。 在服务器上查看也没有找到相关图片。 原因&#xff1a; 启动docker镜像时没…...

云计算学习——5G网络技术

系列文章目录 提示&#xff1a;仅用于个人学习&#xff0c;进行查漏补缺使用。 Day1 网络参考模型 Day2 网络综合布线与应用 Day3 IP地址 Day4 华为eNSP网络设备模拟器的基础安装及简单使用 Day5 交换机的基本原理与配置 Day6 路由器的原理与配置 Day7 网络层协议介绍一 Day8 传…...

matlab仿真 信道编码和交织(上)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第八章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; ​​​ ​ ​ ​ clear all N10;%信息比特的行数 n7;%hamming码组长度n2^m-1 m3;%监督位长度 [H,G]hammgen(m);%产生(n,n-…...

基于YOLOv8的高压输电线路异物检测系统

基于YOLOv8的高压输电线路异物检测系统 (价格88) 包含 【“鸟窝”&#xff0c;“风筝”&#xff0c;“气球”&#xff0c;“垃圾”】 4个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以根据数…...

23款奔驰GLS450加装原厂电吸门配置,提升车辆舒适性和便利性

今天是一台22款奔驰GLS450&#xff0c;车主是佛山的 以前被不良商家坑了 装了副厂的电吸门 刚开始就很正常 用了半年之后 就开始开不了门&#xff0c;被锁在里面&#xff0c;刚开始车主以为是零件坏了 后来越来越频繁&#xff0c;本来是为了家里老人小孩关门方便而升级的&#…...

git操作流程笔记

1、在本地项目文件夹右击鼠标点击Git Bash Here 2、输入git init&#xff0c;这个目录变成git可以管理的仓库&#xff0c;会出现一个.git文件夹&#xff0c;如果没出现的话需要选择“显示隐藏文件”&#xff08;不会的同学自行百度一下&#xff09; 3、绑定本地仓库与远程仓库…...

【QT】常用控件-上

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 目录 &#x1f449;&#x1f3fb;QWidgetenabledgeometryrect制作上下左右按钮 window frame 的影响window titlewindowIcon代码示例: 通过 qrc 管理图片作为图标 windowOpacitycursor使用qrc自…...

帮助网站提升用户参与度的5个WordPress插件

仅靠编写精彩的内容、设计精美的图像和创建简化的客户旅程不足以提高网站参与度。您需要让用户在首次访问后继续与您的网站互动并成为回访者&#xff0c;才能真正吸引您所追求的兴趣。 幸运的是&#xff0c;对于 WordPress 用户来说&#xff0c;有数百种工具可用于提高用户参与…...

理解 Python 中的 @wraps:保留函数元数据

一.介绍 在本文中&#xff0c;我们将了解 wraps。在 Python 中使用装饰器时&#xff0c;您可能会遇到原始函数的元数据丢失的情况。这时&#xff0c;functools 模块中的 wraps 装饰器就可以派上用场了。让我们深入了解 wraps 的作用及其重要性。 二.简单装饰器的问题 首先&a…...

cjson

文章目录 概述编译cjson_test 小结 概述 在网络传输中&#xff0c;网络数据序列化&#xff0c;常用的有那么几种&#xff0c;json&#xff0c;protobuf都是很常用的&#xff0c;这一篇来写下json。 Json常用的有几个&#xff0c;rapidjson&#xff0c;jsoncpp&#xff0c;还有…...

Docker data root 目录更改

有时候受限于系统根目录空间的限制&#xff0c;需要将 docker data root 目录更改为其它目录&#xff0c;如单独挂载一个磁盘或存储。本篇文章介绍如何操作。 修改docker 工作目录 修改配置文件/etc/docker/daemon.json&#xff08;在19.x 版本之前使用grapth&#xff09; {&q…...

[CR]厚云填补_SEGDNet

Structure-transferring edge-enhanced grid dehazing network Abstract 在过去的二十年里&#xff0c;图像去雾问题在计算机视觉界受到了极大的关注。在雾霾条件下&#xff0c;由于空气中水汽和粉尘颗粒的散射&#xff0c;图像的清晰度严重降低&#xff0c;使得许多计算机视觉…...

图-基础概念

是什么 图是一种抽象的数据类型&#xff0c;在图中的数据元素通常称作节点&#xff0c;V是所以定点的集合&#xff0c;E是所有边的集合 图的分类 有向图 如果两个订单v&#xff0c;w&#xff0c;只能由v向w&#xff0c;而不能w向v&#xff0c;那么我们就把何种情况叫做一个从…...

Javascript前端基础面试(十)

MVVM Vue MVVM这一篇就够啦&#xff01;_vue r mvvm-CSDN博客 点容器内的图标,图标边框变成border 1px solid red&#xff0c;点空白处重置 <div id"container"> <img src"icon.png" alt"Icon" class"icon"> <!…...

书生大模型实战营闯关记录----第五关:LlamaIndex+Internlm2 RAG实践Demo:效果对比,文档加载,向量库构建,检索器,模型推理

文章目录 1. 前置知识RAG背景RAG 效果比对 2. 环境、模型准备2.1 配置基础环境2.2 安装 Python环境和依赖包2.3 下载 Sentence Transformer 模型2.4 下载 NLTK 相关资源 3. LlamaIndex HuggingFaceLLM4. LlamaIndex RAG加载文档构建向量存储索引库检索器RAG代码 5. LlamaIndex …...

如何使用极狐GitLab CI/CD Component Catalog?【上】

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…...

详解Xilinx FPGA高速串行收发器GTX/GTP(3)--GTX的时钟架构

目录 1、参考时钟 2、时钟方案 2.1、单个外部参考时钟驱动单个QUAD中的多个transceiver 2.2、单个外部参考时钟驱动多个QUAD中的多个transceiver 2.3、同一个Quad中,多个GTX Transceiver使用多个参考时钟 2.4、不同Quad中,多个GTX Transceiver 使用多个参考时钟 3、QP…...

简单搭建dns服务器

目录 一.安装服务 二.编写子配置文件 三.编写主配置文件 四.编写文件 五.重启服务测试 配置端&#xff1a;IP地址为172.25.254.100、主机名为node1.rhel9.org 测试端&#xff1a;IP地址为172.25.254.101、主机名为node2.rhel9.org 一.安装服务 [rootnode1 ~]# dnf inst…...

大数据进阶(Advanced Big Data)

大数据进阶&#xff08;Advanced Big Data&#xff09; 目录 引言大数据架构 Lambda架构Kappa架构 大数据技术栈 数据采集与预处理数据存储与管理数据处理与分析数据可视化与展示 大数据分析方法 机器学习深度学习自然语言处理图数据分析 大数据在工业中的应用 制造业能源管理…...

微信小程序开发优惠券制作源码

微信小程序开发优惠券制作源码。制作一个自带流量的小程序商城,功能强大玩法新,轻松实现引流,推广,卖货,分销,会员管理,直播等多种功能需求需要哪些编辑代码源码呢?http://m.bokequ.com/list/124-2.html 代码分享 <!DOCTYPE HTML> <html xmlns"http://www.w3.o…...

中国设计最好的网站/网络推广服务协议

一、前言 我们知道&#xff0c;maven通过依赖的坐标来查找依赖&#xff0c;并通过一定的规则来自动管理依赖。本篇文章将通过对坐标和依赖的讲解&#xff0c;来告诉我们maven管理依赖的原理与过程&#xff0c;并介绍如何通过一些工具来实现依赖的优化。 二、坐标 我们通常会通过…...

做网站需要具备的基础条件/网站如何建立

文章目录一、大数据岗位方向分类&#xff08;1&#xff09;基础平台开发&#xff1a;&#xff08;2&#xff09;数据产品开发&#xff1a;&#xff08;3&#xff09;数据仓库&#xff1a;&#xff08;4&#xff09;数据分析&#xff1a;&#xff08;5&#xff09;算法&#xff…...

做网站宁波/数据分析师培训需要多少钱

正则定义 定义RegExp对象:是对字符串执行模式匹配的强大工具对象定义构造方法var regnew RegExp("普通字符特殊字符"&#xff0c;[修饰符])&#xff1b;字面量var reg/格式字符串/修饰符普通字符&#xff1a;看起来是什么就是什么特殊字符&#xff08;拥有特殊功能的…...

营销型网站建设 高校邦/杭州百度推广代理公司哪家好

在以前写个一篇关于ASP.NET页面生命周期的草稿,最近又看了看ASP.NET&#xff0c;做个补充,看看页面初始过程到底是怎么样的下面是ASP.NET页面初始的过程:1. Page_Init();2. Load ViewState;3. Load Postback data;4. Page_Load();5. Handle control events;6. Page_PreRender()…...

c 网站登录验证码怎么做/推广产品的方法

AOP概念&#xff1a;Aspect Oriented Programming&#xff0c;面向切面编程 AOP用来封装横切面关注点&#xff0c;可以在以下场景使用&#xff1a;权限、缓存、错误处理、调试、 记录跟踪、持久化、同步、事务等...

网站搜索推广方案论文/网络推广是做什么工作的

查阅资料&#xff0c;以及源代码得知odoo中的附件统一使用ir.attachment这个模块来存储&#xff0c;以下为ir.attachment的字段定义。datas存储具体数据吗&#xff0c;但在数据库中是看不到这一字段。目前已经拿到store_fname&#xff0c;并已知附件filestore地址。该如何通过外…...