首页 > 解决方案 > Flutter GETX:每次我们导航到其他页面/路由时如何删除初始化控制器

问题描述

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

每次我想弹出页面时, 我只使用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;
    }
}

提前致谢!

标签: flutterdartflutter-getx

解决方案


我使用没有 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>());

推荐阅读