我目前正在我的应用程序中使用 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)和真实设备上对此进行了测试,两者都不起作用。
关于我在这里做错了什么有什么建议吗?
我设法找到了解决方案,但我不太确定是什么导致了问题。
我正在使用
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => const RegistrationPage(),
),
);
在我的登录页面和注册页面之间导航。 这在某种程度上扰乱了 GetX 刷新小部件的方式。将身份验证 UI 放置在单个小部件中后,一切都会按预期运行。