文档地址。
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;
// },
// )
),