如何从Cloud Firestore获取数据,其中user.uid等于flutter中的文档ID?

时间:2020-01-25 16:52:39

标签: firebase flutter dart google-cloud-firestore firebase-authentication

我正在使用此个人资料屏幕来显示用户信息。 用户验证后,我将数据存储在Cloud Firestore中,文档ID等于用户ID。 现在,我想从Cloud Firestore检索数据,其当前userId等于文档ID。

enter image description here

现在我有这个:

class UserManagement {
  getData() async{
    String userId = (await FirebaseAuth.instance.currentUser()).uid;
    print(userId);
    return Firestore.instance.collection('users').document(userId);

  }

但是当我注销并与其他用户重新登录后,它不能显示正确的数据。

UserManagement().getData().then((results) {
    setState(() {
      userFlag = true;
       users = results;
    });
    });

现在,如何获取其他字段,例如姓名,电子邮件,课程,电话号码等。 并将所有值都存储到user.right吗?

2 个答案:

答案 0 :(得分:5)

如果您的Firestore中的文档ID等于Firebase身份验证控制台中的import React, { useState } from 'react'; import { StyleSheet, Text, View, TextInput, Button, } from 'react-native'; export default function AddList({ submitHandler }) { const [text, setText] = useState(''); const changeHandler = (val) => { setText(val); } return( <View style={styles.container}> <View style={styles.wrapper}> <TextInput style={styles.input} placeholder='text' onChangeText={changeHandler} /> <Button onPress={() => submitHandler(text)} title='ADD' color='#333' /> </View> </View> ); } ,那么您需要先检索userid并将其作为参数传递给方法{{1} }:

uid

答案 1 :(得分:1)

您的查询正在获取“ userData”集合中的所有文档,然后从整个集合中挑选出第一个文档。对于具有对该集合的读取访问权限的所有用户,这将是同一套文档。我不明白为什么您期望不同的用户获得不同的结果。也许您打算为给定用户ID的用户访问单个文档,而不是所有文档。在这种情况下,您应该以{{1​​}} uid`作为当前登录用户的ID来请求该文档。

此外,您的代码正在查询一个名为“ userData”的集合,但是您的屏幕截图显示了一个名为“ users”的集合,这很令人困惑。