diff --git a/CHANGELOG.md b/CHANGELOG.md index 64f940279..4851514f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.0 +* fixed a critical got stuck in draw loop bug, +* set `BarChartGroupData` x as required property to keep consistency and prevent unpredictable bugs + ## 0.1.6 * added `enableNormalTouch` property to chart's TouchData to handle normal taps, and enabled by default. diff --git a/README.md b/README.md index 8ceb34d06..1dd817a93 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Thank you all! ```kotlin dependencies: - fl_chart: ^0.1.6 + fl_chart: ^0.2.0 ``` diff --git a/example/lib/line_chart/samples/line_chart_sample1.dart b/example/lib/line_chart/samples/line_chart_sample1.dart index 23c22198e..eb6f3faa4 100644 --- a/example/lib/line_chart/samples/line_chart_sample1.dart +++ b/example/lib/line_chart/samples/line_chart_sample1.dart @@ -20,9 +20,7 @@ class LineChartSample1State extends State { super.initState(); controller = StreamController(); - controller.stream.distinct().listen((LineTouchResponse response){ - print('response: ${response.touchInput}'); - }); + controller.stream.distinct().listen((LineTouchResponse response){}); } @override diff --git a/lib/src/chart/bar_chart/bar_chart_data.dart b/lib/src/chart/bar_chart/bar_chart_data.dart index fbe6541dd..dbe21a8ae 100644 --- a/lib/src/chart/bar_chart/bar_chart_data.dart +++ b/lib/src/chart/bar_chart/bar_chart_data.dart @@ -129,10 +129,10 @@ class BarChartGroupData { /// to draw them independently by y value together. /// [barsSpace] is the space between the bar lines inside group const BarChartGroupData({ - this.x, + @required this.x, this.barRods = const [], this.barsSpace = 2, - }); + }): assert(x != null); /// calculates the whole width of our group, /// by adding all rod's width and group space * rods count. diff --git a/lib/src/chart/bar_chart/bar_chart_painter.dart b/lib/src/chart/bar_chart/bar_chart_painter.dart index 7d9f81504..e0b1c2e5d 100644 --- a/lib/src/chart/bar_chart/bar_chart_painter.dart +++ b/lib/src/chart/bar_chart/bar_chart_painter.dart @@ -38,10 +38,15 @@ class BarChartPainter extends AxisChartPainter { drawBars(canvas, size, groupBarsPosition); drawTitles(canvas, size, groupBarsPosition); - super.drawTouchTooltip(canvas, size, data.barTouchData.touchTooltipData, [touchedSpot]); + if (touchedSpot != null) { + super.drawTouchTooltip(canvas, size, data.barTouchData.touchTooltipData, [touchedSpot]); + } - if (touchedResponseSink != null) { + if (touchedResponseSink != null && touchInputNotifier != null + && touchInputNotifier.value != null + && !(touchInputNotifier.value is NonTouch)) { touchedResponseSink.add(BarTouchResponse(touchedSpot, touchInputNotifier.value)); + releaseIfEndTouch(); } } @@ -342,6 +347,7 @@ class BarChartPainter extends AxisChartPainter { return null; } + final touch = touchInputNotifier.value; if (touch.getOffset() == null) { @@ -389,7 +395,7 @@ class BarChartPainter extends AxisChartPainter { } } - return BarTouchedSpot(null, null, null, null); + return null; } @override diff --git a/lib/src/chart/base/base_chart/base_chart_painter.dart b/lib/src/chart/base/base_chart/base_chart_painter.dart index 06740efdf..e207eb406 100644 --- a/lib/src/chart/base/base_chart/base_chart_painter.dart +++ b/lib/src/chart/base/base_chart/base_chart_painter.dart @@ -104,7 +104,9 @@ abstract class BaseChartPainter extends CustomPainter { /// checks that the touchInput is eligible to draw, /// and child painters can use this function to check then draw their default touch behaviors. bool shouldDrawTouch() { - if (touchInputNotifier == null || shouldDrawTouch == null) { + if (touchInputNotifier == null + || touchInputNotifier.value == null + || shouldDrawTouch == null) { return false; } @@ -118,4 +120,16 @@ abstract class BaseChartPainter extends CustomPainter { return true; } + + /// if the event was ended, we should release our touchInputNotifier + void releaseIfEndTouch() { + if (touchInputNotifier == null) { + return; + } + if (touchInputNotifier.value == null + || touchInputNotifier.value is FlLongPressEnd + || touchInputNotifier.value is FlPanEnd) { + touchInputNotifier.value = NonTouch(); + } + } } \ No newline at end of file diff --git a/lib/src/chart/base/base_chart/touch_input.dart b/lib/src/chart/base/base_chart/touch_input.dart index e7c84f667..9f4b24f38 100644 --- a/lib/src/chart/base/base_chart/touch_input.dart +++ b/lib/src/chart/base/base_chart/touch_input.dart @@ -90,4 +90,12 @@ class FlPanEnd extends FlTouchNormapInput { return localPosition; } +} + + +class NonTouch extends FlTouchInput { + @override + Offset getOffset() { + return null; + } } \ No newline at end of file diff --git a/lib/src/chart/line_chart/line_chart_painter.dart b/lib/src/chart/line_chart/line_chart_painter.dart index 24ee7423e..b0dff7391 100644 --- a/lib/src/chart/line_chart/line_chart_painter.dart +++ b/lib/src/chart/line_chart/line_chart_painter.dart @@ -97,8 +97,11 @@ class LineChartPainter extends AxisChartPainter { // Draw touch tooltip on most top spot super.drawTouchTooltip(canvas, viewSize, data.lineTouchData.touchTooltipData, touchedSpots); - if (touchedResponseSink != null) { + if (touchedResponseSink != null && touchInputNotifier != null + && touchInputNotifier.value != null + && !(touchInputNotifier.value.runtimeType is NonTouch)) { touchedResponseSink.add(LineTouchResponse(touchedSpots, touchInputNotifier.value)); + releaseIfEndTouch(); } } diff --git a/lib/src/chart/pie_chart/pie_chart_painter.dart b/lib/src/chart/pie_chart/pie_chart_painter.dart index 40a501e2c..3eb399ec9 100644 --- a/lib/src/chart/pie_chart/pie_chart_painter.dart +++ b/lib/src/chart/pie_chart/pie_chart_painter.dart @@ -53,8 +53,11 @@ class PieChartPainter extends BaseChartPainter { drawTexts(canvas, size); final touched = _getTouchedDetails(canvas, size, sectionsAngle); - if (touchedResponseSink != null) { + if (touchedResponseSink != null && touchInputNotifier != null + && touchInputNotifier.value != null + && !(touchInputNotifier.value.runtimeType is NonTouch)) { touchedResponseSink.add(touched); + releaseIfEndTouch(); } } diff --git a/pubspec.yaml b/pubspec.yaml index 9ad00e90a..0db3d8a92 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: fl_chart description: A powerful Flutter chart library, currently supporting Line Chart, Bar Chart and Pie Chart. -version: 0.1.6 +version: 0.2.0 author: Iman Khoshabi homepage: https://github.com/imaNNeoFighT/fl_chart