diff --git a/lib/src/extensions/path_extension.dart b/lib/src/extensions/path_extension.dart index 9a47e1cce..8ed0e0337 100644 --- a/lib/src/extensions/path_extension.dart +++ b/lib/src/extensions/path_extension.dart @@ -10,7 +10,7 @@ extension DashedPath on Path { /// For example, the array `[5, 10]` would result in dashes 5 pixels long /// followed by blank spaces 10 pixels long. Path toDashedPath(List? dashArray) { - if (dashArray != null) { + if (dashArray != null && dashArray.isNotEmpty) { final castedArray = dashArray.map((value) => value.toDouble()).toList(); final dashedPath = dashPath(this, dashArray: CircularIntervalList(castedArray)); diff --git a/test/extensions/path_extension_test.dart b/test/extensions/path_extension_test.dart index aced26386..48f1fb61d 100644 --- a/test/extensions/path_extension_test.dart +++ b/test/extensions/path_extension_test.dart @@ -22,4 +22,16 @@ void main() { expect(HelperMethods.equalsPaths(path1.toDashedPath([10, 5]), path2), true); }); + + test('toDashedPath returns the original path for an empty dashArray', () { + // Regression test: previously, passing an empty list reached + // `CircularIntervalList([]).next` inside `dashPath()` and threw + // `RangeError` for any non-empty source path. An empty `dashArray` has no + // dashes to repeat, so the source path is returned unchanged — mirroring + // the existing `null` behaviour. + final path = Path() + ..moveTo(0, 0) + ..lineTo(10, 0); + expect(path.toDashedPath([]), path); + }); }