參考文檔 :
從3.0版本到4.0版本改動 確實比較大,遷移和運用的過程中,內心是奔潰的,最后中找到規律其實發現容易了很多
運用場景
1.多個weight 共用一塊數據資源 可以使用provider共享出去
2.共享數據發生變化 子weight的數據也需要響應變化
`注意問題:過多的重構build 消耗性能`
image.png
解釋一下上圖 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
);
}
}