和Scoped_model一样,Provide也是借助了InheritWidget,将共享状态放到顶层MaterialApp之上。底层部件通过Provier获取该状态,并通过混合ChangeNotifier通知依赖于该状态的组件刷新。
Provide还提供了Provide.stream,让我们能够以处理流的方式处理数据,不过目前还有一些问题,不推荐使用。
Lets do it!
我们这里还是以一个简单app为例,详细介绍Provide的用法。其中涉及共享状态以及多个状态之间如何管理。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vkebRyEd-1630663448699)(https://user-gold-cdn.xitu.io/2019/2/20/1690aee3246a13ec?imageslim)]
这两个页面都同时依赖于counter 和 switcher两个不同的状态。并且一个页面改变状态之后另外一个页面状态也随之改变。
该项目完整代码已放在 Github
第一步:添加依赖
在pubspec.yaml中添加Provide的依赖。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4LAW7kG9-1630663448702)(https://user-gold-cdn.xitu.io/2019/2/20/1690b552df50d005?imageView2/0/w/1280/h/960/ignore-error/1)]
- 实际添加请参考:pub.dartlang.org/packages/pr…
- 由于版本冲突添加失败请参考: juejin.im/post/684490…
第二步:创建Model
这里实际上它承担了State的职责,但是为了和官方的State区分所以叫做model。
import 'package:flutter/material.dart';
class Counter with ChangeNotifier{
int value = 0;
increment(){
value++;
notifyListeners();
}
}
这里我