[英]How to serialize/model inside model json data from Firestore on Flutter
如何使用颤振数据建模技术访问“HH”和“mm”? 我一直在尝试按如下方式使用它,但它在下面给出了错误。
我的数据模型目前是它的简化版本。
class Week {
final String label;
final String value;
Week({@required this.label, @required this.value});
factory Week.fromJson(Map<String, dynamic> doc) {
return Week(
label: doc['label'] ?? '',
value: doc['value'] ?? 0,
);
}
}
class IntervalTime {
final String hh;
final String mm;
IntervalTime({@required this.hh, @required this.mm});
factory IntervalTime.fromJson(Map<String, dynamic> doc) {
return IntervalTime(
hh: doc['HH'] ?? '',
mm: doc['mm'] ?? '',
);
}
}
class Diary {
final String message;
final List<Week> weeklyFreq;
final Timestamp annualFreq;
final IntervalTime start;
Diary(
{@required this.message,
@required this.weeklyFreq,
@required this.annualFreq,
@required this.start});
factory Diary.fromFirestore(DocumentSnapshot doc) {
Map data = doc.data;
return Diary(
message: data['message'] ?? '',
weeklyFreq: data['weeklyFreq'].cast<List<Week>>() ?? [],
annualFreq: data['annualFreq'] ?? Timestamp,
start: data['start'].cast<IntervalTime>() ?? '',
);
}
}
日志记录如下。
[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type 'CastList<dynamic, List<Week>>' is not a subtype of type 'List<Week>'
解决方法如下。 唯一最重要的是在数据声明中再次转换 json 数据。 此外,在数据对象内部序列化数据是一种混乱,因为有足够的资源来映射对象内部的对象。
class Week {
final String label;
final int value;
Week({@required this.label, @required this.value});
factory Week.fromJson(Map<String, dynamic> data) {
// Map<String, dynamic> data = json.decode(doc);
return Week(
label: data['label'] ?? '',
value: data['value'] ?? 0,
);
}
}
class IntervalTime {
final String hh;
final String mm;
IntervalTime({@required this.hh, @required this.mm});
factory IntervalTime.fromJson(Map data) {
return IntervalTime(
hh: data['HH'] ?? '',
mm: data['mm'] ?? '',
);
}
}
class Diary {
final String message;
final List<Week> weeklyFreq;
final Timestamp annualFreq;
final IntervalTime start;
Diary(
{@required this.message,
@required this.weeklyFreq,
@required this.annualFreq,
@required this.start});
factory Diary.fromFirestore(DocumentSnapshot doc) {
Map data = doc.data;
return Diary(
message: data['message'] ?? '',
weeklyFreq: (data['weeklyFreq'] as List)
?.map((e) => e == null ? null : Week.fromJson(e))
?.toList(), // Workaround
annualFreq: data['annualFreq'] ?? Timestamp,
start: IntervalTime.fromJson(data['start']), // workaround
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.