Flutter GetX - 如何管理控制器的删除?

4
我有一个Flutter应用,其中使用了GetX Controllers。该应用具有6个屏幕,每个屏幕都有自己的GetxController。
第1和第2个屏幕用于登录系统,而第3至第6个屏幕用于应用程序内容。
用户在登录后可以在第3-4-5屏幕之间前进和后退,但当他到达第6屏幕时,只能返回到第3屏幕,所有先前的堆栈必须被删除(因此他无法返回)。
第1个问题:如果我从第6个屏幕执行Get.offAll(()=> const Screen3()),则Screen3的控制器将被删除,什么也不起作用了。我通过以下方式解决了这个问题(不知道这个词是否存在!: D):
Get.put(Controller3(),permanent:true)
但是,这里出现了
第2个问题:如果用户按下注销按钮(仅在第3个屏幕中存在),这次我需要删除Controller3。这时,调用Get.offAll不会删除控制器,也不会调用Get.delete (),因为它说:
“Controller3”已被标记为永久性,SmartManagement无权删除它。
我陷入了困境,真的不知道该怎么办。
2个回答

8

就像你所说的那样,使用Getx时,让我们像这样将GetxController变成一个永久性的控制器:

Get.put<Controller3>.put(Controller3(), permanent: true);.

通常情况下,您无法使用以下方式正常删除它:

Get.delete<Controller3>();

但是你有删除被标记为permanent的控制器的选项,通过使用force属性强制删除它,如下所示:
Get.delete<Controller3>(force: true);

force命令可以删除即使被标记为永久保留的实例。


我最终是这样做的...虽然我不知道为什么绑定没有起作用... - Ale TheFe
1
完美的解决方案,我一直认为这是GET包的错误,因为我并没有手动删除它,但通过这样做,我得到了答案和解决方案,谢谢。 - Chirag Mevada

2

第一个问题:如果我在屏幕6中执行Get.offAll(() => const Screen3()),那么屏幕3的控制器将被删除,什么都不起作用了。

我没有理解引用部分。当你从6导航到3时,绑定机制应该再次生成屏幕3的控制器。

顺便说一下,你可以在任何地方使用with手动创建它。

 var controller = Get.put(SomeController());
 controller.dispose();

这正是我想的,但出于某种原因它不起作用。我要进行深入调查! - Ale TheFe
如果您想重新初始化之前已使用过的特定控制器,可以使用“get.create”。 - Hyungju Moon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接