Flutter 新手,我目前正在使用 Provider 進行狀態管理,并且對它的實際作業方式有一些疑問。
我像這樣宣告我的提供者......
主要.dart
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider<ProviderFoo>(create: (_) => ProviderA(),
ChangeNotifierProvider<ProviderBar>(create: (_) => ProviderB(),
],
),
);
ProviderFoo 和 ProviderBar 類都擴展了 ChangeNotifier。
問題一:
如果我有 2 個不同的視圖并且我需要在這兩個視圖上使用 FooProvider
小部件1.dart
var providerOneFoo = Provider.of<FooProvider>(context);
小部件2.dart
var providerTwoFoo = Provider.of<FooProvider>(context);
providerOneFoo 是否與 providerTwoFoo 相同,即使它們位于兩個單獨的檔案中?Provider.of 是創建一個新的提供者實體,還是僅僅參考我們在 MultiProviders 中宣告它們的小部件樹頂部設定的全域實體?
問題2:
如果我將提供程式作為引數傳遞給另一個提供程式中的函式,是否存在任何設計缺陷?
小部件1.dart
var fooProvider = Provider.of<FooProvider>(context);
var barProvider = Provider.of<BarProvider>(context);
fooProvider.someFunction(barProvider);
provider_foo.dart
class FooProvider extends ChangeNotifier{
...
void someFunction(barProvider) {
barProvider.someVar = 0;
notifyListeners();
}
}
如果可能的話,我可以讓外部提供者成為另一個提供者的屬性嗎?
謝謝 :)
uj5u.com熱心網友回復:
問題 1
使用Provider<ProviderClass>.of(context)總是參考提供的相同全域提供程式(沒有雙關語)
問題2
最好實作該方法并從中providerBar呼叫。notifyListeners()
notifyListeners()在您的示例中,呼叫FooProvider 只會通知 FooProvider 的偵聽器。
如果某些小部件依賴于BarProvider,在您的示例中,它不會被通知更改為barProvider.someVar
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/496309.html
下一篇:單擊外部和鏈接時如何關閉導航欄
