import 'dart:async';
import 'dart:math';
import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_charts/charts.dart';
class Chart extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(debugShowCheckedModeBanner: false, home: LiveChart());
}
}
class LiveChart extends StatefulWidget {
@override
_LiveChartState createState() => _LiveChartState();
}
class _LiveChartState extends State<LiveChart> {
final dbRef = FirebaseDatabase.instance.reference();
//List<_ChartData> chartData = <_ChartData>[
// _ChartData(0, 42),
// _ChartData(1, 47),
// _ChartData(2, 33),
// _ChartData(3, 49),
// _ChartData(4, 54),
// _ChartData(5, 41),
// _ChartData(6, 58),
// _ChartData(7, 51),
// _ChartData(8, 98),
// _ChartData(9, 41),
// _ChartData(10, 53),
// _ChartData(11, 72),
// _ChartData(12, 86),
// _ChartData(13, 52),
// _ChartData(14, 94),
// _ChartData(15, 92),
// _ChartData(16, 86),
// _ChartData(17, 72),
// _ChartData(18, 94),
//];
Timer timer;
ChartSeriesController _chartSeriesController;
int count = 19;
num _getRandomInt(num min, num max) {
final Random random = Random();
return min + random.nextInt(max - min);
}
//void _updateDataSource(Timer timer) {
// chartData.add(_ChartData(count, _getRandomInt(0, 100)));
// if (chartData.length == 20) {
// chartData.removeAt(0);
// _chartSeriesController.updateDataSource(
// addedDataIndexes: <int>[chartData.length - 1],
// removedDataIndexes: <int>[0]);
// }
// count = count + 1;
//}
@override
Widget build(BuildContext context) {
timer = Timer.periodic(Duration(milliseconds: 5000), _updateDataSource);
return Scaffold(
body: StreamBuilder<void>(
stream: dbRef.child("Data").onValue,
builder: (context, snapshot) {
Widget widget;
if (snapshot.hasData) {
List<_ChartData> chartData = <_ChartData>[];
for (int index = 0;
index < snapshot.data.snapshot.lenght;
index++) {
DataSnapshot snaps = snapshot.data.snapshot[index];
chartData.add(_ChartData.fromMap(snaps.data));
}
widget = Container(
child: SfCartesianChart(
tooltipBehavior: TooltipBehavior(enable: true),
primaryXAxis: DateTimeAxis(),
series: <LineSeries<_ChartData, int>>[
LineSeries<_ChartData, int>(
onRendererCreated:
(ChartSeriesController controller) {
_chartSeriesController = controller;
},
dataSource: chartData,
xValueMapper: (_ChartData data, _) => data.xValue,
yValueMapper: (_ChartData data, _) => data.yValue)
]),
);
}
return widget;
}));
//return Container(
// child: SfCartesianChart(
// tooltipBehavior: TooltipBehavior(enable: true),
//primaryXAxis: DateTimeAxis();
// series: <LineSeries<_ChartData, int>>[
// LineSeries<_ChartData, int>(
// onRendererCreated: (ChartSeriesController controller) {
// _chartSeriesController = controller;
// },
// dataSource: chartData,
// xValueMapper: (_ChartData sales, _) => sales.first,
// yValueMapper: (_ChartData sales, _) => sales.second,
// )
// ],
// ),
//);
}
@override
void dispose() {
super.dispose();
timer?.cancel();
}
}
class _ChartData {
_ChartData({this.xValue, this.yValue});
_ChartData.fromMap(Map<String, int)
//final int first;
//final int second;
//_ChartData(this.first, this.second);
}