Abaixo, tenho um projeto GetX muito simples que deve basicamente carregar alguns dados ao pressionar o botão de forma assíncrona. No entanto, gostaria que o botão mudasse de 'PRESS ME' para 'LOADING' enquanto os dados são buscados. Não consigo entender por que o widget não é reconstruído quando altero a variável de status observável. Estou esquecendo de um conceito fundamental aqui? O widget claramente é redesenhado após o método async updateDetails terminar, mas não quando altero 'status' dentro do método...? Muito obrigado.
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);
}),
),
),
);
}
}