当前位置: 首页 > 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 提供了更多的控制选项。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于LoRA和AdaLoRA微调Qwen1.5-0.5B-Chat
  • 每日一练 | Day 4
  • 逆向API接口加解密技术解析归纳
  • sais复杂推理能力评估笔记(一):baseline简介
  • 《亿级流量系统架构设计与实战》第二章 通用的高并发架构设计
  • jmeter 重试机制
  • 抽象代数精解【5】
  • 基于配置实现RoaringBitMap的交、差、并集处理
  • JavaSE第11篇:设计模式
  • Servlet(2)
  • C语言 | Leetcode C语言题解之第321题拼接最大数
  • 免费自动化AI视频剪辑工具
  • 深入解析Apache Flink中的事件时间与处理时间
  • 使用TensorRT对YOLOv8模型进行加速推理
  • 解决方案:Cannot write to ‘torch-2.0.1+cu118-cp310-cp310-linux_x86_64.whl.3’ (成功).
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 10个最佳ES6特性 ES7与ES8的特性
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CentOS 7 防火墙操作
  • flutter的key在widget list的作用以及必要性
  • Mac转Windows的拯救指南
  • Mybatis初体验
  • sublime配置文件
  • WePY 在小程序性能调优上做出的探究
  • 复习Javascript专题(四):js中的深浅拷贝
  • 工作手记之html2canvas使用概述
  • 前端面试之闭包
  • 区块链分支循环
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 用mpvue开发微信小程序
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # 计算机视觉入门
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (160)时序收敛--->(10)时序收敛十
  • (6)添加vue-cookie
  • (C语言)共用体union的用法举例
  • (C语言)逆序输出字符串
  • (day6) 319. 灯泡开关
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (pycharm)安装python库函数Matplotlib步骤
  • (八)c52学习之旅-中断实验
  • (二)springcloud实战之config配置中心
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (新)网络工程师考点串讲与真题详解
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)可以带来幸福的一本书
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)Linux 多线程条件变量同步
  • **PHP分步表单提交思路(分页表单提交)
  • .gitignore文件忽略的内容不生效问题解决