繁体   English   中英

Flutter Firebase 获取当前用户数据

[英]Flutter Firebase get current user data

我正在尝试构建一个个人资料页面,它将捕获用户登录凭据,并在成功登录后,将有一个个人资料页面显示用户信息。

代码

  firebase_auth: ^0.14.0+5
  cloud_firestore: ^0.11.0+2
  provider: ^3.1.0

这是我正在使用的依赖项版本。

 void createRecord(name, email, password) async {
  await databaseReference.collection("users").add({
      'name' : name,
      'email': email,
      'password': password,
  });
}

用户注册成功后会调用createRecord。

void getData() {
     databaseReference
        .collection("users")
        .getDocuments()
        .then((QuerySnapshot snapshot) {
          snapshot.documents.forEach((f) => print("${f.data}"));
     });
  }

现在我只能打印所有数据而不是当前登录的用户数据。 (只需要姓名和电子邮件)

下一个问题

如何让数据显示在我的 UI 上?

您做错的是获取所有用户而不是单个用户。

字符串用户名

 void createRecord(name, email, password) async {
 final result =  await databaseReference.collection("users").add({
      'name' : name,
      'email': email,
      'password': password,
  });

userid = result;
}

将查询结果分配给一个变量,这将包含所有数据。 您可以使用它而不是再次调用来显示用户数据。 但如果你还想打另一个电话。

Future<User> getData() async {
    final user =  await databaseReference
        .collection("users")
        .doc(userid);
   
return user;  
  }

虽然不建议为此打两个电话。 但它应该工作。

关于您的第二个问题,由于您使用的是provider ,因此您可以使用ChannotifierChangeNotifierProvider将用户数据插入状态并在 UI 中使用它。

  • 创建User模型
  • 创建一个
Profile with ChangeNotifier {
User _user;
User get user => _user;

//call get data here

getProfile()async{

_user = await getdata();

notifylistneres();
}

  • 然后使用Provider.of<Profile>(context)在您的 UI 中使用它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM