我是flutter新手,我有一个名为diagnosis的字段,我试图从一个firestore文档中获取它,这个文档有时会有一个" "
的值,或者一个[]
有一个String
的值,或者[]
有多个String
的值。但是很遗憾,我遇到了一个错误type 'List<dynamic>' is not a subtype of type 'String'
。任何帮助都将不胜感激。谢谢。
云计算结果.dart
class CloudResults {
final String examinationName;
final String diagnosis;
final String result;
const CloudResults({
required this.examinationName,
this.diagnosis = '',
required this.result,
});
Map<String, dynamic> toJson() {
return {
'examinationName': examinationName,
'diagnosis': diagnosis,
'result': result,
};
}
CloudResults.fromSnapshot(
QueryDocumentSnapshot<Map<String, dynamic>> snapshot)
: documentId = snapshot.id,
examinationName = snapshot.data()['examinationName'],
diagnosis = snapshot.data()['diagnosis'],
result = snapshot.data()['result'];
}
结果云存储.dart
class ResultsCloudStorage{
final results = FirebaseFirestore.instance.collection('exam-results');
Stream<Iterable<CloudResults>> allResults({required String patientId}) =>
results.snapshots().map((event) => event.docs
.map((doc) => CloudResults.fromSnapshot(doc))
.where((result) => result.patientId == patientId));
}
检查记录屏幕.dart
class _ExamRecordScreenState extends State<ExamRecordScreen> {
late final ResultsCloudStorage _resultsService;
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: _resultsService.allResults(patientId: userId),
builder: (context, snapshot) {
if (snapshot.hasData) {
final allResults = snapshot.data as Iterable<CloudResults>;
return CustomScrollView(slivers: [
SliverList(
...
)
]
);
} else {
return const Center(
child: CircularProgressIndicator(),
);
}
}
),
);
}
}
2条答案
按热度按时间vfhzx4xs1#
您可以将
diagnostics
变量定义为List<String>
,并在CloudResults.fromSnapshot
中将diagnostics
变量的赋值方法更改为:ylamdve62#
我把诊断代码改成了这个。
和云中的结果。来自快照