文档地址。
https://github.com/rrousselGit/provider/blob/master/resources/translations/zh-CN/README.md
以下代码地址
https://github.com/AYuWei/YuWeiFlutterApp/tree/2021-1-15_Provider
全局状态管理。
__
先来一个改变全局状态的主题
ThemeModel
import 'package:flutter/material.dart';class ThemeModel with ChangeNotifier {ThemeData themeData;ThemeType currentType;ThemeModel(ThemeType type){currentType = type;type == ThemeType.dark ?themeData = ThemeData.dark() :themeData = ThemeData.light();}// 反转void reverse(){currentType == ThemeType.dark ?_upDate(ThemeType.light) :_upDate(ThemeType.dark);}void _upDate(ThemeType type){currentType = type; // 当前类型type == ThemeType.light ?themeData = ThemeData.light() :themeData = ThemeData.dark();notifyListeners(); // 更改状态}}enum ThemeType {light, // 白天模式dark, // 黑暗模式}
入口引入
runApp(ChangeNotifierProvider<ThemeModel> (create: (_) {return ThemeModel(ThemeType.dark);},child: RootApp(),) );
在MaterialApp中使用
return MaterialApp(theme: Provider.of<ThemeModel>(context).themeData ,home:IndexInHeritedWidget() ,);
在某个页面中【修改状态/获取数据】
FlatButton(onPressed: (){// 反转颜色。Provider.of<ThemeModel>(context, listen: false).reverse();},child: Consumer<ThemeModel>(builder: (context, type, child){String result = "切换成";if(type.currentType == ThemeType.dark ){result += "白天模式";} else {result += "黑夜模式";}return Text(result);},)// child:// Selector<ThemeModel, ThemeType>(// builder: (context, type, child){// String result = "切换成";// if(type == ThemeType.dark ){// result += "白天模式";// } else {// result += "黑夜模式";// }// return Text(result);// },// selector: (context, themeModel){// return themeModel.currentType;// },// )),
__
当我们需要监听很多状态的时候(方法一:层级太多,方法二:同意层级管理)我们以后使用方法二。
添加状态
方法一:
方法二:

使用状态


去另一个页面改变数据



