Jakieś rozwiązanie tego problemu?
Ślad stosu:
[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<…>
Odpowiedzi:
Ten problem pojawia się po ulepszeniu Fluttera. Powodem tego jest to, że czekasz na jakieś dane lub uruchamiasz
async
funkcję w środkumain()
.Inicjowałem się
ScopedModel
wewnątrzmain()
i wewnątrz, czekając na jakieś dane.Jest bardzo mała poprawka. Po prostu wbiegnij do
WidgetsFlutterBinding.ensureInitialized()
środkavoid main()
, zanim to zrobiszrunApp()
. Działa jak marzenie!!źródło
main()
metody?Zwykle dzieje się tak, jeśli czekasz na
main()
metodę. Tak więc rozwiązaniem byłoby:źródło
Nie jestem pewien, czy mam poprawną odpowiedź, ale mam ten sam błąd po ostatniej aktualizacji trzepotania i udało mi się go uruchomić, więc dzielę się swoimi odkryciami.
Wygląda na to, że błąd może być spowodowany niedawną istotną zmianą: https://groups.google.com/forum/#!msg/flutter-announce/sHAL2fBtJ1Y/mGjrKH3dEwAJ .
W rezultacie musimy ręcznie zmienić kod w następujący sposób:
Alternatywnie, jeśli jesteś nowicjuszem, takim jak ja, i masz trudności ze zrozumieniem powyższych i # 38464 , możesz tymczasowo uniknąć tego problemu, przełączając się na kanał beta. Po prostu uruchom "flutter channel beta". Przełomowa zmiana nie jest jeszcze w wersji beta, więc po przejściu na kanał beta nie pojawi się ten błąd przynajmniej na razie.
źródło
po prostu dodaj tę linię w main.dart
wygląda na to, że twój kod
źródło
w moim przypadku podczas korzystania z orientacji,
Chodzi o to, aby dodać WidgetsFlutterBinding.ensureInitialized () w pierwszym wierszu klasy głównej
źródło
Możesz napotkać to, jeśli próbujesz wykonać natywny kod wtyczki w izolacji. Dokumentacja isolate_handler tutaj dobrze to wyjaśnia:
Problem polega na tym, że izolaty zapewnią wzrost wydajności tylko w przypadku kosztownego obliczeniowo kodu do rzutek. Kod platformy wtyczki ponownie użyje wątku głównego (UI).
Wywołanie
WidgetsFlutterBinding.ensureInitialized
wewnątrz izolacji również zakończy się niepowodzeniem z powodu braku bazowego silnika interfejsu użytkownika w izolacie.źródło
Zanim miałem wersję
v1.12.13+hotfix.5
, przełączyłem się na wersjęv1.14.4
i zadziałało.Błąd mówi, że powinieneś dodać
WidgetsFlutterBinding.ensureInitialized();
, ale ponieważ to nie zadziałało dla mnie, przełączyłem się na inną wersję. Jedną rzeczą, o której należy pamiętać, jest to, że nadal musisz dodaćWidgetsFlutterBinding.ensureInitialized();
jako pierwszą linię w swoim main!źródło
Rozwiązanie: Wywołaj
WidgetsFlutterBinding.ensureInitialized();
przed wywołaniem funkcji asynchronicznych.źródło
Odpowiedź zamieszczona w numerze 47033 na GitHub rozwiązała mój problem.
kwestia: https://github.com/flutter/flutter/issues/47033
rozwiązanie, które zadziałało dla mnie: https://github.com/flutter/flutter/issues/47033#issuecomment-571936089
Myślę, że jest to problem związany z poprawką Flutter w wersji 1.12.13 +, być może obniżenie wersji fluttera również może pomóc.
źródło