簡體   English   中英

什么是 WidgetsFlutterBinding 以及它是如何在 Flutter 應用程序中使用的?

[英]What is WidgetsFlutterBinding and how it is being used in Flutter app?

我們何時以及如何使用它? 這個怎么運作?

WidgetsFlutterBinding

您必須以這種方式使用它:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

https://flutter.dev/docs/resources/architectural-overview#architectural-layers

WidgetFlutterBinding 用於與 Flutter 引擎交互。 Firebase.initializeApp() 需要調用原生代碼來初始化 Firebase,由於插件需要使用平台通道來調用原生代碼,這是異步完成的,所以你必須調用 ensureInitialized() 來確保你有一個實例小部件綁定。

https 回答://stackoverflow.com/users/7015400/peter-haddad

答案鏈接https://stackoverflow.com/a/63873689

WidgetsBinding.ensureInitialized() Dart LayerFlutter Engine之間的初始化通信。

如果我們需要在調用 [runApp] 之前初始化綁定,我們需要調用此方法。 Flutter 不能直接與 flutter 引擎交互,除非建立綁定。

示例 1:顯示 flutter 和本機代碼之間的 Firebase 平台初始化, Firestore class 在內部執行。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();   
  await Firestore.initializeApp();
  runApp(
    ...
  )
}

或者

示例 2:在應用程序啟動之前顯示設備方向變化,為此我們還需要建立綁定連接。

 void main() async {
      WidgetsFlutterBinding.ensureInitialized();   
      await SystemChrome.setPreferredOrientations([
          DeviceOrientation.portraitUp,
          DeviceOrientation.portraitDown
      ]);
      runApp(
        ...
      )
}

在內部, WidgetsBinding.ensureInitialized()支持各種綁定,例如GestureBindingSchedulerBindingServicesBindingPaintingBindingSemanticsBindingRendererBindingWidgetsBinding

  1. ServicesBinding偵聽平台消息並將它們定向到傳入消息的處理程序 (BinaryMessenger)。

  2. PaintingBinding負責綁定到繪畫庫。

  3. RenderBinding將渲染樹綁定到 Flutter 引擎。

  4. WidgetBinding將小部件樹綁定到 Flutter 引擎。

  5. SchedulerBinding是用於運行即時任務的調度程序。

  6. SemanticsBinding綁定了語義層和 Flutter 引擎。

  7. GestureBinding是手勢子系統的綁定。

暫無
暫無

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

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