flutter firebase auth应用栏标题的当前用户电子邮件

时间:2018-09-06 18:29:09

标签: firebase firebase-authentication flutter

用户已经使用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),
          ),
        )
    );
  }
}

1 个答案:

答案 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";
    }
}