Flutter Provide状态管理基础
2019-03-19 本文已影响322人
zda123000
Provide是Google官方推出的状态管理模式。官方地址为:https://github.com/google/flutter-provide
现在Flutter的状态管理方案很多,redux、bloc、state、Provide。
-
Scoped Model : 最早的状态管理方案,我刚学Flutter的时候就使用的这个,虽然还有公司在用,但是大部分已经选用其它方案了。
-
Redux:现在国内用的最多,因为咸鱼团队一直在用,还出了自己fish redux。阿里宣布开源Flutter应用框架Fish Redux!
-
bloc:比Redux简单,而且好用,特别是一个页面里的状态管理。
-
state:缺点是耦合太强,如果是大型应用,管理起来非常混乱。
-
Provide:是在Google的Github下的一个项目,刚出现不久,所以可以推测他是Google的亲儿子。
要实现一个页面状态改变之后,另一个页面状态也随之改变。效果图如下:
效果图1、添加依赖
dependencies:
provide: ^1.0.2
2、创建Provide
这个类似于创建一个state,但是为了跟State区分,我们叫创建Provide。新建一个provide文件夹,然后再里边新建一个counter.dart 文件.代码如下:
import 'package:flutter/material.dart';
class Counter with ChangeNotifier {
int value = 0;
increment() {
value++;
notifyListeners();
}
}
3、将状态放入顶层
void main() {
var counter =Counter();
var providers = Providers();
providers..provide(Provider<Counter>.value(counter));
runApp(
ProviderNode(
child: MyApp(),
providers: providers,
)
);
}
4、获取状态
class Number extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.only(top: 200.0),
child: Provide<Counter>(
builder: (context, child,counter) {
return Text('${counter.value}',style: TextStyle(fontSize: 30.0),);
},
)
);
}
}
builder方法接收三个参数
- 第一个参数context:代表上下文。
- 第二个参数child:假如这个小部件足够复杂,内部有一些小部件是不会改变的,那么我们可以将这部分小部件写在Provide的child属性中,让builder不再重复创建这些小部件,以提升性能。
- 第三个参数counter:这个参数代表了我们获取的顶层providers中的状态。
5、修改状态
Widget build(BuildContext context) {
return Container(
child: Container(
child: RaisedButton(
onPressed: () {
Provide.value<Counter>(context).increment();
},
child: Text('增加'),
),
),
);
}