参考文档 :
从3.0版本到4.0版本改动 确实比较大,迁移和运用的过程中,内心是奔溃的,最后中找到规律其实发现容易了很多
运用场景
1.多个weight 共用一块数据资源 可以使用provider共享出去
2.共享数据发生变化 子weight的数据也需要响应变化
`注意问题:过多的重构build 消耗性能`

解释一下上图 Model变化后会自动通知ChangeNotifierProvider(订阅者),ChangeNotifierProvider内部会重新构建InheritedWidget,而依赖该InheritedWidget的子孙Widget就会更新。
其实在实现状态管理过程中用到俩个过程
-
InheritedWidget
-
ChangeNotifier
当然provider组件也提供了别的类 Consumer
Selector
大致实现如下
// 这是一个便捷类,会获得当前context和指定数据类型的Provider
class Consumer<T> extends StatelessWidget {
Consumer({
Key key,
@required this.builder,
this.child,
}) : assert(builder != null),
super(key: key);
final Widget child;
final Widget Function(BuildContext context, T value) builder;
@override
Widget build(BuildContext context) {
return builder(
context,
ChangeNotifierProvider.of<T>(context), //自动获取Model
);
}
}
网友评论