我有一个WelcomeScreen
,其中包含注册和登录和HomeScreen
,我想在用户登录后重定向.为了管理身份验证数据,我创建了一个具有static
个属性和方法的auth.dart
,这样我就可以跨具有相同数据的所有页面访问它们.
import 'package:firebase_auth/firebase_auth.dart';
class Auth {
static final auth = FirebaseAuth.instance;
static Future<void> logout() async {
await auth.signOut();
}
static Future<void> loginUser(String userEmail, String userPassword) async {
await auth.signInWithEmailAndPassword(email: userEmail, password: userPassword);
}
static Future<FirebaseUser> getCurrentUser() async {
return await auth.currentUser();
}
}
在main.dart
文件中,我使用StreamBuilder
根据更改的身份验证数据更改当前屏幕.我从this answer得到StreamBuilder
码.
home: StreamBuilder<FirebaseUser>(
stream: Auth.auth.onAuthStateChanged,
builder: (context, snapshot) {
if (snapshot.hasData) {
return HomeScreen();
} else {
return WelcomeScreen();
}
},
),
在我的登录屏幕中,我使用以下代码触发登录:
Future<void> login() async {
...
try {
await Auth.loginUser(userEmail, userPassword);
var user = await Auth.getCurrentUser();
print(user.displayName); // This works
} catch (error) {
print(error.message);
}
}
我不知道我正在使用的静电方法是否是处理Firebase身份验证的正确方式,但它似乎起作用了.登录后,我可以显示登录用户的名称,但main.dart
中的StreamBuilder
没有反映更新的身份验证数据,即没有更改页面.
是因为静电的办法,还是执行百人制出了什么问题?