在 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
}
}
我们尝试了上述场景
我认为你的问题有很多原因和很多解决方案
如果您正在使用
GetBuilder
,您可以尝试将global
放到false
以防止重复屏幕
我不知道你为什么使用
Get.toNamed(...)
来弹出你的屏幕,你可以像这样使用
Get.pop()
或 Get.close(1)
然后 controller.onInit()
如果您想将值返回到屏幕 A,您可以使用回调发送 PopScope