Seeing the following crash reported multiple times in Sentry:
java.lang.RuntimeException: Methods marked with @UiThread must be executed on the main thread. Current thread: DefaultDispatcher-worker-1
at io.flutter.embedding.engine.FlutterJNI.ensureRunningOnMainThread(FlutterJNI.java:37)
at io.flutter.embedding.engine.FlutterJNI.dispatchPlatformMessage(FlutterJNI.java:1)
at mb.c.d(DartMessenger.java:79)
at mb.a$c.c(DartExecutor.java:4)
at mb.a.c(DartExecutor.java:3)
at yb.d$c$a.a(EventChannel.java:50)
at y1.j1.e(CameraPermissions.kt:166)
at io.flutter.embedding.engine.c$c.i(FlutterEngineConnectionRegistry.java:21)
at io.flutter.embedding.engine.c.e(FlutterEngineConnectionRegistry.java:14)
at io.flutter.embedding.android.f.y(FlutterActivityAndFragmentDelegate.java:60)
at io.flutter.embedding.android.e.onRequestPermissionsResult(FlutterActivity.java:11)
at android.app.Activity.requestPermissions(Activity.java:5633)
at androidx.core.app.b$b.b(ActivityCompat.java:1)
at androidx.core.app.b.r(ActivityCompat.java:140)
at y1.j1.g(CameraPermissions.kt:100)
at y1.j1$b.invokeSuspend(CameraPermissions.kt:48)
at kotlin.coroutines.jvm.internal.a.resumeWith(ContinuationImpl.kt:12)
at nd.r0.run(DispatchedTask.kt:124)
at sd.o$a.run(LimitedDispatcher.kt:4)
at ud.k.run(Tasks.kt:3)
at ud.a.z(CoroutineScheduler.kt:1)
at ud.a$c.d(CoroutineScheduler.kt:15)
at ud.a$c.p(CoroutineScheduler.kt:29)
at ud.a$c.run(CoroutineScheduler.kt:1)
After some investigation, it turned out that after requesting the not-granted permissions, the callback function is invoked from the IO thread, which then leads to the java.lang.RuntimeException: Methods marked with @UiThread must be executed on the main thread. In order to fix it, we must dispatch the callback invocation to the main thread, similarily as in the case of requesting audio permission.
Closes #450
Checklist
Before creating any Pull Request, confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]).
Description
Seeing the following crash reported multiple times in Sentry:
After some investigation, it turned out that after requesting the not-granted permissions, the callback function is invoked from the
IO
thread, which then leads to thejava.lang.RuntimeException: Methods marked with @UiThread must be executed on the main thread
. In order to fix it, we must dispatch thecallback
invocation to the main thread, similarily as in the case of requesting audio permission.Closes #450
Checklist
Before creating any Pull Request, confirm that it meets all requirements listed below by checking the relevant checkboxes (
[x]
).flutter analyze
without any issues.Breaking Change
If your feature break something, please detail it