首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FirebaseCloudFire还原--在颤振中获取映射数组

FirebaseCloudFire还原--在颤振中获取映射数组
EN

Stack Overflow用户
提问于 2020-07-19 09:25:04
回答 1查看 5.2K关注 0票数 7

我正在尝试用作为我的数据库来构建一些内容。我有一个集合(‘学生’),其中包含每个学生的文件。

在每个学生文档中都有一个数组,其中包含学生的标记地图。见下文。

在“颤栗”中,我有以下课程:

代码语言:javascript
复制
class Student {
  final String name;
  final String subject;
  final List<Mark> marks;

  Student({this.name, this.subject, this.marks});
}

class Mark {
  final int mark;
  final String grade;
  final String markedBy;
  final String feedback;

  Mark({this.mark, this.grade, this.markedBy, this.feedback});
}

我使用提供者流检索数据,如下所示:

代码语言:javascript
复制
  Stream<List<Student>> get firebaseStudents {
    return Firestore.instance.collection('students').snapshots().map(_firebaseStudentsFromSnapshot);
  }

  List<Student> _firebaseStudentsFromSnapshot(QuerySnapshot snapshot) {
    return snapshot.documents.map((doc) {
      return Student(
        name: doc.data['name'] ?? '',
        subject: doc.data['subject'] ?? '',

        //trying to figure out how to map the marks!

      );
    }).toList();
  }

如果我打印doc.data‘年级’--我可以看到这是一组包含数据的地图,我只是不知道如何将其映射到Mark类的列表中。

我环顾四周,看到了一些建议,比如使用fromMap,但似乎无法让它发挥作用。我已经尝试了以下(在Mark类中):

代码语言:javascript
复制
  Mark.fromMap(Map<String,dynamic> map) : 
    mark = map['mark'], 
    grade = map['grade'],
    markedBy = map['markedBy'],
    feedback = map['feedback'];

在数据库检索中:

代码语言:javascript
复制
  marks: List<Mark>.from(doc.data['grades'].map((item) {
    return new Mark(
        mark: item['mark'],
        grade: item['grade'],
        markedBy = item['markedBy'],
        feedback = map['feedback']
       );
     })),

但没有结果。我肯定我只是错过了一个关键的部分,但我仍然是相当新的,所以我试图让我的头脑在这一切。

提前感谢您的帮助或建议。

编辑

最终想出了一些可行的方法,但总是乐于听到是否有更好的方法来做到这一点。

我猜想可能有一种使用fromMap的更聪明的方法,但目前的类型差异给我带来了一个问题,但我会看看是否能让它工作起来,因为这样会更整洁一些。

代码语言:javascript
复制
  List<Student> _firebaseStudentsFromSnapshot(QuerySnapshot snapshot) {
    return snapshot.documents.map((doc) {
      List<Mark> marks = [];
      List<dynamic> markMap = doc.data['grades'];
      markMap.forEach((element) {
        marks.add(new Mark(
            mark = element['mark'], 
            grade = element['grade'],
            markedBy = element['markedBy'],
            feedback = element['feedback'];
        ));
      });
      return Student(
        name: doc.data['name'] ?? '',
        subject: doc.data['subject'] ?? '',
        marks: marks,
      );
    }).toList();
  }
EN

回答 1

Stack Overflow用户

发布于 2020-07-20 07:51:20

最后我自己找到了一个解决方案,不确定这是否是最好的,但它对我有效。

代码语言:javascript
复制
  List<Student> _firebaseStudentsFromSnapshot(QuerySnapshot snapshot) {
    return snapshot.documents.map((doc) {
      List<Mark> marks = [];
      List<dynamic> markMap = doc.data['grades'];
      markMap.forEach((element) {
        marks.add(new Mark(
            mark = element['mark'], 
            grade = element['grade'],
            markedBy = element['markedBy'],
            feedback = element['feedback'];
        ));
      });
      return Student(
        name: doc.data['name'] ?? '',
        subject: doc.data['subject'] ?? '',
        marks: marks,
      );
    }).toList();
  }
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62978458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档