![](/img/trans.png)
[英]type 'List<dynamic>' is not a subtype of type 'String'
[英]Flutter returning error type 'List<dynamic>' is not a subtype of type 'String'
我是 flutter 的新手,我有一个名为诊断的字段,我试图从 firestore 文档中获取该字段,该文档有时的值为" "
或具有单个String
值的[]
[]
具有多个String
值的 []。 但遗憾的是,我遇到了错误type 'List<dynamic>' is not a subtype of type 'String'
。 任何帮助将不胜感激。 谢谢你。
cloud_results.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'];
}
结果_cloud_storage.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));
}
exam_record_screen.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(),
);
}
}
),
);
}
}
您可以将diagnostics
变量定义为List<String>
,并在您的CloudResults.fromSnapshot
中,将为diagnostics
变量赋值的方法更改为:
diagnosis = snapshot.data()['diagnosis'] is String? [snapshot.data()['diagnosis']]:snapshot.data()['diagnosis'],
我把诊断代码改成了这个。
class CloudResults {
final List<String> diagnosis;
const CloudResults({
this.diagnosis = const [],
在 CloudResults.fromSnapshot 中
diagnosis = snapshot.data()['diagnosis'] is String
? [snapshot.data()['diagnosis'] as String]
: (snapshot.data()['diagnosis'] as List<dynamic>)
.map((e) => e as String)
.toList(),
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.