繁体   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