![](/img/trans.png)
[英]WidgetsFlutterBinding.ensureInitialized or Firebase initialize app is not called on Flutter web
[英]What is WidgetsFlutterBinding and how it is being used in Flutter app?
您必须以这种方式使用它:
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.ensureInitialized()
Dart Layer
和Flutter 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()
支持各种绑定,例如GestureBinding
、 SchedulerBinding
、 ServicesBinding
、 PaintingBinding
、 SemanticsBinding
、 RendererBinding
、 WidgetsBinding
ServicesBinding
侦听平台消息并将它们定向到传入消息的处理程序 (BinaryMessenger)。
PaintingBinding
负责绑定到绘画库。
RenderBinding
将渲染树绑定到 Flutter 引擎。
WidgetBinding
将小部件树绑定到 Flutter 引擎。
SchedulerBinding
是用于运行即时任务的调度程序。
SemanticsBinding
绑定了语义层和 Flutter 引擎。
GestureBinding
是手势子系统的绑定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.