【问题标题】:What is WidgetsFlutterBinding and how it is being used in Flutter app?什么是 WidgetsFlutterBinding 以及它是如何在 Flutter 应用中使用的?
【发布时间】:2020-08-24 09:54:35
【问题描述】:

我们何时以及如何使用它? 它是如何工作的?

WidgetsFlutterBinding

【问题讨论】:

    标签: flutter


    【解决方案1】:

    你必须以这种方式使用它:

    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() 以确保您有一个实例WidgetsBinding。

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

    回复链接https://stackoverflow.com/a/63873689

    【讨论】:

      【解决方案2】:

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

      如果我们需要在调用 [runApp] 之前初始化绑定,我们需要调用此方法。在绑定建立之前,Flutter 不能直接与 Flutter 引擎交互。

      示例 1: 展示了 Flutter 和本机代码之间的 Firebase 平台初始化,Firestore 类在内部进行。

      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 是手势子系统的绑定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-19
        • 1970-01-01
        • 1970-01-01
        • 2013-09-15
        • 1970-01-01
        • 2022-01-10
        • 2015-03-13
        • 2013-10-25
        相关资源
        最近更新 更多