參考文檔 :
從3.0版本到4.0版本改動 確實比較大,遷移和運用的過程中,內(nèi)心是奔潰的洛史,最后中找到規(guī)律其實發(fā)現(xiàn)容易了很多
運用場景
1.多個weight 共用一塊數(shù)據(jù)資源 可以使用provider共享出去
2.共享數(shù)據(jù)發(fā)生變化 子weight的數(shù)據(jù)也需要響應(yīng)變化
`注意問題:過多的重構(gòu)build 消耗性能`
image.png
解釋一下上圖 Model變化后會自動通知ChangeNotifierProvider(訂閱者)潮孽,ChangeNotifierProvider內(nèi)部會重新構(gòu)建InheritedWidget,而依賴該InheritedWidget的子孫Widget就會更新。
其實在實現(xiàn)狀態(tài)管理過程中用到倆個過程
InheritedWidget
ChangeNotifier
當(dāng)然provider組件也提供了別的類 Consumer
Selector
大致實現(xiàn)如下
// 這是一個便捷類芋浮,會獲得當(dāng)前context和指定數(shù)據(jù)類型的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
);
}
}