Search code examples
flutterdartexception

Flutter: Unhandled Exception: ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized


Any solution to solve this problem?

Stacktrace:

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

Solution

  • This problem is introduced when you upgrade Flutter. The reason behind this is you are waiting for some data or running an async function inside main().

    I was initialising ScopedModel inside main() and inside that I was awaiting for some data.

    There is a very small fix. Just run WidgetsFlutterBinding.ensureInitialized() inside void main() , before you do runApp(). Works like a charm!!

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