目录

前言

一、什么是ChangeNotifierProvider?

 二、ChangeNotifier的简单用法

1.定义状态类

2.使用ChangeNotifierProvider提供状态

3.获取状态并监听更新

1.Consumer

2.通过API方式获取

1.Provider.of (context)

2.context.watch ()

3.context.read ()

4.各种获取状态的方法的区别

三、ChangeNotifierProvider高级用法

1.多Provider组合使用

2.使用context.read、watch、select

1.read用于点击事件

2.select精细监听

3.局部重建优化

4.状态共享跨页面

5.手动获取最新状态


前言

        上篇文章中,我们大致了解下Provider的优点和缺点,这篇博客主要介绍Provider中的四大核心Provider中的ChangeNotifierProvider。

一、什么是ChangeNotifierProvider?

        ChangeNotifierProvider 是 Provider 包中用于提供 ChangeNotifier 类型对象给子 widget 树的组件。

        它的核心功能是:将状态对象注入到widget树中,供后续获取与监听更新。

        它的两个职责:

        持有一个 ChangeNotifier 状态对象

        自动管理它的生命周期(创建、释放)

 二、ChangeNotifier的简单用法

1.定义状态类

        我们首先定义我们的数据模型,这个数据模型继承自ChangeNotifier。

class Counter with ChangeNotifier {int _count = 0;int get count => _count;void increment() {_count++;notifyListeners(); // 通知 UI 更新}
}

2.使用ChangeNotifierProvider提供状态

void main() {runApp(ChangeNotifierProvider(create: (context) => Counter(),child: const MyApp(),),);
}

3.获取状态并监听更新

        ChangeNotifierProvider有两种方式获取状态分别是Consumer和API方式获取状态。

1.Consumer

class MyHomePage extends StatelessWidget {@overrideWidget build(BuildContext context) {return Consumer<Counter>(builder: (context, counter, _) => Column(children: [Text('Count: ${counter.count}'),ElevatedButton(onPressed: counter.increment,child: Text('Increment'),),],),);}
}

2.通过API方式获取

        除了上面的Consumer的方式获取Widget的状态之外,还可以通过下面的API实时获取Widget的状态。

1.Provider.of<T>(context)

        我们可以通过Provider.of<T>(context)获取Widget的状态。

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'consumer.dart';class ChangeNotifierProviderDemoPage extends StatelessWidget {final String title;const ChangeNotifierProviderDemoPage({super.key, required this.title});@overrideWid

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91430.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91430.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/91430.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025电商CPS分销与推客系统小程序开发:趋势、架构与实战解析

一、行业趋势&#xff1a;CPS模式与社交电商的深度融合1.1 电商行业新趋势根据《2025年电子商务行业发展趋势预测报告》&#xff0c;社交电商与内容营销已成为核心增长点。消费者行为呈现三大特征&#xff1a;消费习惯转变&#xff1a;线上购物占比超70%&#xff0c;Z世代用户更…

Conda环境下配置的基本命令

功能命令创建环境conda create -n myenv python3.11激活环境conda activate myenv删除环境conda env remove -n myenv复制环境conda create -n newenv --clone myenv列出所有环境conda env list列出环境所有包conda list彻底清除某个 Conda 环境中的所有已安装包&#xff08;但…

Ps2025

快捷键CShs保存CSw存储为S选取叠加选取,A选取减去选区C回车保存路径内容识别 SF5 ADel填充前景色CDel填充背景色A上下 上下行间距A左右 左右字间距C左键丝滑放大缩小CASE盖印图层C}上移一格CG新建组sF6羽化像素钢笔工具打上抹点&#xff0c;按住shift水平拉调增弧度左右两个手柄…

ceph sc 设置文件系统格式化参数

前言 默认的 sc 文件系统 inode 太少,对于小文件场景,往往会出现容量没满,inode 已经用尽的情况,本文说明如何设置 inode。 说明 本文使用的是 rook-ceph 部署的 ceph 作为存储后端。 xfs 文件系统 sc 创建带格式化参数的 xfs 文件系统的 sc allowVolumeExpansion: t…

【LY88】ubuntu下的常用操作

vscode 下载安装包 在安装包所处文件夹空白区域右键调出终端 输入下行命令安装 c后接tab自动补全安装包名称&#xff08;前提是该文件夹中仅这一个c开头文件&#xff0c;否则得再输点字母&#xff0c;保证其可唯一索引到&#xff09; sudo dpkg -i ctab安装完毕后输入code&…

web应用从服务器主动推动数据到客户端的方式

html5 websocket 全双工交互 全双工通信&#xff1a;建立持久连接&#xff0c;服务端和客户端可随时互相发送消息 低延迟&#xff1a;适合实时应用&#xff08;聊天、游戏、股票行情等&#xff09; socket协议是与HTTP协议平级的&#xff0c;websocket协议是建立在TCP协议之上的…

基于Spring Boot实现中医医学处方管理实践

基于Spring Boot实现中医医学处方管理 以下是基于Spring Boot实现中医医学处方管理的相关示例和资源整理,涵盖基础架构、功能模块及实际应用案例: 基础项目结构 Spring Boot中医处方系统通常采用MVC分层设计: 实体类:定义处方、药材、患者等JPA实体 @Entity public clas…

从“人工核验”到“智能鉴防”:护照鉴伪设备的科技革命

“一本伪造护照的查获成本从72小时降至3秒&#xff0c;背后是光学传感、量子加密与多模态AI的十年协同进化。”2025年全球边检口岸查获伪假护照近500份&#xff0c;其中芯片伪造占比首超40%。当造假技术逼近分子级仿制&#xff0c;传统肉眼鉴别彻底失效&#xff0c;多光谱成像、…

无人机飞控系统3D (C++)实践

大疆无人机飞控系统3D模型开发 大疆无人机飞控系统3D模型开发(C++) 核心架构设计 大疆无人机的飞控系统通常采用分层架构,分为硬件抽象层(HAL)、中间件层和应用层。HAL负责与传感器/执行器直接交互,中间件处理数据融合和通信协议,应用层实现核心控制算法。 典型代码结…

ES6中import与export的用法详解

目录 一、ES6模块化的核心概念 1. 模块化的基本规则 二、export的用法 1. 命名导出&#xff08;Named Export&#xff09; 示例&#xff1a; 2. 默认导出&#xff08;Default Export&#xff09; 示例&#xff1a; 默认导出函数或类&#xff1a; 3. 导出语句的统一声明…

硬核技术协同:x86 生态、机密计算与云原生等技术如何为产业数字化转型筑底赋能

在产业数字化转型的浪潮中&#xff0c;x86 生态构建、机密计算与 AI 融合、高性能网卡突破、云原生 OS 实践、国产数据库优化等技术领域的突破&#xff0c;正成为支撑数字化基础设施升级与业务创新的核心引擎。以下从技术深度与产业实践角度&#xff0c;系统性解析各领域的最新…

Java项目:基于SSM框架实现的网络财务管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本网络财务管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

1.5.Vue v-for 和 指令修饰符

vue v-for当你使用 v-for 指令来渲染列表时&#xff0c;为每个元素提供一个唯一的 key 属性是非常重要的。key 是用来给 Vue 一个提示&#xff0c;以便它能够追踪每个节点的身份&#xff0c;从而更高效地更新虚拟 DOM。key 的作用唯一标识&#xff1a;key 应该是每项数据的唯一…

(RedmiBook)上禁用触摸板或自带键盘

在红米笔记本&#xff08;RedmiBook&#xff09;上禁用触摸板或自带键盘&#xff0c;可以通过以下几种方法实现&#xff1a; 方法一&#xff1a;通过设备管理器禁用&#xff08;Windows 系统&#xff09; 禁用触摸板 打开设备管理器 按 Win X → 选择 “设备管理器”或 Win …

15 - 多模态大语言模型 — 图文 “牵线” 系统 “成长记”:借 CLIP 练本领,从图像与文字里精准 “搭鹊桥” 的全过程 (呆瓜版 - 2 号)

目录 1、基础&#xff1a;它到底是个啥&#xff1f; 1. 1、一句话理解核心 1.2、 为啥厉害&#xff1f; 1.3、怎么发展来的&#xff1f; 2、架构&#xff1a;它的 “身体构造” 是啥样的&#xff1f; 2.1、视觉语言模型架构&#xff1a;让 AI “看懂” 世界的核心系统 2…

Day 4-1: 机器学习算法全面总结

Day 4-1: 机器学习算法全面总结 📚 学习目标 通过前三天的学习,我们已经掌握了机器学习的基础知识和经典算法。今天我们来做一个全面总结,为进入深度学习阶段做好准备。 🎯 已掌握的核心算法总结 1. 监督学习算法 1.1 回归算法 算法 核心思想 适用场景 优缺点 线性回…

雨云深度体验:从安利到教程再到全面评测

零、简介在云服务市场竞争日益激烈的当下&#xff0c;各类云服务提供商如雨后春笋般涌现。然而&#xff0c;雨云却凭借其独特的优势&#xff0c;在这片红海之中逐渐崭露头角&#xff0c;吸引了众多个人开发者与企业用户的目光。接下来&#xff0c;就让我们全方位、深层次地从安…

luoguP13511 [KOI P13511 [KOI 2025 #1] 等腰直角三角形

P13511 [KOI 2025 #1] 等腰直角三角形 - 洛谷 题目重现 题目描述 在二维平面上有 N 个不同的点。对于每个 1≤i≤N 的 i,第 i 个点的坐标为 (xi​,yi​)。 等腰三角形是指三条边中有两条边长度相等的三角形。直角三角形是指一个内角为直角 (90∘) 的三角形。直角三角形的斜…

Qt Quick 动画与过渡效果

Qt Quick 提供了强大而灵活的动画系统&#xff0c;使开发者能够轻松创建流畅、引人入胜的用户界面。从简单的属性变化到复杂的多元素协同动画&#xff0c;Qt Quick 提供了多种实现方式。本文将深入解析 Qt Quick 动画与过渡效果的核心技术和最佳实践。 一、基础动画类型 1. 数字…

LlamaIndex 和 Elasticsearch Rerankers:无与伦比的简洁

作者&#xff1a;来自 Elastic Jeffrey Rengifo 了解如何从 LlamaIndex RankGPT reranker 迁移到 Elastic 内置的 semantic reranker。 Elasticsearch 拥有与行业领先的 Gen AI 工具和服务商的原生集成。查看我们的网络研讨会&#xff0c;了解如何突破 RAG 基础&#xff0c;或使…