diff --git a/lib/src/extensions/bar_chart_data_extension.dart b/lib/src/extensions/bar_chart_data_extension.dart index e381c6d89..b5a931cbf 100644 --- a/lib/src/extensions/bar_chart_data_extension.dart +++ b/lib/src/extensions/bar_chart_data_extension.dart @@ -10,10 +10,19 @@ extension BarChartDataExtension on BarChartData { final spaceAvailable = viewWidth - sumWidth; void spaceEvenly() { - final eachSpace = spaceAvailable / (barGroups.length + 1); + if (barGroups.length == 1) { + groupsX[0] = viewWidth / 2; + return; + } + + final eachSpace = spaceAvailable / (barGroups.length - 1); + var tempX = 0.0; barGroups.asMap().forEach((i, group) { - tempX += eachSpace; + if (i != 0) { + tempX += eachSpace; + } + tempX += group.width / 2; groupsX[i] = tempX; tempX += group.width / 2; diff --git a/test/chart/bar_chart/bar_chart_painter_test.dart b/test/chart/bar_chart/bar_chart_painter_test.dart index c3595ba45..ede6323cd 100644 --- a/test/chart/bar_chart/bar_chart_painter_test.dart +++ b/test/chart/bar_chart/bar_chart_painter_test.dart @@ -615,7 +615,7 @@ void main() { expect(callWithAlignment(BarChartAlignment.end), [80.0, 122.5, 172.5]); expect( callWithAlignment(BarChartAlignment.spaceEvenly), - [40, 92.5, 152.5], + [20.0, 92.5, 172.5], ); expect( callWithAlignment(BarChartAlignment.spaceAround), diff --git a/test/extensions/bar_chart_data_extensions_test.dart b/test/extensions/bar_chart_data_extensions_test.dart index 00796049c..1891bfce6 100644 --- a/test/extensions/bar_chart_data_extensions_test.dart +++ b/test/extensions/bar_chart_data_extensions_test.dart @@ -7,46 +7,48 @@ import '../chart/data_pool.dart'; void main() { group('BarChartDataExtension.calculateGroupsX', () { test('calculates correct positions for basic alignments', () { + const width = 200.0; + expect( MockData.barChartData1 .copyWith(alignment: BarChartAlignment.start) - .calculateGroupsX(100), + .calculateGroupsX(width), [9.0, 43.0, 77.0], ); expect( MockData.barChartData1 .copyWith(alignment: BarChartAlignment.end) - .calculateGroupsX(100), - [23.0, 57.0, 91.0], + .calculateGroupsX(width), + [123.0, 157.0, 191.0], ); expect( MockData.barChartData1 .copyWith(alignment: BarChartAlignment.center) - .calculateGroupsX(100), - [16.0, 50.0, 84.0], + .calculateGroupsX(width), + [66.0, 100.0, 134.0], ); expect( MockData.barChartData1 .copyWith(alignment: BarChartAlignment.spaceBetween) - .calculateGroupsX(100), - [9.0, 50.0, 91.0], + .calculateGroupsX(width), + [9.0, 100.0, 191.0], ); expect( MockData.barChartData1 .copyWith(alignment: BarChartAlignment.spaceAround) - .calculateGroupsX(100), - [16.666666666666668, 50.0, 83.33333333333334], + .calculateGroupsX(width), + [33.33333333333333, 99.99999999999999, 166.66666666666666], ); expect( MockData.barChartData1 .copyWith(alignment: BarChartAlignment.spaceEvenly) - .calculateGroupsX(100), - [20.5, 50.0, 79.5], + .calculateGroupsX(width), + [9.0, 100.0, 191.0], ); }); @@ -62,7 +64,7 @@ void main() { MockData.barChartData1 .copyWith(alignment: alignment) .calculateGroupsX(60), - [10.5, 30.0, 49.5], + [9.0, 30.0, 51.0], ); }, ); @@ -75,5 +77,12 @@ void main() { throwsAssertionError, ); }); + + test('Test shrinkWrapOnWidthOverflow calcualtes spacing correctly', () { + expect( + MockData.barChartData1.calculateGroupsX(100), + [9.0, 50.0, 91.0], + ); + }); }); }