【问题标题】:How to fetch data from firebase and create a class object from it如何从 firebase 获取数据并从中创建类对象
【发布时间】:2022-11-04 02:50:09
【问题描述】:

我正在尝试从 firebase 获取用户评分并从数据中创建一个类。

这是数据到达时我需要创建的类::

@immutable
class UserRating {
  final String documentId;
  final String ratingJobId;
  final String ratingUserIdGivingRating;
  final String ratingUserIdGettingRating;
  final int? ratingUser;
  final String? ratingComment;
  const UserRating(
      {required this.documentId,
      required this.ratingJobId,
      required this.ratingUserIdGivingRating,
      required this.ratingUserIdGettingRating,
      this.ratingUser,
      this.ratingComment});

  // acts as constructor
  UserRating.fromSnapshot(QueryDocumentSnapshot<Map<String, dynamic>> snapshot)
      : documentId = snapshot.id,
        ratingJobId = snapshot.data()[ratingJobIdColumn],
        ratingUserIdGivingRating =
            snapshot.data()[ratingUserIdGivingRatingColumn],
        ratingUserIdGettingRating =
            snapshot.data()[ratingUserIdGettingRatingColumn],
        ratingUser = snapshot.data()[ratingUserColumn],
        ratingComment = snapshot.data()[ratingCommentColumn];
}

这是从firebase发出请求的代码(这是问题所在,因为我很难处理快照)

我遇到的另一个问题是数据可能还不存在,所以如果没有 userRating,我需要返回一些东西....也不知道如何处理。任何帮助都会很棒!

  final userRating = FirebaseFirestore.instance.collection('user rating');

 Future getUserRatingPerJob({
    required String ratingJobId,
    required String ratingUserIdGivingRating,
  }) async {
    await userRating
        .where(
          ratingJobIdColumn,
          isEqualTo: ratingJobId,
        )
        .where(
          ratingUserIdGivingRatingColumn,
          isEqualTo: ratingUserIdGivingRating,
        ); // this is where I need to do something to return UserRating object
  }

【问题讨论】:

    标签: flutter firebase dart future snapshot


    【解决方案1】:

    这就是我要工作的。

    有更清洁的方法吗?

      Future getUserRatingPerJob({
        required String ratingJobId,
        required String ratingUserIdGivingRating,
      }) async {
        var _userRating;
    
        await userRating
            .where(
              ratingJobIdColumn,
              isEqualTo: ratingJobId,
            )
            .where(
              ratingUserIdGivingRatingColumn,
              isEqualTo: ratingUserIdGivingRating,
            )
            .limit(1)
            .get()
            .then((value) {
          value.docs.forEach((element) {
            _userRating = CloudUserRating(
              documentId: element.id,
              ratingJobId: element[ratingJobIdColumn],
              ratingUserIdGettingRating: element[ratingUserIdGettingRatingColumn],
              ratingUserIdGivingRating: element[ratingUserIdGivingRatingColumn],
              ratingUser: element[ratingUserColumn],
              ratingComment: element[ratingCommentColumn],
            );
          });
        });
        return _userRating;
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      相关资源
      最近更新 更多