下面我有一个非常简单的 GetX 项目,它基本上应该在按下按钮时异步加载一些数据。但是,我希望在获取数据时按钮从“按下我”更改为“加载”。我无法理解为什么当我更改可观察状态变量时小部件没有重建。我是否遗漏了一个基本概念?小部件显然在异步方法 updateDetails 完成后重新绘制,但当我在方法内更改“状态”时不会重新绘制……?非常感谢。
void main() async {
runApp(TestApp());
}
class TestApp extends StatelessWidget {
const TestApp({super.key});
@override
Widget build(BuildContext context) {
return GetMaterialApp(
theme: appTheme,
home: TestWidget(),
);
}
}
class TestController extends GetxController {
var status = 'PRESS ME'.obs;
updateDetails() async {
print('Loading');
status('LOADING');
sleep(1.seconds);
print('Finished');
status('PRESS ME');
}
}
class TestWidget extends StatelessWidget {
TestWidget({super.key});
final TestController controller = Get.put(TestController());
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: TextButton(
onPressed: () {
controller.updateDetails();
},
child: Obx(() {
print('Redrawing text');
return Text(controller.status.value);
}),
),
),
);
}
}