在Get
状态管理库中,GetxController
是一个用于管理状态和逻辑的基类。它具有一系列的生命周期方法,用于在不同的阶段执行相关的操作。下面是GetxController
的生命周期方法及其执行顺序:
onInit()
: 这个方法在GetxController
创建并加入到管理器时调用。你可以在这里进行一些初始化操作,如初始化变量、订阅流等。onReady()
: 这个方法在GetxController
被异步加载后调用。你可以在这里执行一些异步操作,如网络请求、数据库读取等。需要注意的是,这个方法只会在第一次加载时调用,后续页面刷新不会再触发。onClose()
: 这个方法在GetxController
被永久关闭时调用,一般是页面销毁时。你可以在这里进行资源释放、取消订阅等清理操作,以防止内存泄漏。
除了生命周期方法,GetxController
还提供了一些其他常用的方法和属性,例如:
update()
: 用于通知管理器状态变化,更新UI。ever()
: 用于监听某个变量或Rx值的变化,类似于Stream
中的listen
方法。once()
: 监听某个变量或Rx值的第一次变化,之后不再监听。debounce()
: 在指定时间间隔内连续多次变化时,只执行最后一次变化。interval()
: 在指定时间间隔内连续多次变化时,每隔一段时间执行一次。
使用GetxController
的示例代码:
import 'package:get/get.dart';class MyController extends GetxController {var count = 0;@overridevoid onInit() {print('onInit called');super.onInit();}@overridevoid onReady() {print('onReady called');super.onReady();}@overridevoid onClose() {print('onClose called');super.onClose();}void increment() {count++;update(); // 通知状态变化,更新UI}
}
在页面中使用控制器:
class MyPage extends StatelessWidget {final MyController myController = Get.put(MyController());@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('My Page'),),body: Center(child: Obx(() => Text('Count: ${myController.count}')),),floatingActionButton: FloatingActionButton(onPressed: () => myController.increment(),child: Icon(Icons.add),),);}
}