display axis values
This commit is contained in:
parent
ba4723433b
commit
2c21d3f994
@ -37,7 +37,6 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
final stream = getDataStream().asBroadcastStream();
|
final stream = getDataStream().asBroadcastStream();
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
backgroundColor: Colors.black,
|
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: Text(widget.title),
|
title: Text(widget.title),
|
||||||
),
|
),
|
||||||
|
@ -8,27 +8,33 @@ import 'point.dart';
|
|||||||
|
|
||||||
class RealTimeGraph extends StatefulWidget {
|
class RealTimeGraph extends StatefulWidget {
|
||||||
const RealTimeGraph({
|
const RealTimeGraph({
|
||||||
Key? key,
|
|
||||||
this.updateDelay = const Duration(milliseconds: 50),
|
this.updateDelay = const Duration(milliseconds: 50),
|
||||||
this.speed = 1,
|
|
||||||
this.graphStroke = 0.5,
|
|
||||||
this.graphColor = Colors.red,
|
|
||||||
this.axisColor = Colors.green,
|
|
||||||
this.axisWidth = 1.0,
|
|
||||||
required this.stream,
|
|
||||||
this.pointsSpacing = 3.0,
|
|
||||||
this.displayMode = ChartDisplay.line,
|
this.displayMode = ChartDisplay.line,
|
||||||
|
this.displayYAxisValues = true,
|
||||||
|
this.axisColor = Colors.black87,
|
||||||
|
this.graphColor = Colors.black45,
|
||||||
|
this.pointsSpacing = 3.0,
|
||||||
|
this.graphStroke = 1,
|
||||||
|
this.axisStroke = 1.0,
|
||||||
|
this.axisTextBuilder,
|
||||||
|
required this.stream,
|
||||||
|
this.minValue = 0,
|
||||||
|
this.speed = 1,
|
||||||
|
Key? key,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
final Stream<double> stream;
|
final Widget Function(double)? axisTextBuilder;
|
||||||
final Color graphColor;
|
|
||||||
final double axisWidth;
|
|
||||||
final Color axisColor;
|
|
||||||
final Duration updateDelay;
|
|
||||||
final int speed;
|
|
||||||
final double graphStroke;
|
|
||||||
final double pointsSpacing;
|
|
||||||
final ChartDisplay displayMode;
|
final ChartDisplay displayMode;
|
||||||
|
final bool displayYAxisValues;
|
||||||
|
final Stream<double> stream;
|
||||||
|
final Duration updateDelay;
|
||||||
|
final double pointsSpacing;
|
||||||
|
final double axisStroke;
|
||||||
|
final double graphStroke;
|
||||||
|
final Color graphColor;
|
||||||
|
final Color axisColor;
|
||||||
|
final double minValue;
|
||||||
|
final int speed;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
RealTimeGraphState createState() => RealTimeGraphState();
|
RealTimeGraphState createState() => RealTimeGraphState();
|
||||||
@ -67,35 +73,57 @@ class RealTimeGraphState extends State<RealTimeGraph>
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double get maxValue {
|
||||||
|
return _data.isEmpty ? 0 : _data.map((point) => point.y).reduce(max);
|
||||||
|
}
|
||||||
|
|
||||||
|
double get minValue => widget.minValue;
|
||||||
|
|
||||||
|
double get medianValue => (maxValue + minValue) / 2;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return LayoutBuilder(
|
return Row(
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
children: [
|
||||||
|
if (widget.displayYAxisValues)
|
||||||
|
Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
widget.axisTextBuilder?.call(maxValue) ?? textBuilder(maxValue),
|
||||||
|
widget.axisTextBuilder?.call(medianValue) ??
|
||||||
|
textBuilder(medianValue),
|
||||||
|
widget.axisTextBuilder?.call(minValue) ?? textBuilder(minValue),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
color: widget.axisColor,
|
||||||
|
width: widget.axisStroke,
|
||||||
|
height: double.maxFinite,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: LayoutBuilder(
|
||||||
builder: (context, constraints) {
|
builder: (context, constraints) {
|
||||||
if (!constraints.maxWidth.isFinite || !constraints.maxHeight.isFinite) {
|
if (!constraints.maxWidth.isFinite ||
|
||||||
|
!constraints.maxHeight.isFinite) {
|
||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
|
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
key: Key('${constraints.maxWidth}${constraints.maxHeight}'),
|
key: Key(
|
||||||
|
'${constraints.maxWidth}${constraints.maxHeight}'),
|
||||||
height: constraints.maxHeight,
|
height: constraints.maxHeight,
|
||||||
width: constraints.maxWidth,
|
width: constraints.maxWidth,
|
||||||
child: Row(
|
child: ClipRRect(
|
||||||
mainAxisSize: MainAxisSize.max,
|
|
||||||
children: [
|
|
||||||
Container(
|
|
||||||
color: widget.axisColor,
|
|
||||||
width: widget.axisWidth,
|
|
||||||
height: constraints.maxHeight,
|
|
||||||
),
|
|
||||||
Column(
|
|
||||||
mainAxisSize: MainAxisSize.max,
|
|
||||||
children: [
|
|
||||||
ClipRRect(
|
|
||||||
child: RepaintBoundary(
|
child: RepaintBoundary(
|
||||||
child: CustomPaint(
|
child: CustomPaint(
|
||||||
size: Size(
|
size: Size(
|
||||||
constraints.maxWidth - widget.axisWidth,
|
constraints.maxWidth,
|
||||||
constraints.maxHeight - widget.axisWidth,
|
constraints.maxHeight,
|
||||||
),
|
),
|
||||||
painter: widget.displayMode == ChartDisplay.points
|
painter: widget.displayMode == ChartDisplay.points
|
||||||
? _PointGraphPainter(
|
? _PointGraphPainter(
|
||||||
@ -112,17 +140,26 @@ class RealTimeGraphState extends State<RealTimeGraph>
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
Container(
|
Container(
|
||||||
color: widget.axisColor,
|
color: widget.axisColor,
|
||||||
height: widget.axisWidth,
|
height: widget.axisStroke,
|
||||||
width: constraints.maxWidth - widget.axisWidth,
|
width: double.maxFinite,
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
],
|
|
||||||
),
|
),
|
||||||
|
],
|
||||||
);
|
);
|
||||||
},
|
}
|
||||||
|
|
||||||
|
Widget textBuilder(double value) {
|
||||||
|
return Text(
|
||||||
|
value.toString(),
|
||||||
|
style: const TextStyle(color: Colors.black),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user