如何在flutter图表中显示json数据

2023-12-01

我对 flutter 还很陌生,我一直在尝试在条形图中显示来自 http 请求的一些数据。我找不到任何这方面的例子。我希望你们中的一些人能够提供帮助:)

我想用这个Chart来自在线画廊。我刚刚更改了我的应用程序的类名称:

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

class SimpleSeriesLegend extends StatelessWidget {
  final List<charts.Series> seriesList;
  final bool animate;

  SimpleSeriesLegend(this.seriesList, {this.animate});

  factory SimpleSeriesLegend.withSampleData() {
    return new SimpleSeriesLegend(
      _createSampleData(),
      // Disable animations for image tests.
      animate: false,
    );
  }

  @override
  Widget build(BuildContext context) {
    return new charts.BarChart(
      seriesList,
      animate: animate,
      barGroupingType: charts.BarGroupingType.grouped,
      // Add the series legend behavior to the chart to turn on series legends.
      // By default the legend will display above the chart.
      behaviors: [new charts.SeriesLegend()],
    );
  }

  /// Create series list with multiple series
  static List<charts.Series<LiveWerkzeuge, String>> _createSampleData() {
    final tool1Data = [
      new LiveWerkzeuge ('WSP1', 5),
      new LiveWerkzeuge ('WSP2', 25),
      new LiveWerkzeuge ('WSP3', 80),
      new LiveWerkzeuge ('WSP4', 75),
      new LiveWerkzeuge ('WSP5', 65),
      new LiveWerkzeuge ('WSP6', 55),
      new LiveWerkzeuge ('WSP7', 70),
      new LiveWerkzeuge ('WSP8', 90),
    ];
    
    return [
      new charts.Series<LiveWerkzeuge, String>(
        id: 'WZG1',
        domainFn: (LiveWerkzeuge wear, _) => wear.wsp,
        measureFn: (LiveWerkzeuge wear, _) => wear.belastung,
        data: tool1Data,
      ),
    ];
  }

}
/// Sample ordinal data type.
class LiveWerkzeuge {
  final String wsp;
  final int belastung;

  LiveWerkzeuge(this.wsp, this.belastung);
}
This is the only way it would show my code correctly, sorry.

这是我发现的一个简单代码,用于访问和显示 ListView 中的数据并自动更新。我只是想学习如何做到这一点,它对我有用:

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

import 'package:flutter/material.dart';

import 'package:http/http.dart' as http;

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @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> {
  String url = 'http://localhost/werkzeug/public/api/data_tool1';
  List data;
  Timer timer;

  Future<String> makeRequest() async {
    var response = await http
        .get(Uri.encodeFull(url), headers: {"Accept": "application/json"});

    setState(() {
      var extractdata = JSON.decode(response.body);
      data = extractdata;
    });
  }

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

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

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(
          title: new Text('Tool Data'),
        ),
        body: new ListView.builder(
            itemCount: data == null ? 0 : data.length,
            itemBuilder: (BuildContext context, int i) {
              return new ListTile(
                title: new Text('Tool 1 Temperature is : ''${data[i]["temp1"]}' ' and tool 2 is: ''${data[i]["temp2"]}'),
              );
            }
        )
    );
  }
}

现在我想将这两者结合起来。

数据如下所示:

[{“时间戳”:“2018-06-29 14:39:18”,“rpm”:0,“rpm_filter”:0,“accel”:0,“temp1”:104,“temp2”:746,”临时3":134,"临时4":77,"临时5":0,"临时6":0,"临时7":0,"临时8":0,"DMS1":0,"DMS2":0,"DMS3" :0,"DMS4":0,"电池":0,"冲击":0,"shock_accel":0,"shock_degxy":0,"shock_degxz":0,"错误":0,"connection_id":0 ,"磨损1":0,"磨损2":0,"磨损3":0,"磨损4":0,"磨损5":0,"磨损6":0,"磨损7":0,"磨损8":0," standzeit1":0,"standzeit2":0,"standzeit3":0,"standzeit4":0,"standzeit5":0,"standzeit6":0,"standzeit7":0,"standzeit8":0}]

新异常:

I/flutter(7654):══╡小部件库捕获异常╞══════════════════════════ ════════ ═════════════════════════ I/flutter ( 7654): 构建 MyHomePage(dirty, state: _MyHomePageState#9477b) 时抛出以下 RangeError: I/flutter(7654):RangeError(索引):无效值:唯一有效值为0:1 我/颤振(7654): I/flutter (7654):抛出异常时,这是堆栈: I/flutter (7654): #0 列表。[] (dart:core/runtime/libgrowable_array.dart:141:60) 我/flutter(7654):#1 _MyHomePageState.createSeries(文件:///Users/Eti/AndroidStudioProjects/test_json_app/lib/main.dart:71:35) 我/flutter(7654):#2 _MyHomePageState.createChart(文件:///Users/Eti/AndroidStudioProjects/test_json_app/lib/main.dart:89:7) 我/flutter(7654):#3 _MyHomePageState.build(文件:///Users/Eti/AndroidStudioProjects/test_json_app/lib/main.dart:57:58) 我/flutter(7654):#4 StatefulElement.build(包:flutter/src/widgets/framework.dart:3743:27) I/flutter (7654): #5 ComponentElement.performRebuild (包:flutter/src/widgets/framework.dart:3655:15) I/flutter (7654): #6 Element.rebuild (包:flutter/src/widgets/framework.dart:3508:5) I/flutter (7654): #7 BuildOwner.buildScope (包:flutter/src/widgets/framework.dart:2255:33) I/flutter(7654):#8 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.drawFrame(包:flutter/src/widgets/binding.dart:626:20) I/flutter ( 7654): #9 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5) I/flutter (7654): #10 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (包:flutter/src/scheduler/binding.dart:990:15) I/flutter(7654):#11 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame(包:flutter/src/scheduler/binding.dart:930:9) I/flutter(7654):#12 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame(包:flutter/src/scheduler/binding.dart:842:5) 我/颤振(7654):#13 _invoke(dart:ui/hooks.dart:120:13) 我/颤振(7654):#14 _drawFrame(dart:ui/hooks.dart:109:3) 我/扑(7654):════════════════════════════════════ ═══════ ════════════════════════════════════════ ══════════ ═══════ I/flutter (7654): 抛出另一个异常: RangeError (index): Invalid value: Only valid value is 0: 1 I/flutter (7654): 抛出另一个异常: RangeError (index): Invalid value: Only valid value is 0: 1


我想你想要的是:

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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在flutter图表中显示json数据 的相关文章

随机推荐

  • 将结果存入变量

    我有以下示例代码 我可以通过打印功能在控制台中看到正确的结果 Define a model for linear regression const model tf sequential model add tf layers dense
  • 谷歌日历 API 令牌将在 7 天后过期

    I used 本指南创建 Google 日历OAuth2客户端 ID 和客户端密钥 然后 我使用 gcalcli 命令创建 API 访问令牌 gcalcli noauth local webserver client id clientid
  • Firebase:限制同一电话号码或同一设备的短信数量

    我们正在尝试在我们的 Android 应用程序中实现 firebase 电话身份验证 如此处所述link 它在我们的应用程序中运行良好 服务器端验证也按预期工作 现在我们想为同一电话号码或同一设备添加每日短信数量限制 以防止滥用 链接引用
  • 使用 VADump 跟踪内存使用情况 - OpenProcess 失败 c0000034

    读完一篇最新一期 MSDN 杂志中的文章 我想尝试使用 VADump 来分解我编写的一些应用程序的内存使用情况 我的电脑上唯一的可执行文件副本位于 c Program Files Microsoft Visual Studio 8 Comm
  • 使用 jq 处理巨大的 GEOJson 文件

    给定一个 GEOJson 文件如下 type FeatureCollection features type Feature properties FEATCODE 15014 geometry type Polygon coordinat
  • Java 计算百分比的算术

    我的 java 应用程序有一个小问题 我必须计算他们完成后的分数 我使用这个方法 public Float ScoreProcent int questions int correct Float x new Float questions
  • Phantomjs 与 Facebook 的 SSL 握手失败 [重复]

    这个问题在这里已经有答案了 我正在尝试使用 phantomjs 为 Facebook 构建一个网络抓取工具 由于 SSL 握手失败 连接失败 我在 Twitter 上得到了相同的结果 但谷歌工作正常 有谁知道这个问题的解决方案 我正在运行
  • Jinja2 中的 zip(list1, list2) ?

    我正在 Jinja2 中进行代码生成 并且经常想一起迭代两个列表 即变量名称和类型 是否有一种简单的方法可以做到这一点 或者我是否需要传递一个预压缩列表 我在中找不到这样的功能docs或谷歌搜索 修改jinja2 Environment全局
  • Visual Studio 2012 中的 c++11 std::mutex 编译器错误

    这是一个关于 C 11 标准中死锁的探索 在 C Concurrency in Action 的 sec3 2 4 中 有一个示例 防止多线程死锁 对于没有这本书的人来说 另外 还有一个几乎类似的例子可以参考 http en cpprefe
  • 在 jupyter 笔记本中保留 pandas 数据框显示的额外空白

    在 jupyter Notebook 中 数据框中多余的空格被删除 但有时这不是首选 例如 df pd DataFrame A a b c B 1 2 df 我得到的结果 A B 0 a b 1 1 c 2 但我想要 A B 0 a b 1
  • 显然缺少 getline() 的重载,在 GCC 4.7.2 和 Clang 3.2 中将 RRef 传输到流

    我在尝试使用时遇到了意外的编译错误getline 使用临时流对象 include
  • mysqli 中的输出 Inserted.row

    我有以下sql表 ID 电子邮件 fbid 当我执行查询时 INSERT INTO users email fbid VALUES randomvalue otherrandomvalue 我想获取插入行的 id 为此 我尝试像这样编辑查询
  • NodeJS:智能 JSON 转换为 Excel 文件

    我正在使用 NodeJS 我想将 JSON 格式的对象导出到 Excel 文件 我很清楚有 至少 三个 npm 包用于此目的 但到目前为止 这些包都没有给我我梦想的输出 这是我的 javascript 对象 var myObject has
  • System.Text.Json.JsonSerializer.Deserialize() 的 .net 5.0 签名更改

    我正在尝试从 NET Core 3 1 到 NET 5 0 并在使用时收到一堆可空性警告Deserialize
  • java中从HTML中删除css信息

    是否有任何库或预先编写的代码可以从 HTML 代码中删除 css 属性 要求是 Java 代码必须解析输入的 html 文档 并删除 css 属性并生成输出 html 文档 例如 如果输入 html 文档具有此元素 p class abc
  • CasperJS/PhantomJS .then 在 do/while 循环中不起作用

    像这样的事情对我来说似乎很合乎逻辑 但导致幻像 wtfcrash 这就是它在日志中的名称 但没有提供有用的信息 do casper then function var targetFound false links this evaluat
  • Java 反射:创建一个实现类

    Class someInterface Class fromName some package SomeInterface 我现在如何创建一个新类来实现someInterface 我需要创建一个新类 并将其传递给需要的函数SomeInter
  • 如何在 android 中的 EditText 上显示数字键盘?

    我基本上只是想在某个 EditText 获得焦点后立即切换到数字键盘模式 您可以配置一个inputType为您EditText
  • 从另一个类方法更新 UI - Cocoa

    我想从 AppDelegate 更新应用程序中的 UI 但每当我这样调用它时 Controller object Controller alloc init object methodHere 好像没有更新UI 我在这里做错了什么 我已经放
  • 如何在flutter图表中显示json数据

    我对 flutter 还很陌生 我一直在尝试在条形图中显示来自 http 请求的一些数据 我找不到任何这方面的例子 我希望你们中的一些人能够提供帮助 我想用这个Chart来自在线画廊 我刚刚更改了我的应用程序的类名称 import pack