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<…>
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(),
));
}
This generally happens if you are awaiting on main()
method. So, the solution would be:
void main() {
// add this, and it should be the first line in main method
WidgetsFlutterBinding.ensureInitialized();
// rest of your app code
runApp(
MaterialApp(...),
);
}