Flutter 位置:^3.2.1,无法销毁活动

Flutter 位置:^3.2.1,无法销毁活动,flutter,Flutter,更新1 找到原因,问题出在位置:^3.2.1,若要重新创建问题,只需从Android Studio创建一个颤振项目,在pubspec.yaml或配置文件中添加此依赖项。只需运行应用程序,然后按“上一步”按钮,检查您的logcat,您将得到如下异常: E/AndroidRuntime(21857): java.lang.RuntimeException: Unable to destroy activity {com.guna.flutter_app_test/com.guna.flutter_a

更新1

找到原因,问题出在
位置:^3.2.1
,若要重新创建问题,只需从Android Studio创建一个颤振项目,在
pubspec.yaml
或配置文件中添加此依赖项。只需运行应用程序,然后按“上一步”按钮,检查您的
logcat
,您将得到如下异常:

E/AndroidRuntime(21857): java.lang.RuntimeException: Unable to destroy activity {com.guna.flutter_app_test/com.guna.flutter_app_test.MainActivity}: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter activity
E/AndroidRuntime(21857):    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5111)
E/AndroidRuntime(21857):    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:5140)
E/AndroidRuntime(21857):    at android.app.servertransaction.DestroyActivityItem.execute(DestroyActivityItem.java:44)
E/AndroidRuntime(21857):    at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
E/AndroidRuntime(21857):    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
E/AndroidRuntime(21857):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
E/AndroidRuntime(21857):    at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime(21857):    at android.os.Looper.loop(Looper.java:223)
E/AndroidRuntime(21857):    at android.app.ActivityThread.main(ActivityThread.java:7656)
E/AndroidRuntime(21857):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(21857):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
E/AndroidRuntime(21857):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
E/AndroidRuntime(21857): Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter activity
E/AndroidRuntime(21857):    at com.lyokone.location.FlutterLocationService.setActivity(Unknown Source:2)
E/AndroidRuntime(21857):    at com.lyokone.location.LocationPlugin.deinitialize(LocationPlugin.java:121)
E/AndroidRuntime(21857):    at com.lyokone.location.LocationPlugin.detachActivity(LocationPlugin.java:56)
E/AndroidRuntime(21857):    at com.lyokone.location.LocationPlugin.onDetachedFromActivity(LocationPlugin.java:69)
E/AndroidRuntime(21857):    at io.flutter.embedding.engine.FlutterEnginePluginRegistry.detachFromActivity(FlutterEnginePluginRegistry.java:346)
E/AndroidRuntime(21857):    at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onDetach(FlutterActivityAndFragmentDelegate.java:512)
E/AndroidRuntime(21857):    at io.flutter.embedding.android.FlutterActivity.onDestroy(FlutterActivity.java:577)
E/AndroidRuntime(21857):    at android.app.Activity.performDestroy(Activity.java:8245)
E/AndroidRuntime(21857):    at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1344)
E/AndroidRuntime(21857):    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:5096)
旧帖子

我有两个屏幕,分别是
Login
Dashboard

我想在按下仪表板上的后退键时关闭应用程序,而无需进入
登录

另外,在下次应用程序应该转到仪表板时打开应用程序时,我没有登录,而是使用共享首选项管理此登录状态

但是我在我的
仪表板中使用了
WillPopScope
,我使用了
SystemNavigator.pop()
跳过登录并关闭应用程序。这会导致异常崩溃
java.lang.RuntimeException:无法销毁活动{com.guna.jnstores/com.guna.jnstores.MainActivity}:java.lang.NullPointerException:指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkNotNullParameter,参数activity


我试过使用
pushNamed和removeUntil
,这并没有从堆栈中删除
Login
,我也试过使用
pushReplacementNamed
pushAndRemoveUntil
从堆栈中删除
Login
,但我得到了相同的例外情况。

我假设您正在开发一个颤振应用程序,而不是一个颤振只是一个模块的本地模型。这可以很好地解释您所遇到的本机错误:因为flatter应用程序只有一个活动--
MainActivity
,“previous”活动必须为空。不过,如果我错了,请告诉我

您不应该在专门的颤振应用程序中使用
SystemNavigator.pop()
;该方法将用于“驻留”在本机(即非颤振)应用程序中的颤振实例


相反,当从登录导航到仪表板时,请使用方法(或);这样,您就不需要
WillPopScope
-按硬件后退按钮将关闭应用程序。

当您从登录屏幕按仪表板时,使用
Navigator.pushReplacement
,它将从堆栈/列表中删除当前屏幕,并将仪表板添加为当前屏幕,如果这不起作用,您需要向我们展示您是如何处理路线的,以及如何处理路线navigator@Yadu,我已经更新了我的帖子。@Gunaseelan你能解决这个问题吗?如果
routePredicate
是这样的:
(Route-Route)=>false)
,那么,
pushname和remove-until确实会删除以前的所有路由。无论如何,在您的用例中,
pushReplacementNamed
也可以。你得到同样的异常是什么意思?您根本不应该调用
SystemNavigator.pop()
。只需删除您的
WillPopScope
,如果登录名已从堆栈中删除,则在仪表板上按后退按钮将按预期退出应用程序。添加+1,因为它满足旧帖子的要求。