Provider通常使用ChangeNotifierProvider配合ChangeNotifier一起來實現(xiàn)狀態(tài)的管理與Widget的更新辫塌。
ChangeNotifierProvider本質(zhì)上其實就是Widget本讥,它作為父節(jié)點Widget霸褒,可將數(shù)據(jù)共享給其所有子節(jié)點Widget使用或更新辫红;
-
創(chuàng)建model,繼承ChangeNotifier毫玖,用來實現(xiàn)數(shù)據(jù)更新的通知并監(jiān)聽數(shù)據(jù)的變化廉沮;
調(diào)用notifyListeners()通知給監(jiān)聽方
-
創(chuàng)建ChangeNotifierProvider,用來聲明Provider孵坚,實現(xiàn)跨組建的數(shù)據(jù)共享粮宛;
用ChangeNotifierProvider將父布局包裹,在父或子節(jié)點ChildA通過Provider.of<T>(BuildContext context, {bool listen = true})進行數(shù)據(jù)操作卖宠,可同步更新父與子的數(shù)據(jù)與UI巍杈。其中l(wèi)isten默認為true可監(jiān)聽數(shù)據(jù)的變化,為false的情況只可讀取數(shù)據(jù)的值
-
接收共享數(shù)據(jù)扛伍;context.watch<>()和context.read<>()
不管是在父節(jié)點還是在子節(jié)點筷畦,都可以對ProviderViewModel的數(shù)據(jù)進行操作和監(jiān)聽。例1在操作與讀取時使用的是Provider.of<T>(BuildContext context, {bool listen = true})的方式刺洒,為了可以更明確對于Provider的操作鳖宾,我們可將它替換為context.watch<>()和context.read<>()方式。 我們可以通過源碼看到作媚,context.watch<>()和context.read<>()方法其實都是調(diào)用Provider.of<T>(BuildContext context, {bool listen = true})來實現(xiàn)