Firebase Auth 无法使用 GetX 正确更新值

问题描述 投票:0回答:1

我目前正在我的应用程序中使用 Firebase Auth 和 GetX 作为状态管理工具开发身份验证功能。

为此,我有一个如下所示的 AuthStateController:

class AuthStateController extends GetxController {
  FirebaseAuth firebaseAuth = FirebaseAuth.instance;

  Rxn<User> user = Rxn<User>();

  @override
  void onInit() {

    super.onInit();
    user.bindStream(firebaseAuth.authStateChanges());
  }
}

然后我调用 firebase 的 createUserWithEmailAndPassword 函数。 这工作正常,用户被正确创建,但我的用户变量没有更新,即使流正确地发出用户对象。

重新启动应用程序后,用户将登录,并且从现在开始按预期登录和注销。

我需要这个用户变量来在注册后分别在我的 UI 中反应性地显示注册屏幕和主屏幕。其代码大致如下所示:

return Obx(( {
  if (authStateController.user.value != null) {
    return HomePage();
  } else {
    return LoginPage();
  }
});

在这个项目的任何其他地方,GetX 都工作得很好并且符合预期。

我已经按照本教程设置了 firebase:https://firebase.google.com/docs/flutter/setup?platform=android

我的 pubspec.yaml 文件如下所示:

firebase_core: ^2.24.2
firebase_auth: ^4.16.0
get: ^4.6.6

我已经在模拟器(iOS 和 Android)和真实设备上对此进行了测试,两者都不起作用。

关于我在这里做错了什么有什么建议吗?

android flutter firebase firebase-authentication flutter-getx
1个回答
0
投票

我设法找到了解决方案,但我不太确定是什么导致了问题。

我正在使用

Navigator.of(context).pushReplacement(
  MaterialPageRoute(
    builder: (context) => const RegistrationPage(),
  ),
);

在我的登录页面和注册页面之间导航。 这在某种程度上扰乱了 GetX 刷新小部件的方式。将身份验证 UI 放置在单个小部件中后,一切都会按预期运行。

© www.soinside.com 2019 - 2024. All rights reserved.