Flutter Getx 构建器未更新 UI
Flutter Getx builder not updating UI
我正在尝试将 GetX Builder 与控制器中的 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 的一部分,该小部件在另一个内部被调用。如果您还需要查看 and/or 其他内容,请告诉我。
如您所见,我尝试了不同的方法来设置布尔值,其中 none 似乎触发了构建器中 UI 的更改。
可能做了一些愚蠢的事情,但我尝试了几种不同的方法并四处寻找有类似问题但无法解决的人。
提前致谢。
您正在使用 isLoading
作为 Rx<bool>
。在这种情况下,您需要将 GetBuilder
更改为 GetX
。无需调用 update()
.
GetBuilder
用于非反应性、非 Rx、简单的状态管理
GetX
用于反应式,Rx 状态管理
我正在尝试将 GetX Builder 与控制器中的 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 的一部分,该小部件在另一个内部被调用。如果您还需要查看 and/or 其他内容,请告诉我。
如您所见,我尝试了不同的方法来设置布尔值,其中 none 似乎触发了构建器中 UI 的更改。
可能做了一些愚蠢的事情,但我尝试了几种不同的方法并四处寻找有类似问题但无法解决的人。
提前致谢。
您正在使用 isLoading
作为 Rx<bool>
。在这种情况下,您需要将 GetBuilder
更改为 GetX
。无需调用 update()
.
GetBuilder
用于非反应性、非 Rx、简单的状态管理GetX
用于反应式,Rx 状态管理