json - 如何在flutter syncfusion_flutter_charts中显示JSON数据
问题描述
我正在尝试调用 api,以使用 syncfusion_flutter_charts 上的数据,但是,我收到一个错误:参数类型“字符串函数(SensorData,int,动态)”无法分配给参数类型“字符串函数( SensorData, int)'.dart(argument_type_not_assignable)。
我究竟做错了什么?
我的代码:
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_charts/charts.dart';
import 'package:syncfusion_flutter_charts/sparkcharts.dart';
import 'package:http/http.dart' as http;
// import 'package:http/http.dart' as http;
class LineChartHum extends StatefulWidget {
// LineChartHum({Key? key}) : super(key: key);
@override
_LineChartHumState createState() => _LineChartHumState();
}
class _LineChartHumState extends State<LineChartHum> {
@override
void initState() {
loadSensorData();
super.initState();
}
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
margin: EdgeInsets.all(16),
height: 300,
child: SfCartesianChart(
zoomPanBehavior: ZoomPanBehavior(
//
enablePinching: true,
enableDoubleTapZooming: true,
enablePanning: true,
enableSelectionZooming: true,
enableMouseWheelZooming: true,
),
primaryXAxis: CategoryAxis(),
title: ChartTitle(text: 'Humidity Sensor'),
tooltipBehavior: TooltipBehavior(enable: true),
series: <LineSeries<SensorData, String>>[
LineSeries<SensorData, String>(
dataSource: chartData,
xValueMapper: (SensorData, sensors, _) => sensors.timeStamp,
yValueMapper: (SensorData, sensors, _) => sensors.sensorValue,
)
]
))
],
),
);
}
List<SensorData> chartData = [];
Future loadSensorData() async {
final jsonResponse = json.decode(toString());
// print(jsonString);
// print(jsonResponse);
setState(() {
for (Map i in jsonResponse) chartData.add(SensorData.fromJson(i));
});
}
}
Future<String> fetchUsers() async {
var url = Uri.parse('https://api.thingspeak.com/channels/960293/fields/1.json');
http.Response response = await http.get(url);
print(response.body);
return response.body.toString();
}
class SensorData {
SensorData({
this.timeStamp,
this.sensorValue,
});
DateTime timeStamp;
int sensorValue;
factory SensorData.fromJson(Map<String, dynamic> json) {
return SensorData(
timeStamp: json['timeStamp'],
sensorValue: json['SensorValue'],
);
}
}
我的 API 喜欢: https ://api.thingspeak.com/channels/960293/fields/1.json 图表的外观: https ://thingspeak.com/channels/960293 。我希望它至少显示在此链接:https ://thingspeak.com/channels/960293
解决方案
我们在最后分析了您的场景并检查了您的代码片段,我们发现您在设置系列的 xValueMapper 和 yValueMapper 属性的值时出现了语法错误。请参考下面的代码片段以供参考。
LineSeries<SensorData, String>(
dataSource: chartData,
/// Syntax error due to specifying comma (,) between the class and its object_name
/// xValueMapper: (SensorData, sensors, _) => sensors.timeStamp,
/// yValueMapper: (SensorData, sensors, _) => sensors.sensorValue,
/// Correct Syntax
xValueMapper: (SensorData sensors, _) => sensors.timeStamp,
yValueMapper: (SensorData sensors, _) => sensors.sensorValue,
)
推荐阅读
- bash - Bat/Cmd 与 Sh/Bash 参数“stat”-like 扩展
- webforms - webscan 不喜欢我的 x-xss-protection 标头 - 有什么想法吗?
- python - 有没有办法为用户定义的函数调用和存储excel文件?
- netlogo - 在不使用 Levelspace 或 Hubnet 的情况下在两个模型之间传递信息
- c# - 如何使按钮大小为窗口大小的三分之一?WPF C#
- firebase - Firebase 托管子域限制
- scala - IntelliJ 中的 Scala 单元测试因 java.lang.NoClassDefFoundError scoverage/Invoker$ 而失败
- terraform - 如何将 CRD 从 github 应用到具有 terraform 的集群?
- php - SF 4.4 - XXXController::getParameter() 方法缺少参数包以正常工作
- html - 如何在整个浏览器选项卡的 iframe 中加载链接?