【AI生成文章】flutter ChangeNotifierProvider 实用场景举例
内容由Ai 大模型生成,不能完全保障真实
ChangeNotifierProvider 是 Flutter 中一个非常实用的工具,用于在应用程序中管理和传递状态。以下是一些实用的场景举例:
1. 用户信息管理
在应用程序中,用户信息(如用户名、头像、偏好设置等)通常需要在多个页面中访问和展示。使用 ChangeNotifierProvider,你可以创建一个 UserInfoModel 类,继承自 ChangeNotifier,用于管理用户信息。然后,你在应用程序的顶层使用 ChangeNotifierProvider 包裹,这样任何需要访问用户信息的组件都可以通过 Consumer 或 Selector 来获取和监听用户信息的变化。
class UserInfoModel extends ChangeNotifier {String _username;String _avatarUrl;String get username => _username;String get avatarUrl => _avatarUrl;void updateUserInfo(String username, String avatarUrl) {_username = username;_avatarUrl = avatarUrl;notifyListeners();}
}
void main() {runApp(ChangeNotifierProvider(create: (context) => UserInfoModel(),child: MaterialApp(home: MyHomePage(),),),);
}
class MyUserProfile extends StatelessWidget {Widget build(BuildContext context) {final userInfo = Provider.of<UserInfoModel>(context);return Column(children: [Text(userInfo.username),Image.network(userInfo.avatarUrl),],);}
}
2. 购物车状态管理
在电子商务应用程序中,购物车的状态(如添加商品、删除商品、修改商品数量等)需要在多个页面中保持同步。使用 ChangeNotifierProvider,你可以创建一个 CartModel 类来管理购物车状态。然后,你在应用程序的顶层使用 ChangeNotifierProvider 包裹,这样任何需要访问购物车状态的组件都可以通过 Consumer 或 Selector 来获取和监听购物车状态的变化。
class CartModel extends ChangeNotifier {final List _cartItems = [];List get cartItems => _cartItems;void addToCart(String itemId) {_cartItems.add(itemId);notifyListeners();}void removeFromCart(String itemId) {_cartItems.remove(itemId);notifyListeners();}
}
void main() {runApp(ChangeNotifierProvider(create: (context) => CartModel(),child: MaterialApp(home: MyShoppingPage(),),),);
}
class MyShoppingCart extends StatelessWidget {Widget build(BuildContext context) {final cart = Provider.of<CartModel>(context);return ListView.builder(itemCount: cart.cartItems.length,itemBuilder: (context, index) {return ListTile(title: Text(cart.cartItems[index]),);},);}
}
3. 应用主题切换
在应用程序中,允许用户切换主题(如亮色主题和暗色主题)是一个常见的功能。使用 ChangeNotifierProvider,你可以创建一个 ThemeModel 类来管理当前主题。然后,你在应用程序的顶层使用 ChangeNotifierProvider 包裹,这样任何需要根据主题变化的组件都可以通过 Consumer 或 Selector 来获取和监听主题的变化。
class ThemeModel extends ChangeNotifier {ThemeData _themeData;ThemeData get themeData => _themeData;void setTheme(ThemeData theme) {_themeData = theme;notifyListeners();}
}
void main() {runApp(ChangeNotifierProvider(create: (context) => ThemeModel(),child: MaterialApp(theme: ThemeData.light(),darkTheme: ThemeData.dark(),themeMode: ThemeMode.system,home: MyThemePage(),),),);
}
class MyThemeSwitcher extends StatelessWidget {Widget build(BuildContext context) {final theme = Provider.of<ThemeModel>(context);return Switch(value: theme.themeData == ThemeData.dark(),onChanged: (value) {if (value) {theme.setTheme(ThemeData.dark());} else {theme.setTheme(ThemeData.light());}},);}
}
这些场景展示了 ChangeNotifierProvider 如何在 Flutter 应用程序中用于状态管理和传递。通过使用 ChangeNotifierProvider,你可以轻松地在应用程序的不同部分共享和同步状态,同时保持代码的整洁和组织。
相关文章:
【AI生成文章】flutter ChangeNotifierProvider 实用场景举例
内容由Ai 大模型生成,不能完全保障真实 ChangeNotifierProvider 是 Flutter 中一个非常实用的工具,用于在应用程序中管理和传递状态。以下是一些实用的场景举例: 1. 用户信息管理 在应用程序中,用户信息(如用户名、…...
【0274】从shared init file或local init file加载relation cache(2 - 1)
上一篇: 【0273】深入分析 relcache(relation descriptor cache)初始化第一阶段(1) 【0264】深入分析relcache(relation descriptor cache)缓存初始化第2阶段(2) 1. 前言 本文内容是作为《【0264】深入分析relcache(relation descriptor cache)缓存初始化第2阶段…...
蓝桥杯-02-2023蓝桥杯c/c++省赛B组题目
参考 2023 年第十四届蓝桥杯 C/C B组省赛题解 2023蓝桥杯c/c省赛B组题目(最全版): A:日期统计 这题方法应该很多,没有和别人讨论想法。我的解法思路是:先 load 函数生成所有这一年的合法日期,然后枚举所有可以从数据…...
欧拉筛+并查集
集合 - 洛谷 std::vector<int> minp, primes,primes1;void sieve(int n,int p) {minp.assign(n 1, 0);primes.clear();for (int i 2; i < n; i) {if (minp[i] 0) {minp[i] i;primes.push_back(i);}for (auto p : primes) {if (i * p > n) {break;}minp[i * p]…...
《桥接模式(极简c++)》
本文章属于专栏《设计模式(极简c版)》 继续上一篇《原型模式(极简c)》。本章简要说明桥接模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。 模式说明 方案: 将抽象部分与它的实现部分分离,…...
jconsole的使用
前提 已安装jdk 使用步骤 1、命令行输入jconsole...
JavaScript详细教程
文章目录 前言一、代码位置二、注释三、变量1.字符串类型2.数组3.对象(字典) 四、条件语句五、函数六、DOM模板 前言 JavaScript 是一种脚本编程语言,它可以在网页上实现复杂的功能,网页展现给你的不再是简单的静态信息࿰…...
Hive自定义GenericUDF函数
Hive自定义GenericUDF函数 当创建自定义函数时,推荐使用 GenericUDF 类而不是 UDF 类,因为 GenericUDF 提供了更灵活的功能和更好的性能。以下是使用 GenericUDF 类创建自定义函数的步骤: 编写Java函数逻辑:编写继承自 GenericUDF…...
伊理威科技:抖音开网店新手刚做选啥品
在数字浪潮中,抖音不仅是展示才艺的舞台,更是创业者的新天地。新手若想在这片热土上开垦网店,选品便是首要课题。选择产品如同种下希望的种子,既要考量土壤肥沃度,也得预测风雨适宜期。 兴趣与专长是选品的罗盘。热爱所…...
【爬虫】专栏文章索引
为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 爬虫 目录: (一)web自动化和接口自动化 (二)实战-爬取Boss直聘信息数据...
【Linux】Linux开发工具-vim / 编译器-gcc/g++ / 调试器-gdb / git操作 / 项目自动化构建工具-make/Makefile
主页:醋溜马桶圈-CSDN博客 专栏:Linux_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1.在Linux写自己的第一个程序 1.1 nano指令 1.2 nano指令的使用 1.2.1 介绍 1.2.2 演示 1.2.2.1 创建.c文件 1.2.2.2 nano cod…...
解决VM重新打开后找不到共享文件夹的问题
我的问题是之前按照网上的文档设置了vm的共享文件夹,能成功使用,但是问题是下一次打开之后就找不到了,虚拟机设置里共享文件夹是启用的,文件夹也完成了映射网络驱动器,但是就是找不到共享文件夹 解决方法:…...
uni app 空挡接龙
pc游戏 空挡接龙 还不完整。现在没时间搞了记录在这里,等以后有时间了再继续搞。 <template><view class"page_main"><view class"contentone"><canvas class"canvas_cla" style"z-index: 1;" canva…...
oracle表备份及还原
工作中,经常使用Navicat访问及操作Oracle数据库,备份表非常方便Ctrlc、Ctrlv;最近备份表,发现这种操作有问题;数据表有2条检查,使用Ctrlc、Ctrlv操作,发现新备份的表出现4条检查,再对…...
牛客小白月赛89补题1(ABCD)(偏难)
评价: 高情商:收获很大 ,让自己进一步认清自己。 低情商:题目难,自己太菜了。 今天还有一些其他事,剩下的题明天再补。 我们从a题开始吧: A.签到 我们只要看看其中的max与min是否不符合即可…...
内存条@电脑支持的最大内存@升级内存硬件
文章目录 电脑支持的最大内存规格cpu官网查看支持的规格命令行查看脚本化 DDR内存LPDDR内存内存升级扩展👺插槽检查板载内存SPD内存厂商其他 内存参数👺性能指标使用软件查看更多内存相关的软件工具 电脑支持的最大内存规格 确认电脑最大支持内存大小和频…...
如何了解AI基础概念
1. **在线课程和教程:** - 寻找在线AI课程或教程,例如Coursera、edX、Udemy等平台上的课程。这些课程通常会从基础概念开始介绍,逐步深入。 2. **书籍阅读:** - 阅读与AI相关的书籍,如《Python深度学习》、《机…...
Apache James数据库存储用户信息的密码加密问题
项目场景 Apache James邮件服务器使用数据库来存储用户信息的密码加密问题: 将James的用户改为数据库存储James密码是如何加密验证的 1.将James的用户改为数据库存储 1、修改存储方式 找到james-2.3.2\apps\james\SAR-INF\config.xml 找到<users-store>标…...
大数据分布式事务的深入理解?
在一个大数据系统内部分布式事务无处不在,但凡一个任务分布到多台机器上执行就会涉及到分布式事务的场景,分布式事务一直以来都是分布式系统比较难以解决的问题。 事务的理解,比如你要将账户A转1块钱到账户B中,那么这个行为在执行…...
LeetCode hot100-17
41. 缺失的第一个正数给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 这题要求空间复杂度为O(1),要么定义单个变量,要么原地操作。定义长度为n的数…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
