Flutter 位置:^3.2.1,无法销毁活动
更新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
位置:^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,因为它满足旧帖子的要求。