gpt4 book ai didi

Firebase Cloud Firestore 在 Flutter 中获取 map 数组

转载 作者:行者123 更新时间:2023-12-03 02:46:30 25 4
gpt4 key购买 nike

我正在尝试使用 Firebase Cloud Firestore 作为我的数据库在 Flutter 中构建一些东西。我有一个集合(“学生”),其中包含每个学生的文档。
在每个学生文档中都有一个数组,其中包含学生的分数图。见下文。
Screenshot from Firebase Cloud Firestore document with an array (grades) of maps (various fields relating to the marks a student has received)
在 Flutter 中,我有以下类(class):

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});
}

我正在使用 Provider 流检索数据,如下所示:
  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['grades'] 我可以看到它是一个包含数据的 map 数组,我只是不确定如何将其映射到 Mark 类的列表。
我环顾四周,看到了诸如使用 fromMap 之类的建议,但似乎无法使其正常工作。我已经尝试过以下(在马克课上):
  Mark.fromMap(Map<String,dynamic> map) : 
mark = map['mark'],
grade = map['grade'],
markedBy = map['markedBy'],
feedback = map['feedback'];
并在数据库中检索:
  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 可能有更聪明的方法,但目前类型差异给我带来了问题,但我会看看我是否可以让它工作,因为那会更整洁一些。
  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();
}

最佳答案

最终自己找到了解决方案,不确定它是否是最好的,但它对我有用。

  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();
}

关于Firebase Cloud Firestore 在 Flutter 中获取 map 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62978458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com