簡體   English   中英

為什么要在 Mobx Flutter 中使用 Provider?

[英]Why should I use Provider in Mobx Flutter?

Flutter 的官方 Mobx 文檔說,為了正確傳輸數據,您必須使用 Provider 並參考上下文來檢索數據。

但是為什么我不能在應用的根目錄調用 Mobx class 並訪問全局變量來獲取數據呢?

CbtStore cbt = CbtStore();

void main() async {
runApp(const MyApp());
}

我為什么要這樣做?

void main() async {
runApp(MultiProvider(
         providers: [
           Provider<CbtStore>(create: (_) => CbtStore()),
           ],
      child: MyApp()));
}

在這種情況下,我如何在小部件方法中引用 Mobx,例如,如果我想在 initState 方法中調用 Mobx class 中的操作? 現在我按以下方式進行。 但是在 initState 中使用 Provider 時沒有上下文。

@override
  void initState() {
    cbt.init();
    super.initState();
  }

你應該做最適合你的用例的事情。

提供者之所以有用,是因為可以在需要的地方提供它們。 這可能位於應用程序根目錄中,也可能位於小部件樹的更深處。

提供程序的另一個優點是您可以擁有一個通知偵聽器的提供程序。 在這種情況下,小部件將自動重建,如果您已存儲並需要在應用程序中的任何位置更新數據,這將非常有用。

initState確實不允許直接使用提供程序。 有3個解決方案:

  1. 沒有提供者列表 (Provider.of(context, listen: false); 這允許您使用方法,但不能監聽更改。
  2. 在構建方法中使用提供者,使用消費者。

我絕不是 flutter 方面的專家,但這正是我迄今為止所經歷的。

Provider 僅用於 mobx 的依賴注入。 它不用於 state 更改。

現在,當您使用 mobx 時,在大多數情況下不需要有狀態小部件,因為您正在處理 mobx 存儲中的 state 更改,如果 state 有任何更改,我們使用Observer來更改 ui。

如果想要用屏幕初始化一些東西而不是更喜歡使用 mobx class 的構造函數而不是 initState。

例如,

class MyStore = _MyStore with _$MyStore;

abstract class _MyStore with Store {

_MyStore(){
  getData();
}
}

現在不要為您的所有商店使用全球供應商。 僅在需要時初始化提供程序。 因此,當您推送路由時,請使用提供程序將其包裝起來,以便Provider.of(context); 可以找到它。 僅在全局需要時才使用全局存儲。

您提到創建一個 store 實例來使用它。 當您在無狀態小部件中初始化存儲時,當您關閉屏幕時數據將被破壞,當您重新打開它時,一切都將重新開始。 當您不需要在屏幕彈出后維護 state 時,它很有用。 它將基於您的用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM