decodeSeries<T, D> static method
Decodes the object from a Map-like dynamic structure. This expects the JSON format to be of the following structure:
{
"areaColorFn": <TypedAccessorFn<T, Color>>,
"colorFn": <TypedAccessorFn<T, Color>>,
"dashPatternFn": <TypedAccessorFn<T, List<int>>>,
"data": <List<T>>,
"displayName": <String>,
"domainFormatterFn": <TypedAccessorFn<T, DomainFormatter<D>>>,
"domainLowerBoundFn": <TypedAccessorFn<T, D>>,
"domainUpperBoundFn": <TypedAccessorFn<T, D>>,
"domainFn": <TypedAccessorFn<T, D>>,
"fillColorFn": <TypedAccessorFn<T, Color>>,
"fillPatternFn": <TypedAccessorFn<T, Color>>,
"id": <String>,
"insideLabelStyleAccessorFn": <TypedAccessorFn<T, TextStyleSpec>>,
"keyFn": <TypedAccessorFn<T, String>>,
"labelAccessorFn": <TypedAccessorFn<T, String>>,
"measureFn": map['measureFn'],
"measureFormatterFn": <TypedAccessorFn<T, MeasureFormatter>>,
"measureLowerBoundFn": <TypedAccessorFn<T, num>>,
"measureOffsetFn": <TypedAccessorFn<T, num>>,
"measureUpperBoundFn": <TypedAccessorFn<T, num>>,
"outsideLabelStyleAccessorFn": <TypedAccessorFn<T, TextStyleSpec>>,
"overlaySeries": <bool>,
"patternColorFn": <TypedAccessorFn<T, Color>>,
"radiusPxFn": <TypedAccessorFn<T, num>>,
"seriesCategory": <String>,
"seriesColor": <Color>,
"strokeWidthPxFn": <TypedAccessorFn<T, num>>
}
See also
Implementation
static charts.Series<T, D> decodeSeries<T, D>(
dynamic map, {
bool validate = true,
}) {
charts.Series<T, D>? result;
try {
if (map is charts.Series<T, D>) {
result = map;
} else if (map is charts.Series<T, T>) {
throw Exception(
'[decodeSeries]: Expected a series of [charts.Series<${T.toString()}, ${D.toString()}>}] but received a series of [charts.Series<${T.toString()}, ${T.toString()}>}].',
);
} else if (map is charts.Series<D, D>) {
throw Exception(
'[decodeSeries]: Expected a series of [charts.Series<${T.runtimeType}, ${D.runtimeType}>}] but received a series of [charts.Series<${D.runtimeType}, ${D.runtimeType}>}].',
);
} else if (map == null) {
throw Exception('[decodeSeries]: map is null');
} else if (map is String) {
throw Exception(
'[decodeSeries]: Invalid series, encountered a String.\n$map',
);
} else {
assert(SchemaValidator.validate(
schemaId: '$_baseSchemaUrl/series',
value: map,
validate: validate,
));
result = charts.Series<T, D>(
areaColorFn: map['areaColorFn'],
colorFn: map['colorFn'],
dashPatternFn: map['dashPatternFn'],
data: JsonClass.parseJson(map['data']),
displayName: map['displayName']?.toString(),
domainFormatterFn: map['domainFormatterFn'],
domainLowerBoundFn: map['domainLowerBoundFn'],
domainUpperBoundFn: map['domainUpperBoundFn'],
domainFn: map['domainFn'],
fillColorFn: map['fillColorFn'],
fillPatternFn: map['fillPatternFn'],
id: map['id'].toString(),
insideLabelStyleAccessorFn: map['insideLabelStyleAccessorFn'],
keyFn: map['keyFn'],
labelAccessorFn: map['labelAccessorFn'],
measureFn: map['measureFn'],
measureFormatterFn: map['measureFormatterFn'],
measureLowerBoundFn: map['measureLowerBoundFn'],
measureOffsetFn: map['measureOffsetFn'],
measureUpperBoundFn: map['measureUpperBoundFn'],
outsideLabelStyleAccessorFn: map['outsideLabelStyleAccessorFn'],
overlaySeries: JsonClass.parseBool(map['overlaySeries']),
patternColorFn: map['patternColorFn'],
radiusPxFn: map['radiusPxFn'],
seriesCategory: map['seriesCategory']?.toString(),
seriesColor: decodeColor(
map['seriesColor'],
validate: false,
),
strokeWidthPxFn: map['strokeWidthPxFn'],
);
}
} catch (e, stack) {
_logger.severe('Error decoding series: $map', e, stack);
rethrow;
}
return result;
}