如何在颤振图中显示json数据

如何在颤振图中显示json数据,json,charts,httprequest,flutter,Json,Charts,Httprequest,Flutter,我还是个新手,我一直在尝试在条形图中显示http请求中的一些数据。我找不到任何这样的例子。我希望你们中的一些人能帮忙:) 我曾想过使用在线图库中的这个。我刚刚更改了我的应用程序的类名称: 导入“包装:颤振/材料.省道”; 以图表形式导入“包:图表\颤振/颤振.省道”; 类SimpleSeriesGend扩展了无状态小部件{ 最终清单系列清单; 最后的布尔动画; SimpleSeriesGend(this.seriesList,{this.animate}); 带采样数据的factory Sim

我还是个新手,我一直在尝试在条形图中显示http请求中的一些数据。我找不到任何这样的例子。我希望你们中的一些人能帮忙:)

我曾想过使用在线图库中的这个。我刚刚更改了我的应用程序的类名称:

导入“包装:颤振/材料.省道”;
以图表形式导入“包:图表\颤振/颤振.省道”;
类SimpleSeriesGend扩展了无状态小部件{
最终清单系列清单;
最后的布尔动画;
SimpleSeriesGend(this.seriesList,{this.animate});
带采样数据的factory SimpleSeriesGend{
返回新的SimpleSeriesGend(
_createSampleData(),
//禁用图像测试的动画。
动画:假,
);
}
@凌驾
小部件构建(构建上下文){
返回新图表。条形图(
系列列表,
动画制作:动画制作,
barGroupingType:charts.barGroupingType.grouped,
//将序列图例行为添加到图表以启用序列图例。
//默认情况下,图例将显示在图表上方。
行为:[新建图表.系列图例()],
);
}
///创建包含多个系列的系列列表
静态列表_createSampleData(){
最终工具1数据=[
新LiveWerkzeuge('WSP1',5),
新LiveWerkzeuge('WSP2',25),
新LiveWerkzeuge('WSP3',80),
新LiveWerkzeuge('WSP4',75),
新LiveWerkzeuge('WSP5',65),
新LiveWerkzeuge('WSP6',55),
新LiveWerkzeuge('WSP7',70),
新LiveWerkzeuge('WSP8',90),
];
返回[
新图表系列(
id:'WZG1',
域名fn:(LiveWerkzeuge-wear,)=>wear.wsp,
测量值:(LiveWerkzeuge磨损,)=>wear.belastug,
数据:工具1数据,
),
];
}
}
///样本顺序数据类型。
LiveWerkzeuge类{
最终串wsp;
最后一次射门;
LiveWerkzeuge(this.wsp,this.belastung);

}
我想你想要的是:

import 'dart:async';
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:charts_flutter/flutter.dart' as charts;

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List data;
  Timer timer;

  makeRequest() async {
    var response = await http.get(
      'http://localhost/werkzeug/public/api/data_tool1',
      headers: {'Accept': 'application/json'},
    );

    setState(() {
      data = json.decode(response.body);
    });
  }

  @override
  void initState() {
    super.initState();
    timer = new Timer.periodic(new Duration(seconds: 2), (t) => makeRequest());
  }

  @override
  void dispose() {
    timer.cancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('Tool Data'),
      ),
      body: data == null ? CircularProgressIndicator() : createChart(),
    );
  }

  charts.Series<LiveWerkzeuge, String> createSeries(String id, int i) {
    return charts.Series<LiveWerkzeuge, String>(
      id: id,
      domainFn: (LiveWerkzeuge wear, _) => wear.wsp,
      measureFn: (LiveWerkzeuge wear, _) => wear.belastung,
      // data is a List<LiveWerkzeuge> - extract the information from data
      // could use i as index - there isn't enough information in the question
      // map from 'data' to the series
      // this is a guess
      data: [
        LiveWerkzeuge('WSP1', data[i]['temp1']),
        LiveWerkzeuge('WSP2', data[i]['temp2']),
        LiveWerkzeuge('WSP3', data[i]['temp3']),
        LiveWerkzeuge('WSP4', data[i]['temp4']),
        LiveWerkzeuge('WSP5', data[i]['temp5']),
        LiveWerkzeuge('WSP6', data[i]['temp6']),
        LiveWerkzeuge('WSP7', data[i]['temp7']),
        LiveWerkzeuge('WSP8', data[i]['temp8']),
      ],
    );
  }

  Widget createChart() {
    // data is a List of Maps
    // each map contains at least temp1 (tool 1) and temp2 (tool 2)
    // what are the groupings?

    List<charts.Series<LiveWerkzeuge, String>> seriesList = [];

    for (int i = 0; i < data.length; i++) {
      String id = 'WZG${i + 1}';
      seriesList.add(createSeries(id, i));
    }

    return new charts.BarChart(
      seriesList,
      barGroupingType: charts.BarGroupingType.grouped,
    );
  }
}

class LiveWerkzeuge {
  final String wsp;
  final int belastung;

  LiveWerkzeuge(this.wsp, this.belastung);
}
导入'dart:async';
导入“dart:convert”;
进口“包装:颤振/材料.省道”;
将“package:http/http.dart”导入为http;
以图表形式导入“包:图表\颤振/颤振.省道”;
void main()=>runApp(新的MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
主页:新建MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState扩展状态{
列出数据;
定时器;
makeRequest()异步{
var response=wait http.get(
'http://localhost/werkzeug/public/api/data_tool1',
标题:{'Accept':'application/json'},
);
设置状态(){
data=json.decode(response.body);
});
}
@凌驾
void initState(){
super.initState();
计时器=新计时器。周期(新的持续时间(秒:2),(t)=>makeRequest());
}
@凌驾
无效处置(){
timer.cancel();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:新的appBar(
标题:新文本(“工具数据”),
),
body:data==null?CircularProgressIndicator():createChart(),
);
}
charts.Series创建系列(字符串id,int i){
返回图表。系列(
id:id,
域名fn:(LiveWerkzeuge-wear,)=>wear.wsp,
测量值:(LiveWerkzeuge磨损,)=>wear.belastug,
//数据是一个列表-从数据中提取信息
//可以使用i作为索引-问题中没有足够的信息
//从“数据”映射到系列
//这是一个猜测
数据:[
LiveWerkzeuge('WSP1',数据[i]['temp1']),
LiveWerkzeuge('WSP2',数据[i]['temp2']),
LiveWerkzeuge('WSP3',数据[i]['temp3']),
LiveWerkzeuge('WSP4',数据[i]['temp4']),
LiveWerkzeuge('WSP5',数据[i]['temp5']),
LiveWerkzeuge('WSP6',数据[i]['temp6']),
LiveWerkzeuge('WSP7',数据[i]['temp7']),
LiveWerkzeuge('WSP8',数据[i]['temp8']),
],
);
}
Widget createChart(){
//数据是地图的列表
//每个地图至少包含temp1(1号工具)和temp2(2号工具)
//什么是分组?
列表系列列表=[];
对于(int i=0;i
更改:

data = json.decode(response.body);
致:


我发现我只是提供了一个工具的数据,所以我显示的图表可能有点混乱。对不起。我编辑了代码。但正如我所看到的,这不应该是代码的问题。我最大的问题是如何转换数据,以便图表库能够识别它们以便正确显示。但我还是有个例外。我把它放在问题里了。感谢您的帮助。请尝试此新版本的
createChart
。如果仍然出现异常,模拟器将显示:RangeError(index):Invalud值:仅有效值为0:1重试此操作。数据是否只包含一个元素?这创建了正确数量的系列。是的,它只有一个元素,例如temp1或temp2等…现在它工作了,它不显示图表图例,但我应该能够使这项工作。但是图表显示了数据库中正确的数据。非常感谢您的帮助,我真的很感激:)
data = json.decode(utf8.decode(response.bodyBytes)); //for special characters