我试图将GetX生成器与控制器中的bool结合起来,在获取数据时显示加载旋转器,然后在获取数据之后显示数据。
将更新打印到bool显示它完成了加载并更改了变量,但是UI从未被更新以反映这一点。
控制器
class AuthController extends GetxController {
//final RxBool isLoading = true.obs;
//var isLoading = true.obs;
final Rx<bool> isLoading = Rx<bool>(true);
setLoading(bool status) {
isLoading.value = status;
print(isLoading.value);
update();
}
fetchUserData() async {
setLoading(true);
_firebaseUser.bindStream(_auth.authStateChanges());
if (_auth.currentUser != null) {
bool profileRetrieved =
await FirestoreDB().getUserProfile(_auth.currentUser!.uid).then((_) {
return true;
});
setLoading(!profileRetrieved);
}
}
}配置文件页
class ProfileCard extends StatelessWidget {
const ProfileCard({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return GetBuilder<AuthController>(
init: AuthController(),
initState: (_) => AuthController().fetchUserData(),
builder: (controller) {
if (controller.isLoading.value) {
return const Center(child: CircularProgressIndicator());
}
return Container(...);
},
);
}
}该小部件作为更广泛的UI的一部分在另一个小部件中调用。如果你需要看那个和/或其他什么东西,请告诉我。
正如您所看到的,我尝试过不同的方法来设置bool,它们似乎都不会触发构建器中UI的更改。
也许我做了一些愚蠢的事情,但我尝试了几种不同的方法,并四处寻找那些有类似问题但却无法解决问题的人。
提前谢谢。
发布于 2021-11-05 18:53:48
您正在使用isLoading作为Rx<bool>。在这种情况下,需要将GetBuilder转换为GetX。不需要打电话给update()。
GetBuilder用于非反应性、非Rx、简单的状态管理。
GetX是reactive状态管理的。
https://stackoverflow.com/questions/69827039
复制相似问题