Firebase身份验证用户信息流
我有一个个人资料页面,显示用户当前注册的电子邮件,还有一个编辑图标,将用户带到可以编辑电子邮件的页面。 当用户成功更改电子邮件时,他将返回显示已注册电子邮件的上一页 我希望用户看到新的电子邮件。但是用户会一直看到旧的电子邮件,直到页面重新加载 所以我的第一个想法是用StreamBuilder自然地替换FutureBuilder。 我不确定如何获取当前用户的流,而不是未来用户的流,因此我使用了我所知道的FirebaseUser-->onAuthStateChanged的唯一流Firebase身份验证用户信息流,firebase,flutter,firebase-authentication,Firebase,Flutter,Firebase Authentication,我有一个个人资料页面,显示用户当前注册的电子邮件,还有一个编辑图标,将用户带到可以编辑电子邮件的页面。 当用户成功更改电子邮件时,他将返回显示已注册电子邮件的上一页 我希望用户看到新的电子邮件。但是用户会一直看到旧的电子邮件,直到页面重新加载 所以我的第一个想法是用StreamBuilder自然地替换FutureBuilder。 我不确定如何获取当前用户的流,而不是未来用户的流,因此我使用了我所知道的FirebaseUser-->onAuthStateChanged的唯一流 Widget b
Widget buildEmail() {
return StreamBuilder(
stream: FirebaseAuth.instance.onAuthStateChanged,
builder: (BuildContext context, AsyncSnapshot<FirebaseUser> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting)
return Center(
child: SpinKitRing(
color: Colors.white,
size: 30,
));
else if (snapshot.hasError)
return Center(child: Text(snapshot.error));
else {
// final email = snapshot.data.data['email'];
final email = snapshot.data.email;
return Padding(
padding: const EdgeInsets.only(left: 25.0),
child: Text('$email', style: TextStyle(color: Colors.black)),
);
}
},
);
}
这会让我检查我的更新电子邮件方法,并检查我的用户是否正在再次登录应用程序
static Future<void> updateEmail(String password, String newEmail, BuildContext context) async {
final user = await CurrentUser.getCurrentUser();
final ref = Firestore.instance.collection('users');
try {
AuthCredential credential = EmailAuthProvider.getCredential(email: user.email, password: password);
AuthResult result = await user.reauthenticateWithCredential(credential); // Sign in?
result.user.updateEmail(newEmail);
ref.document(user.uid).updateData({'email': newEmail});
Navigator.of(context).pop();
Fluttertoast.showToast(msg: 'Success!');
} on PlatformException catch (error) {
print(error);
changeEmailErrorDialog(context, error: error.message);
} catch (error) {
print(error);
changeEmailErrorDialog(context, error: error);
}
}
我做错什么了吗?
如何获取用户流?
获取当前用户的Firebase方法将返回未来
FirebaseAuth.instance.currentUser();
这个方法不应该有流版本吗?有流版本
FirebaseAuth.instance.userChanges(),
榜样
StreamBuilder<User>(
stream: FirebaseAuth.instance.userChanges(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
}
return Text(snapshot.data.displayName);
},
),
StreamBuilder(
流:FirebaseAuth.instance.userChanges(),
生成器:(上下文,快照){
if(snapshot.connectionState==connectionState.waiting){
返回中心(子项:CircularProgressIndicator());
}
返回文本(snapshot.data.displayName);
},
),
FirebaseAuth.instance.currentUser();
FirebaseAuth.instance.userChanges(),
StreamBuilder<User>(
stream: FirebaseAuth.instance.userChanges(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
}
return Text(snapshot.data.displayName);
},
),