【问题标题】:Getting document from Firestore to pun inside a Custom User profile but it returns null. Dart/Flutter从 Firestore 获取文档以在自定义用户配置文件中添加双关语,但它返回 null。飞镖/颤振
【发布时间】:2020-10-06 09:46:01
【问题描述】:

您好,我在从 Firestore 检索数据时遇到了一些问题; 我创建了一个类 User 来获取我的应用程序的所有信息。 用户类:

class User {
  String id;
  String displayName;
  String email;
  String pictureURL;
  String gender;
  DateTime dateOfBirth;

  User(fbauth.User user) {
    id = user.uid;
    displayName = user.displayName;
    email = user.email;
    pictureURL = user.photoURL;
    // setting info
    DocumentSnapshot resl = FirestoreUtil.read("AdditionalUserInfo", user.uid);
    gender = resl.data()['gender'];
    dateOfBirth = (resl.data()['date of birth'] as Timestamp).toDate();

  
    
      
    }

FirestoreUtils 类:

class FirestoreUtil {
  static DocumentSnapshot read(String collection, String document) {
    FirebaseFirestore.instance
    .collection(collection)
    .doc(document)
    .get()
    .then((DocumentSnapshot snapshot) {
      if(snapshot.exists){
        return snapshot;
      }else{
        print("no data found");
      }
    });
  }
}

返回快照后,它变为空。但如果我这样做,它会打印出正确的值:

class FirestoreUtil {
  static DocumentSnapshot read(String collection, String document) {
    FirebaseFirestore.instance
    .collection(collection)
    .doc(document)
    .get()
    .then((DocumentSnapshot snapshot) {
      if(snapshot.exists){
        print(snapshot.data);
      }else{
        print("no data found");
      }
    });
  }
}

我几乎尝试了所有方法,但我无法弄清楚。有人可以帮忙吗?我无法想象在类中检索数据有那么难。

【问题讨论】:

    标签: flutter dart google-cloud-firestore


    【解决方案1】:

    这可能是 Future(async/await) 的问题。您在 Future 中返回值,您可以在另一个 then() 等中获取此值。

    class FirestoreUtil {
      static DocumentSnapshot read(String collection, String document) async {
        // You can directly return it too without assigning it to result variable
        var result = await FirebaseFirestore.instance
        .collection(collection)
        .doc(document)
        .get();
    
        return result;
      }
    }
    

    DocumentSnapshot 有data() 方法,你可以使用result.data() 并检查它是否是null, isEmpty 等。

    我用async/await写了这个函数,但是如果你需要Future并且不想等待操作完成,你可以直接返回

    FirebaseFirestore.instance.collection(collection).doc(document).get();
    

    你可以在获得 Future 后使用then()

    【讨论】:

      猜你喜欢
      • 2019-05-30
      • 2020-01-12
      • 2021-11-20
      • 2020-12-31
      • 1970-01-01
      • 2020-11-28
      • 2019-10-21
      相关资源
      最近更新 更多