【问题标题】:How to put Flutter GetXController permanently in memory?如何将 Flutter GetXController 永久放入内存?
【发布时间】:2021-12-24 14:43:51
【问题描述】:

我正在使用get 包。

这是我的代码的样子,

class MyController extends GetXController{
//code to fetch data from firebase
}

class SecondScreen extends GetView<MyController>{
  @override
  Widget build(BuildContext context) {
    return GetBuilder(
      init: MyController(),
      builder: (controller) {
        return Scaffold(
        //code...
        );
      },
    );
}
}

怀疑: 我有一个按钮,我使用它从homePage 导航到secondScreen,每次点击按钮时,控制器MyController 都会再次初始化,data is fetched 也会再次初始化。但我想做一些事情,将第一次初始化的控制器永久保存在内存中。我该怎么做?

我知道,我们可以做这样的事情, Get.put(Controller(), permanent: true); 但是,在我的代码中,我没有在任何地方使用 Get.put 方法,因为当调用扩展 GetView 的类时,控制器会自动初始化。

【问题讨论】:

  • 当你来到 SecondScreen 时,它的 build 方法再次被调用并创建了一个新的 MyController() 实例。我建议在 HomeScreen 中创建 MyController 并通过构造函数将其传递给 Second Screen。在 MyController 中,您可以保留一个标志来检查已获取的数据。
  • 好的,那我把控制器永久存入内存,还是没必要?
  • 如果您不想再次获取数据,则必须将数据保存在内存中。如果您想在应用关闭后永久保存,您可以使用本地数据库。

标签: flutter dart flutter-getx


【解决方案1】:

嗯,实际上你正在输入/初始化MyController。只是不在 GetX 依赖容器内。 因为你在做:

GetBuilder(
 init: MyController(),
 .... 
)

你应该做的是:

GetBuilders(
 init: Get.put(MyController()),
 .... 
)

这样你就让 GetX 依赖管理器来管理你的依赖。并且它足够聪明,知道该路由在 backstack 上,因此不会从内存中删除。

【讨论】:

  • 现在我们可以使用 Get.put(Controller(), Permanent: true);也是,对吧?
  • 是的!但是当我学习 GetX 时,我遇到的问题与你的完全相反。我的意思是它没有调用生命周期方法。因此,控制器通常不应该是永久的/fenix,因为它们有生命周期。
猜你喜欢
  • 1970-01-01
  • 2019-10-20
  • 2012-07-19
  • 2021-06-12
  • 1970-01-01
  • 2016-11-09
  • 2021-08-23
  • 2020-11-22
  • 2015-11-01
相关资源
最近更新 更多