【问题标题】:How do I retrieve a document ID in Firestore after creating a user collection using Flutter使用 Flutter 创建用户集合后如何在 Firestore 中检索文档 ID
【发布时间】:2021-04-08 09:21:25
【问题描述】:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';


Future<void> userSetup(String displayName) async{
  FirebaseAuth auth =  FirebaseAuth.instance;
  String uid = auth.currentUser.uid.toString();
  CollectionReference users = FirebaseFirestore.instance.collection("Users");

  users.add({
    'displayName': displayName,
    'uid': uid,
    // 'docID': docID,
  });
  return;
} 

首先,我是 Flutter 的初学者。

这是我用来在 Firestore 中添加集合的方法,但我想检索特定的文档 ID 并将其用于进一步存储。有没有办法在用户详细信息中获取和存储文档 ID?我正在尝试在他们登录时检索特定用户的名称并将其显示在主页上。

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    你可以试试这个方法

    用你自己的预置文档id,你可以使用包uuid https://pub.dev/packages/uuid

    或者使用用户的uid作为文档id

    //final docID = Uuid().v4(); //use custom uuid for doc id
    //final docID = uid; //use user id as doc id
    users.doc(docID).set({
          'displayName': displayName,
          'uid': uid,
        });
    

    然后使用 shared_preferences 将 docID 保存到用户设备以进行持久存储 https://pub.dev/packages/shared_preferences

    【讨论】:

    • 谢谢,这是我用过的,它有效。我将 docID 设置为与 userID 相同
    【解决方案2】:

    如果要在文档中存储ID,可以先不带参数调用CollectionReference.doc()为新文档创建DocumentReference

    CollectionReference users = FirebaseFirestore.instance.collection("Users");
    var newDocRef = users.doc();
    var newDocId = newDocRef.id
    
    users.add({
      'displayName': displayName,
      'uid': uid,
      'docID': newDocId
    });
    

    【讨论】:

      【解决方案3】:
      You can retrieve **firestore** doc id only when you retrieve the data using a stream builder. Take a look at the code.
      
      Streambuilder(
      stream: Firestore.instance.collection("Your collection").snapshot(),
      builder: (context,snapshot) {
       if(snapshot.hasData) {
      List<User> users = []
        for(var doc in sanpshot.data.documents) {
          users.add(
           new User(
           name: doc.data["name"],
           email: doc.data["email"]
           **id: doc.documentID** 
            )
              )
      
         return Column(
          children: users
          )
      
          }
        }
       }
      )
         
      

      【讨论】:

        【解决方案4】:

        如果您不想为文档使用自定义 ID,而是依赖 Firebase 自动生成的 ID,您可以执行以下操作。

        Future<void> userSetup(String displayName) async {
         FirebaseAuth auth =  FirebaseAuth.instance;
         String uid = auth.currentUser.uid.toString();
         CollectionReference users = FirebaseFirestore.instance.collection("Users");
         users.doc(uid).set({
            'displayName': displayName,
          });
          return;
        } 
        

        这会将文档 ID 设置为与用户 uid 相同。这种方法的好处有两个。

        1. 您不必在文档中设置额外的 id 属性。
        2. 您现在可以使用当前登录的用户 uid 查询特定用户的用户集合

        【讨论】:

          【解决方案5】:

          在运行时,组件可以通过访问其命名空间中的路径 /pkg/ 来读取自己包的内容。 resource() 模板可用于将内容添加到可以通过这种方式访问​​的包中。

          【讨论】:

            猜你喜欢
            • 2018-10-29
            • 2020-06-26
            • 2020-12-10
            • 2019-11-19
            • 1970-01-01
            • 1970-01-01
            • 2021-12-25
            • 2021-04-04
            相关资源
            最近更新 更多