From 4491d1e1674dea4d8d988b770e91c5fd5bce94fb Mon Sep 17 00:00:00 2001 From: monsieurtanuki Date: Tue, 7 May 2024 12:32:09 +0200 Subject: [PATCH] fix: 1874 - fixed side-effect crash for final dot / final dash (#1875) --- .../layer/misc/line_patterns/pixel_hiker.dart | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/src/layer/misc/line_patterns/pixel_hiker.dart b/lib/src/layer/misc/line_patterns/pixel_hiker.dart index f0c7baa4c..4eb4efb05 100644 --- a/lib/src/layer/misc/line_patterns/pixel_hiker.dart +++ b/lib/src/layer/misc/line_patterns/pixel_hiker.dart @@ -52,9 +52,13 @@ class DottedPixelHiker extends _PixelHiker { // side-effect of the last dot if (!closePath) { if (patternFit != PatternFit.none) { - final last = result.last; - if (last != offsets.last) { + if (result.isEmpty) { addVisibleOffset(offsets.last); + } else { + final last = result.last; + if (last != offsets.last) { + addVisibleOffset(offsets.last); + } } } } @@ -157,9 +161,17 @@ class DashedPixelHiker extends _PixelHiker { } } else if (patternFit == PatternFit.extendFinalDash) { final lastOffset = closePath ? offsets.first : offsets.last; - final lastVisible = result.last.end; - if (lastOffset != lastVisible) { - result.add(VisibleSegment(lastVisible, lastOffset)); + if (result.isEmpty) { + if (offsets.length >= 2) { + final beforeLastOffset = + offsets[closePath ? offsets.length - 1 : offsets.length - 2]; + result.add(VisibleSegment(beforeLastOffset, lastOffset)); + } + } else { + final lastVisible = result.last.end; + if (lastOffset != lastVisible) { + result.add(VisibleSegment(lastVisible, lastOffset)); + } } } }