如何在Flutter中从Firebase Auth获取用户ID?

7

我希望通过将用户ID分配给文档作为字段,将用户相关数据保存在Firestore中。

如何从Firebase Auth获取用户ID?

还有更好的方法在Firestore中存储用户数据吗?

我无法通过这种方式从Firebase Auth获取用户ID(Text(_userId)返回_userId == null错误):

String _userId;
  ...

  @override
  Widget build(BuildContext context) {
    FirebaseAuth.instance.currentUser().then((user) {
      _userId = user.uid;
    });

    return new Scaffold(
      appBar: new AppBar(
        title: new Text("App bar"),
      ),
      body: new Text(_userId),
    );
  }
2个回答

21

_userId是空的,因为小部件在尚未完成FirebaseAuth.instance.currentUser()返回的未来对象之前构建。一旦它完成,就为时已晚,小部件不会更新。解决这个问题的一种方法是使用FutureBuilder,可以像这样:

Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text("App bar"),
    ),
    body: FutureBuilder(
      future: FirebaseAuth.instance.currentUser(),
      builder: (context, AsyncSnapshot<FirebaseUser> snapshot) {
        if (snapshot.hasData) {
          return Text(snapshot.data.uid);
        }
        else {
          return Text('Loading...');
        }
      },
    ),
  );
}

0

当前用户ID:

  FirebaseAuth.instance.currentUser?.uid

将用户详细信息存储在uid中:

使用set()方法:

final user = <String, String>{
  "name": "Mohan Roy",
  "state": "CA",
  "country": "USA"
};

Firestore.instance
    .collection("users")
    .doc(FirebaseAuth.instance.currentUser!.uid)
    .set(user)
    .onError((e, _) => print("Error writing document: $e"));

额外:

当前用户名:

  FirebaseAuth.instance.currentUser?.displayName

当前用户电子邮件:

  FirebaseAuth.instance.currentUser?.email

当前用户电话号码:

  FirebaseAuth.instance.currentUser?.phoneNumber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接