flutter - 如何避免基于 chart_flutter DateTime 的系列列表的运行时类型异常?
问题描述
我的模型:
class Record {
final DateTime timeStamp;
final int metric;
}
我想以最简单的方式展示一系列LineChart
。
List<Record> _sampledRecords;
...
@override
initState() {
_sampledRecords = ...
}
...
child: LineChart(
[
Series<Record, DateTime>(
id: 'Metric 1',
colorFn: (_, __) =>
MaterialPalette.blue.shadeDefault,
domainFn: (Record record, _) => record.timeStamp,
measureFn: (Record record, _) => record.metric,
data: _sampledRecords,
),
],
),
现在这与我看到的几个示例代码完全一致,比如查看https://google.github.io/charts/flutter/example/axes/nonzero_bound_measure_axis
显然,人数是那里的测量值(y 轴数据)并且DateTime
是x 轴数据。我以完全相同的方式输入了我的用例,编译器也可以。
但是运行时我得到:type 'List<Series<Record, DateTime>>' is not a subtype of type 'List<Series<dynamic, num>>'
. 系统从哪里提取这种num
数字输入?我不能使用'List<Series<dynamic, dynamic>>' 类型的 Receiving runtime error is not a subtype of type 'List<Series<dynamic, num>>' charts_flutter(所以请意识到我的问题不是重复的)解决方案,因为DateTime
不是num
类型。我尝试将此作为澄清,但它没有改变任何东西:
child: LineChart(
<Series<Record, DateTime>>[
Series<Record, DateTime>(
id: 'Metric 1',
colorFn: (_, __) =>
MaterialPalette.blue.shadeDefault,
domainFn: (Record record, _) => record.timeStamp,
measureFn: (Record record, _) => record.metric,
data: _sampledRecords,
),
],
),
我重构了这样的代码:
List<Series<Record, DateTime>> _getPowerData() {
return [
Series<Record, DateTime>(
id: 'Metric 1',
colorFn: (_, __) =>
MaterialPalette.blue.shadeDefault,
domainFn: (Record record, _) => record.timeStamp,
measureFn: (Record record, _) => record.power,
data: _sampledRecords,
),
];
}
child: LineChart(_getPowerData()
我得到type 'List<Series<dynamic, dynamic>>' is not a subtype of type 'List<Series<dynamic, num>>'
运行时异常。此外,我什至尝试通过以下方式满足num
类型int
:
List<Series<Record, int>> _getPowerData() {
return [
Series<Record, int>(
id: 'Metric 1',
colorFn: (_, __) =>
MaterialPalette.blue.shadeDefault,
domainFn: (Record record, _) => record.seconds,
measureFn: (Record record, _) => record.power,
data: _sampledRecords,
),
];
}
但即使这样也会产生type 'List<Series<dynamic, dynamic>>' is not a subtype of type 'List<Series<dynamic, num>>'
.
解决方案
问题是 simpleLineChart
不适合处理时间序列数据。让我们以NonzeroBoundMeasureAxis
(https://google.github.io/charts/flutter/example/axes/nonzero_bound_measure_axis)为例:它使用TimeSeriesChart
. 所以我参加了一场摔跤比赛,LineChart
而我应该选择一个更专业的图表(有多个),它支持基于时间序列的数据。
推荐阅读
- python - 使用python在excel中下拉选择自动化
- xamarin - 在 Xamarin Forms 中遇到异步/等待问题
- flutter - 如何升级 Android Studio Dart 插件?
- java - execCMD("cd ~/Desktop/Tmp/Server/ && java -javaagent:lib/Agent.jar -cp ./大创/大创.jar:testcase test.Bank");
- php - 使用环境变量指定密码时mysqli_connect失败
- firebase - Firebase SDK for iOS/Android 中的广告系列来源信息未存储在 Bigquery 的“traffic_source”字段中
- postgresql - 在另外 3 个表获得新行记录后创建触发器插入记录到表
- python - 烧瓶名称错误:名称“价格”未定义
- selenium-webdriver - 具有代理身份验证的 BrowserMobProxy 似乎挂起/阻止 HTTP 请求
- javascript - 推送到列表后为空