TrendData.fromRaw constructor
TrendData.fromRaw(
- dynamic raw
Implementation
factory TrendData.fromRaw(dynamic raw) {
if (raw == null) {
return const TrendData(labels: [], values: []);
}
// Handle [[labels], [values]] format from backend
if (raw is List && raw.length == 2) {
final rawLabels = raw[0];
final rawValues = raw[1];
if (rawLabels is List && rawValues is List) {
final labels = rawLabels.map((e) => e.toString()).toList();
final values = rawValues.map((v) {
if (v is num) return v.toDouble();
if (v is String) return double.tryParse(v) ?? 0.0;
return 0.0;
}).toList();
return TrendData(labels: labels, values: values);
}
}
// Handle simple array of numbers (backward compatible)
if (raw is List) {
final values = raw.map((v) {
if (v is num) return v.toDouble();
if (v is String) return double.tryParse(v) ?? 0.0;
return 0.0;
}).toList();
// Auto-generate labels: "1", "2", "3", etc.
final labels = List.generate(values.length, (i) => '${i + 1}');
return TrendData(labels: labels, values: values);
}
return const TrendData(labels: [], values: []);
}