1. ホーム
  2. ヒラメキ

[解決済み】Flutter: 未処理の例外です。バインディングが初期化される前にServicesBinding.defaultBinaryMessengerにアクセスされました。

2022-04-08 04:03:53

質問

この問題を解決するための方法を教えてください。

スタックトレース

[VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.
If you're running an application and need to access the binary messenger before `runApp()` has been called (for example, during plugin initialization), then you need to explicitly call the `WidgetsFlutterBinding.ensureInitialized()` first.
If you're running a test, you can call the `TestWidgetsFlutterBinding.ensureInitialized()` as the first line in your test's `main()` method to initialize the binding.
#0      defaultBinaryMessenger.<anonymous closure> (package:flutter/src/services/binary_messenger.dart:73:7)
#1      defaultBinaryMessenger (package:flutter/src/services/binary_messenger.dart:86:4)
#2      MethodChannel.binaryMessenger (package:flutter/src/services/platform_channel.dart:140:62)
#3      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:314:35)
<asynchronous suspension>
#4      MethodChannel.invokeMapMethod (package:f<…>

解決方法は?

この問題は、Flutterをアップグレードしたときに発生します。 この背景には、何らかのデータを待っている、あるいは async の中にある関数 main() .

を初期化していました。 ScopedModel 内部 main() その中で、あるデータを待っていたのです。

非常に小さな修正方法があります。 ただ WidgetsFlutterBinding.ensureInitialized() 内部 void main() を行う前に runApp() . 魅力的なように動作します!

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(Delta(
    model: ProductDataModel(),
  ));
}