Provide是Google官方推出的状态管理模式。官方地址为:javascript
https://github.com/google/flutter-providejava
如今Flutter的状态管理方案不少,redux、bloc、state、Provide。git
Scoped Model : 最先的状态管理方案,我刚学Flutter的时候就使用的这个,虽然还有公司在用,可是大部分已经选用其它方案了。github
Redux:如今国内用的最多,由于咸鱼团队一直在用,还出了本身fish redux。阿里宣布开源Flutter应用框架Fish Redux!redux
bloc:比Redux简单,并且好用,特别是一个页面里的状态管理。框架
state:缺点是耦合太强,若是是大型应用,管理起来很是混乱。less
Provide:是在Google的Github下的一个项目,刚出现不久,因此能够推测他是Google的亲儿子。ide
步骤:post
1. 添加依赖性能
2. 建立状态管理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();
//将counter对象添加进providers providers..provide(Provider<Counter>.value(counter)); runApp( ProviderNode( child: MyApp(), providers: providers, ) ); }
Provider<Counter>.value将counter包装成了_ValueProvider。并在它的内部提供了StreamController从而实现对数据进行流式操做。
4. 获取状态
一样的Provide也提供了两种获取State的方法。咱们先来介绍第一种,经过Provide小部件获取。
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方法接收三个参数
第二种获取方式:Provide.value<T>(context)
final currentCounter = Provide.value<Counter>(context);
Widget build(BuildContext context) { return Container( child: Container( child: RaisedButton( onPressed: () { Provide.value<Counter>(context).increment(); }, child: Text('增长'), ), ), ); }
获取数据流