Flutter 的官方 Mobx 檔案說,為了正確傳輸資料,您必須使用 Provider 并參考背景關系來檢索資料。
但是為什么不能直接呼叫應用根目錄下的 Mobx 類,訪問全域變數來獲取資料呢?
CbtStore cbt = CbtStore();
void main() async {
runApp(const MyApp());
}
我為什么要這樣做?
void main() async {
runApp(MultiProvider(
providers: [
Provider<CbtStore>(create: (_) => CbtStore()),
],
child: MyApp()));
}
在這種情況下,我如何在小部件方法中參考 Mobx,例如,如果我想在 initState 方法中呼叫 Mobx 類中的操作?現在我按以下方式進行。但是在 initState 中使用 Provider 時沒有背景關系。
@override
void initState() {
cbt.init();
super.initState();
}
uj5u.com熱心網友回復:
你應該做最適合你的用例的事情。
提供者之所以有用,是因為可以在需要的地方提供它們。這可能位于應用程式根目錄中,也可能位于小部件樹的更深處。
提供程式的另一個優點是您可以擁有一個通知偵聽器的提供程式。在這種情況下,小部件將自動重建,如果您已存盤并需要在應用程式中的任何位置更新資料,這將非常有用。
該initState確實不直接允許使用的供應商。有3個解決方案:
- 沒有提供者串列 (Provider.of(context, listen: false); 這允許您使用方法,但不能監聽更改。
- 在構建方法中使用提供者,使用消費者。
我絕不是 Flutter 方面的專家,但這正是我目前所經歷的。
uj5u.com熱心網友回復:
Provider 僅用于 mobx 的依賴注入。它不用于狀態更改。
現在,當您使用 mobx 時,在大多數情況下您不需要有狀態的小部件,因為您正在處理您的 mobx 存盤中的狀態更改,并且如果我們用于Observer更改 ui 的狀態發生任何更改。
如果想要用螢屏初始化某些東西而不是更喜歡使用 mobx 類的建構式而不是 initState。
例如,
class MyStore = _MyStore with _$MyStore;
abstract class _MyStore with Store {
_MyStore(){
getData();
}
}
現在不要為您的所有商店使用全球供應商。僅在需要時初始化提供程式。因此,當您推送路由時,請使用提供程式將其包裝起來,以便Provider.of(context);可以找到它。僅在全域需要時才使用全域存盤。
您提到創建一個 store 實體來使用它。當您在無狀態小部件中初始化存盤時,當您關閉螢屏時資料將被破壞,當您重新打開它時,一切都將重新開始。當您不需要在螢屏彈出后維護狀態時,它很有用。它將基于您的用例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/421008.html
標籤:
