【问题标题】:Flutter Getx builder not updating UIFlutter Getx builder不更新UI
【发布时间】:2021-12-17 23:05:07
【问题描述】:

我正在尝试将 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 的更改。

可能做了一些愚蠢的事情,但我尝试了几种不同的方法,并四处寻找有类似问题但无法破解的人。

提前致谢。

【问题讨论】:

    标签: flutter dart flutter-getx


    【解决方案1】:

    您将isLoading 用作Rx&lt;bool&gt;。在这种情况下,您需要将GetBuilder 更改为GetX。并且无需拨打update()

    • GetBuilder 用于非反应性、非 Rx 的简单状态管理

    • GetX 用于响应式,Rx 状态管理

    【讨论】:

    • 谢谢!我很欣赏对何时使用什么的明确解释,以及我在周末让自己纠结于此并决定让自己周末休息并再试一次。感谢您花时间回答。
    • 为什么?有什么问题?除了不需要上下文之外,它与提供者几乎相同。
    猜你喜欢
    • 2021-10-08
    • 2021-08-18
    • 2023-01-18
    • 1970-01-01
    • 2020-10-15
    • 2021-01-19
    • 2021-01-22
    • 2021-01-21
    • 1970-01-01
    相关资源
    最近更新 更多