Flutter GETX:如何在每次导航到其他页面/路由时删除Initialized Controller



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

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

我只想在每次弹出页面时删除Initialized控制器(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;
}
}

提前感谢!

您可以使用:

Get.delete<FetchData>();

当我注销Get.off、Get.offUntil、Get.off AndToNamed方法时,不会从内存中删除我的GetXController。

然后我尝试了下面的代码,一切都很好。

Get.offUntil(GetPageRoute(page: () => Login()), ModalRoute.withName('toNewLogin') );

Timer(Duration(milliseconds: 300), ()=>Get.delete<MainPageController>());

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();

不能将方法fetchData()放在super.onInit()上。当您使用Get.offAllName()Get.offAndToName()Get.offAll()等时…方法fetchData()仍保留在内存中=>无法disposeclose

修复:

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

您可以使用

Get.deleteAll();

这将从内存中删除所有已初始化控制器实例。

您可以使用

Get.offAndToNamed(url)

使用Get.offAllNamed。它将删除所有控制器,只创建最终目的地路由控制器。测试得到:^4.3.8

Get.offAllNamed("your final route");

如果您创建了类似Get.put(FetchData())的,那么简单的答案是Get.delete<FetchData>();

但是,如果你已经创建了类似Get.put(FetchData(), permanent: true);LazyPut的内容,你可以通过强制Get.delete<FetchData>(force: true);来删除它

我希望这对你有帮助。

相关内容

最新更新