281 votes

Flutter : Exception non gérée : ServicesBinding.defaultBinaryMessenger a été accédé avant l'initialisation de la liaison

Une solution pour résoudre ce problème ?

Trace de la pile:

 [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<…>

601voto

Debasmita Sarkar Points 5089

Ce problème est introduit lorsque vous mettez à niveau Flutter. La raison en est que vous attendez des données ou exécutez une fonction async dans main() .

J'étais en train d'initialiser ScopedModel intérieur de main() et à l'intérieur j'attendais des données.

Il y a une toute petite correction. Exécutez simplement WidgetsFlutterBinding.ensureInitialized() dans void main() , avant de faire runApp() . Fonctionne comme un charme !!

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

106voto

CopsOnRoad Points 4705

Cela se produit généralement si vous attendez la méthode main() La solution serait donc :

 void main() {
  // add this, and it should be the first line in main method
  WidgetsFlutterBinding.ensureInitialized(); 

  // rest of your app code
  runApp(
    MaterialApp(...),
  );
}

18voto

Saad Ahmed Points 71

ajoutez simplement cette ligne dans main.dart

 WidgetsFlutterBinding.ensureInitialized(); 

ton code ressemble

 void main() {
  WidgetsFlutterBinding.ensureInitialized();
  return runApp(MultiProvider(
    providers: [
      ChangeNotifierProvider.value(
        value: AppState(),
      )
    ],
    child: MyApp(),
  ));
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X