我对 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