在 GetX 中,使用 Get.toNamed() 在屏幕 A 和 B 之间导航时,从屏幕 B 返回屏幕 A 时不会触发 init()。如何修复?

问题描述 投票:0回答:1

在 GetX 中,当您使用 Get.toNamed() 在两个屏幕之间导航时,您可能会遇到从屏幕 B 返回时未触发屏幕 A 的 init() 方法的问题。以下是问题的细分和解决方案:

场景: 屏幕 A → 屏幕 B:您可以使用 Get.toNamed() 从屏幕 A 导航到屏幕 B,并在必要时传递参数。这很好用。 屏幕 B → 屏幕 A:完成屏幕 B 后,您再次使用 Get.toNamed() 返回到屏幕 A,可能会带有一些参数。但是,当屏幕 A 再次显示时,其 init() 方法(或等效方法,例如 StatefulWidget 中的controller.onInit() 或 initState())不会被调用。

Get.offNamed('/screenA', arguments: {...});

class ScreenAController extends GetxController {
@override
 void onReady() {
  super.onReady();
  // Re-fetch or refresh data here
 }
}

我们尝试了上述场景

flutter flutter-getx flutter-navigation
1个回答
0
投票

我认为你的问题有很多原因和很多解决方案

如果您正在使用

GetBuilder
,您可以尝试将
global
放到
false
以防止重复屏幕

我不知道你为什么使用

Get.toNamed(...)
来弹出你的屏幕,你可以像这样使用
Get.pop()
Get.close(1)
然后
controller.onInit()
如果您想将值返回到屏幕 A,您可以使用回调发送
PopScope

© www.soinside.com 2019 - 2024. All rights reserved.