用户已经使用Firebase电子邮件登录名登录了该应用程序。 如何使应用栏标题成为当前用户的电子邮件?
class _HomePageState extends State<HomePage> {
final Future<String> userEmail = FirebaseAuth.instance.currentUser().then((FirebaseUser user) => user.email);
var e = "";
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
backgroundColor: Colors.black,
title: Text('userEmail'),
actions: <Widget>[
new FlatButton(
onPressed: _signOut,
child: new Text('logout', style: new TextStyle(fontSize: 17.0, color: Colors.white))
),
],
),
body: new Center(
child: new Text(
e,
style: new TextStyle(fontSize: 32.0),
),
)
);
}
}
答案 0 :(得分:2)
拥有新用户后,您需要致电setState()
。
在您的代码中,您创建了Future<String> email
,但无法利用最终的user.email
评估。
我建议创建一个非最终变量来保存您的FirebaseUser
,然后通过State
的{{1}}方法触发对此的请求。
initState()
目标是最终能够在收到FirebaseUser之后(由于是异步的)在 后呼叫FirebaseUser currentUser; // not final
。
setState()
要注意的重要一点是,您必须为FirebaseAuth.instance.currentUser().then((FirebaseUser user) {
setState(() { // call setState to rebuild the view
this.currentUser = user;
});
});
的所有可能状态构建UI,这些状态是:
currentUser
(在通话完成之前)因此,您需要确保使用类似于以下内容的逻辑来处理null
情况:
null
以下是根据您的代码改编而成的示例:
String _email() {
if (currentUser != null) {
return currentUser.email;
} else {
return "no current user";
}
}