【问题标题】:Flutter GETX: How to remove Initialized Controller every time we navigate to other page/routesFlutter GETX:每次我们导航到其他页面/路由时如何删除初始化控制器
【发布时间】:2021-07-18 21:19:21
【问题描述】:

这里是新手。每次推回屏幕时如何重新运行 onInit()? onInit() 只运行一次,但导航回上一个屏幕不会删除已初始化的控制器 (FetchData) hmmm..

我只在每次想要弹出页面时使用 Get.back(),并且 Get.toNamed() 每次我想在命名路线上导航时

我唯一想做的就是在每次弹出页面时删除初始化控制器 (FetchData) 但我不知道该怎么做。

我的GetxController

class FetchData extends GetxController {
    RxList items = [].obs;
    @override
    onInit() {
      fetchData();
      super.onInit();
    }
    
    Future<void> fetchData() async {
     var result = await http.get("api.url");
     items.value = result.body;
    }
}

提前致谢!

【问题讨论】:

  • 没有提供足够的信息。您还需要提供绑定并查看 sn-ps 以获得适当的帮助

标签: flutter dart flutter-getx


【解决方案1】:

我使用没有 nullsafety 的 getx 版本 3.25.6,当我注销 Get.off、Get.offUntil、Get.offAndToNamed 方法时,不会从内存中删除我的 GetXController。

然后我尝试了下面的代码,一切正常。

 Get.offUntil(GetPageRoute(page: () => Login()), ModalRoute.withName('toNewLogin') );
   
     Timer(Duration(milliseconds: 300), ()=>Get.delete<MainPageController>());

【讨论】:

    【解决方案2】:

    onInit 只被调用一次。从另一个屏幕返回时,您可以使用其他方法运行,例如,当调用新屏幕时,您可以等待它关闭,然后再次调用您的方法:

    //go to new screen
    await Get.toNamed(screenName);
    //after run my method
    controller.fectchData();
    

    如果您只想在某些情况下调用该方法,您可以回传一个 bool 来询问是否需要重新加载:

    Get.back(result: true);
    

    在调用的屏幕中:

    //go to new screen
    final result = await Get.toNamed(screenName);
        
    if(result != null && result == true)//after run only if needed
    controller.fectchData();
    

    【讨论】:

      【解决方案3】:

      你可以使用

      Get.offAndToNamed(url)
      

      【讨论】:

      • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
      【解决方案4】:

      使用 Get.offAllNamed。它将删除所有控制器并仅创建最终目标路由控制器。用 get 测试:^4.3.8

              Get.offAllNamed("your final route");
      

      【讨论】:

        【解决方案5】:

        你可以使用:

        Get.delete<FetchData>();
        

        【讨论】:

          猜你喜欢
          • 2022-01-06
          • 2017-01-01
          • 2023-03-16
          • 1970-01-01
          • 2016-10-22
          • 2018-11-17
          • 1970-01-01
          • 2023-01-07
          • 2023-01-03
          相关资源
          最近更新 更多