使用 Provider,我们需要解决以下 3 个问题:
- 资源(即数据状态)如何封装?
- 资源放在哪儿,才都能访问得到?
- 具体使用时,如何取出资源?
总结
我们既可以用 Provider 来实现静态的数据读传递,也可以使用 ChangeNotifierProvider 来实现动态的数据读写传递,还可以通过 MultiProvider 来实现多个数据资源的共享。
在具体使用数据时,Provider.of 和 Consumer 都可以实现数据的读取,并且 Consumer 还可以控制 UI 刷新的粒度,避免与数据无关的组件的无谓刷新。
可以看到,通过 Provider 来实现数据传递,无论在单个页面内还是在整个 App 之间,我们都可以很方便地实现状态管理,搞定那些通过 StatefulWidget 无法实现的场景,进而开发出简单、层次清晰、可扩展性高的应用。事实上,当我们使用 Provider 后,我们就再也不需要使用 StatefulWidget 了
相关实战代码
Consumer<GlobalModel>(
builder: (context, _counter, child) => RaisedButton(
onPressed: () {
_counter.incresement();
Navigator.pop(context, "我是返回值");
},
child: child,
),
child: Text("返回"),
),
TestIcon()
RaisedButton(
onPressed: () {
_counter.incresement();
Navigator.pop(context, "我是返回值");
},
child: Text("返回"),
)
Consumer<GlobalModel>(
builder: (context, _counter, child) => RaisedButton(
onPressed: () {
_counter.incresement();
Navigator.pop(context, "我是返回值");
},
child: child,
),
child: Text("返回"),
),
而这种写法为啥就报错. 解决方案把{}改成=>
builder: (context, _counter, child) {
RaisedButton(
onPressed: () {
_counter.incresement();
Navigator.pop(context, "我是返回值");
},
child: child,
)
},
来源:CSDN
作者:皮卡丘太肥,餐餐吃吃吃
链接:https://blog.csdn.net/u011623980/article/details/104576508