flutter - Flutter Getx builder不更新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 的一部分在另一个内被调用。让我知道您是否需要查看该内容和/或其他任何内容。
如您所见,我尝试了不同的方式来设置布尔值,但似乎都没有触发构建器中 UI 的更改。
可能做了一些愚蠢的事情,但我尝试了几种不同的方法,并四处寻找有类似问题但无法破解的人。
提前致谢。
解决方案
您正在使用isLoading
作为Rx<bool>
. 在这种情况下,您需要更改GetBuilder
为GetX
. 而且不需要打电话update()
。
GetBuilder
用于非反应性、非 Rx 的简单状态管理GetX
用于响应式、Rx 状态管理
推荐阅读
- angularjs - 当我尝试在 html 中包含缓存的模板时,Angular $templatecache 不起作用
- sql - SQL Logic - 涉及带有 Group By 子句的 Update 语句的逻辑
- node.js - Jasmine + Karma + 伊斯坦布尔测试:自我和/或窗口未定义
- bash - Powershell 是否具有与 bash 子shell 等效的功能?
- ios - 为什么在创建领域数据模型时需要必需的初始化程序?
- netsuite - Netsuite:使用套件脚本在项目子列表上添加自定义列
- haskell - foldl' 和 foldr' 的默认定义看起来很奇怪
- android - 由 java.lang.IllegalStateException 引起:无法为分离的片段创建 ViewModelProvider
- ios - Firebase MLKit 文本识别错误
- arrays - 如何将过滤器应用于以下代码?