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

【AI生成文章】flutter ChangeNotifierProvider 实用场景举例

内容由Ai 大模型生成,不能完全保障真实

ChangeNotifierProvider 是 Flutter 中一个非常实用的工具,用于在应用程序中管理和传递状态。以下是一些实用的场景举例:

1. 用户信息管理

在应用程序中,用户信息(如用户名、头像、偏好设置等)通常需要在多个页面中访问和展示。使用 ChangeNotifierProvider,你可以创建一个 UserInfoModel 类,继承自 ChangeNotifier,用于管理用户信息。然后,你在应用程序的顶层使用 ChangeNotifierProvider 包裹,这样任何需要访问用户信息的组件都可以通过 ConsumerSelector 来获取和监听用户信息的变化。

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 包裹,这样任何需要访问购物车状态的组件都可以通过 ConsumerSelector 来获取和监听购物车状态的变化。

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 包裹,这样任何需要根据主题变化的组件都可以通过 ConsumerSelector 来获取和监听主题的变化。

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,你可以轻松地在应用程序的不同部分共享和同步状态,同时保持代码的整洁和组织。

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

相关文章:

  • 【0274】从shared init file或local init file加载relation cache(2 - 1)
  • 蓝桥杯-02-2023蓝桥杯c/c++省赛B组题目
  • 欧拉筛+并查集
  • 《桥接模式(极简c++)》
  • jconsole的使用
  • JavaScript详细教程
  • Hive自定义GenericUDF函数
  • 伊理威科技:抖音开网店新手刚做选啥品
  • 【爬虫】专栏文章索引
  • 【Linux】Linux开发工具-vim / 编译器-gcc/g++ / 调试器-gdb / git操作 / 项目自动化构建工具-make/Makefile
  • 解决VM重新打开后找不到共享文件夹的问题
  • uni app 空挡接龙
  • oracle表备份及还原
  • 牛客小白月赛89补题1(ABCD)(偏难)
  • 内存条@电脑支持的最大内存@升级内存硬件
  • 如何了解AI基础概念
  • Apache James数据库存储用户信息的密码加密问题
  • 大数据分布式事务的深入理解?
  • LeetCode hot100-17
  • java网络原理(二)------TCP确认应答和超时重传
  • 机器学习:智能时代的核心引擎
  • Docker-Image
  • YOLOv8 如何实现多主干特征融合方式 | GhostNet+ShuffleNet / SwinTransformer+ShuffleNet
  • 工作需求ElementUi组件的使用
  • 自动驾驶轨迹规划之时空语义走廊(一)
  • [环境配置].ssh文件夹权限修改方法
  • LeetCode刷题【树状数组、并查集、二叉树】
  • 使用POI以OLE对象的形式向excel中插入附件(pdf为例)
  • Unity构建详解(2)——SBP的初始设置和脚本编译
  • Matlab使用教程(持续更新)