新手在这里。我如何重新运行onInit()每次我推回我的屏幕?onInit()只运行一次,但导航回上一个屏幕不会删除已初始化的控制器(FetchData)嗯..
我只在每次要弹出页面时使用Get.back(),在每次要在命名路径上导航时使用Get.toNamed()
我唯一希望发生的事情是删除初始化控制器(FetchData)每次我弹出页面,但我不知道如何做到这一点。
我的Getx控制器
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;
}
}
先谢了!
8条答案
按热度按时间9rnv2umw1#
当我注销时,Get.off、Get.offUntil、Get.offAndToNamed方法不会从内存中删除我的GetXController。
然后我试了下面的代码,一切都很好。
2admgd592#
您可以用途:
7rfyedvj3#
不能将方法
fetchData()
放在super.onInit()
上。当您使用Get.offAllName()
、Get.offAndToName()
、Get.offAll()
等时...方法fetchData()
仍保留在内存中=〉不能将它放在dispose
或close
上。固定:
cidc1ykv4#
您可以使用
m4pnthwp5#
onInit只被调用一次。你可以使用另一个方法在从另一个屏幕返回时运行,例如,当调用新屏幕时,你可以等待它关闭,然后再次调用你的方法:
如果你只想在某些情况下调用这个方法,你可以传回一个bool来询问是否需要reload:
屏幕上显示:
ncecgwcz6#
您可以使用
这将从内存中删除所有*******初始化的控制器示例。
roejwanj7#
使用Get.offAllNamed。它将删除所有控制器,只创建最终目的地路由控制器。第四章第三节第八节
tsm1rwdh8#
简单的答案是
Get.delete<FetchData>();
,如果您创建了类似Get.put(FetchData())
的内容但是,如果您创建了类似
Get.put(FetchData(), permanent: true);
或由LazyPut
创建的内容,则可以通过强制Get.delete<FetchData>(force: true);
删除该内容希望这对你有帮助。