在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;
@override
void onInit() {
print('onInit called');
super.onInit();
}
@override
void onReady() {
print('onReady called');
super.onReady();
}
@override
void onClose() {
print('onClose called');
super.onClose();
}
void increment() {
count++;
update(); // 通知状态变化,更新UI
}
}
在页面中使用控制器:
class MyPage extends StatelessWidget {
final MyController myController = Get.put(MyController());
@override
Widget 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),
),
);
}
}