Flutter 状态管理Provider(理解成全局变量)
2022-04-28 本文已影响0人
禄子_c79b
前言.相当于全局变量,只要一改数据,引用到的地方就会自动刷新UI改变其值
1.引入 provider: ^6.0.2
2.写model类 UserProvider
import 'package:flutter/cupertino.dart';
class UserProvider extends ChangeNotifier {
String _name;
String _gender;
UserProvider(this._name, this._gender);
set setName(String value) {
_name = value;
notifyListeners();
}
String get gender => _gender;
String get name => _name;
// Provider.of<UserProvider>(context,listen: false).setGender="famale";
set setGender(String value) {
_gender = value;
notifyListeners();
}
// Provider.of<UserProvider>(context,listen: false).setName2("famale");
void setName2(String value) {
_name = value;
notifyListeners();
print('setName2 call');
}
}
3.类似注册:
(1)单个对象
class routeIntent extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
routes: <String, WidgetBuilder>{//所有的入口
// "login": (context) => FromPage(),
"login": (context) => MyApp1(),
},
// home: MyHomePage(title: "routeIntent"),
);
}
}
void main() {
runApp(ChangeNotifierProvider<UserProvider>.value(
child: routeIntent(),
value: UserProvider('yuren', 'fame'),
));
}
(2)多个对象MultiProvider
runApp(
MultiProvider(
providers: [
//以下两种创建都可以,如果是同一个model类,则使用最近的,即使用 User('yagao','lala')
//ChangeNotifierProvider(create: (_)=>UserProvider('SSG', '男')),
ChangeNotifierProvider<UserProvider>.value(value: UserProvider('T1','男男')),
ChangeNotifierProvider<UserProvider>.value(value: User('yagao','lala')),
ChangeNotifierProvider(create: (_)=>Order(1,'alibaba'))
],
child: MaterialApp(
home: MyApp(),
)
)
);
4.调用
Text("name:${Provider.of<UserProvider>(context).name}}")
5.修改,结果就是所有引用的地方都刷新了
注意:这里的listen: false一定要带上,以前的不要,现在新的要,不然报错
floatingActionButton: FloatingActionButton(
onPressed: () {
Provider.of<UserProvider>(context,listen: false).setName2("gunsitan");
},
child: Icon(Icons.add),
),