Flutter GetX 为啥控制器在导航时没有自动删除

Posted

技术标签:

【中文标题】Flutter GetX 为啥控制器在导航时没有自动删除【英文标题】:Flutter GetX why are controllers not auto-deleted when navigating awayFlutter GetX 为什么控制器在导航时没有自动删除 【发布时间】:2021-09-02 20:07:12 【问题描述】:

也许我在这里误解了一些东西,但我已经按照https://pub.dev/packages/get 上的文档为我的每个页面设置了一个控制器。

例如标准页面内容:

页数:

PageIntro -> PageLogin -> PageHome etc.  

控制器:

- IntroController
- LoginController
- HomeController

我已经以相同的方式定义了我的每个页面,例如:

class PageIntro extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    final IntroController c = Get.put(IntroController(context));

    return Scaffold(
      body: _buildContent(), // you get the idea.
    );
  

我原以为当从 PageIntro 导航到 PageLogin 时,IntroController 会被删除,但事实并非如此。

我知道我可以手动删除控制器:

Get.delete<IntroController>();

但我不应该这样做。

除非我遗漏了什么/做了一些非常愚蠢的事情,否则这似乎更麻烦、更混乱,而只是让 PageIntro 扩展 StatefulWidget,然后像往常一样在 dispose 覆盖方法中做我需要做的任何事情。

请知道这方面的人能告诉我吗?

谢谢。

【问题讨论】:

根据文档,我认为您必须使用绑定。 github.com/jonataslaw/getx/blob/master/documentation/en_US/… 【参考方案1】:

在你的情况下,绑定是要走的路。

另一方面,当路由从堆栈中移除时,控制器也会被移除。在您的情况下,您可能会推送到下一个屏幕而不是替换它。

【讨论】:

以上是关于Flutter GetX 为啥控制器在导航时没有自动删除的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:当列表数据更改时,getx 控制器未更新。我如何确保添加的每个列表,GetX 控制器都知道这一点?

如何使用 GetX 包管理 Flutter Web URL 路由?

如何在 GetPage Flutter 中使用自定义转换

我在 Getx Flutter 中的 null 值错误中使用了 Null 检查运算符

Flutter GetX 状态管理不起作用

Flutter状态管理终极方案GetX第一篇——路由