Flutter getx问题

1、在build中使用Get.put(),然后在页面controller的onReady中进行页面跳转,某些时候页面会执行多次

[GETX] Instance "GetMaterialController" has been initialized
[GETX] GOING TO ROUTE /splash
[GETX] Instance "SplashController" has been created
[GETX] Instance "SplashController" has been initialized
[GETX] GOING TO ROUTE /home
[GETX] REMOVING ROUTE /splash
[GETX] Instance "BottomNavigationController" has been created
[GETX] Instance "BottomNavigationController" has been initialized
[GETX] Instance "DashboardController" has been created
[GETX] Instance "DashboardController" has been initialized
[GETX] Instance "SplashController" has been created
[GETX] Instance "SplashController" has been initialized

解决:

通常情况下,使用Get.put来注入控制器是在build方法中完成的,因为Get.put通常用于在控件树中创建并提供控制器的实例。然而,在某些情况下,如果不小心将Get.put放在了build方法中,并且在控制器的onReady方法中进行了页面跳转,可能会导致问题,因为页面跳转通常会导致build方法重新调用,从而再次触发控制器的创建和onReady方法的调用,这可能会导致多次跳转的情况。

为了解决这个问题,您可以在以下两种方式中选择一种:

1、将Get.put的调用移动到initState中:将Get.put(SplashController())移动到SplashPage的initState方法中。这样,控制器将在页面第一次创建时进行初始化,并且不会在页面重建时再次创建。

2、使用init参数:在GetBuilder或Get.create中使用init参数初始化控制器,以确保只在首次创建控件时创建控制器。例如:GetBuilder<SplashController>(init: SplashController())。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值