![](/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.