Description
What is the bug?
Maybe FM 8.1.0 related?
I can reproduce easily by simply toggling off layers (removing things like polygons or lines widgets).
When this happens, the map no longer responds, and it just continually throws exceptions
I reverted back to 8.0.0, and the issue went away.
It appears that in some cases the code path for hit testing (for instance in _PolygonPainter.elementHitTest) is triggering the access of _viewportRect without ensuring it’s initialized.
════════ Exception caught by gestures library ═════════
The following LateError was thrown while handling a pointer data packet:
LateInitializationError: Field '_viewportRect@1639329998' has not been initialized.
When the exception was thrown, this was the stack:
#0 FeatureLayerUtils.viewportRect (package:flutter_map/src/layer/shared/feature_layer_utils.dart:16:28)
feature_layer_utils.dart:16
#1 FeatureLayerUtils.areOffsetsVisible (package:flutter_map/src/layer/shared/feature_layer_utils.dart:40:11)
feature_layer_utils.dart:40
#2 _PolygonPainter.elementHitTest.checkIfHit (package:flutter_map/src/layer/polygon_layer/painter.dart:75:12)
painter.dart:75
#3 FeatureLayerUtils.workAcrossWorlds (package:flutter_map/src/layer/shared/feature_layer_utils.dart:58:13)
feature_layer_utils.dart:58
#4 _PolygonPainter.elementHitTest (package:flutter_map/src/layer/polygon_layer/painter.dart:112:12)
painter.dart:112
#5 HitDetectablePainter.hitTest (package:flutter_map/src/layer/shared/layer_interactivity/internal_hit_detectable.dart:69:11)
internal_hit_detectable.dart:69
#6 RenderCustomPaint.hitTestSelf (package:flutter/src/rendering/custom_paint.dart:569:43)
custom_paint.dart:569
#7 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:58)
box.dart:2943
#8 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#9 RenderTransform.hitTestChildren.<anonymous closure> (package:flutter/src/rendering/proxy_box.dart:2560:22)
proxy_box.dart:2560
#10 BoxHitTestResult.addWithRawTransform (package:flutter/src/rendering/box.dart:876:31)
box.dart:876
#11 BoxHitTestResult.addWithPaintTransform (package:flutter/src/rendering/box.dart:810:12)
box.dart:810
#12 RenderTransform.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:2556:19)
proxy_box.dart:2556
#13 RenderTransform.hitTest (package:flutter/src/rendering/proxy_box.dart:2550:12)
proxy_box.dart:2550
#14 RenderShiftedBox.hitTestChildren.<anonymous closure> (package:flutter/src/rendering/shifted_box.dart:95:24)
shifted_box.dart:95
#15 BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:840:31)
box.dart:840
#16 RenderShiftedBox.hitTestChildren (package:flutter/src/rendering/shifted_box.dart:90:21)
shifted_box.dart:90
#17 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#18 RenderBoxContainerDefaultsMixin.defaultHitTestChildren.<anonymous closure> (package:flutter/src/rendering/box.dart:3339:25)
box.dart:3339
#19 BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:840:31)
box.dart:840
#20 RenderBoxContainerDefaultsMixin.defaultHitTestChildren (package:flutter/src/rendering/box.dart:3334:33)
box.dart:3334
#21 RenderStack.hitTestChildren (package:flutter/src/rendering/stack.dart:695:12)
stack.dart:695
#22 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#23 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#24 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#25 RenderBoxContainerDefaultsMixin.defaultHitTestChildren.<anonymous closure> (package:flutter/src/rendering/box.dart:3339:25)
box.dart:3339
#26 BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:840:31)
box.dart:840
#27 RenderBoxContainerDefaultsMixin.defaultHitTestChildren (package:flutter/src/rendering/box.dart:3334:33)
box.dart:3334
#28 RenderStack.hitTestChildren (package:flutter/src/rendering/stack.dart:695:12)
stack.dart:695
#29 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#30 RenderBoxContainerDefaultsMixin.defaultHitTestChildren.<anonymous closure> (package:flutter/src/rendering/box.dart:3339:25)
box.dart:3339
#31 BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:840:31)
box.dart:840
#32 RenderBoxContainerDefaultsMixin.defaultHitTestChildren (package:flutter/src/rendering/box.dart:3334:33)
box.dart:3334
#33 RenderStack.hitTestChildren (package:flutter/src/rendering/stack.dart:695:12)
stack.dart:695
#34 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#35 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#36 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#37 RenderClipRect.hitTest (package:flutter/src/rendering/proxy_box.dart:1568:18)
proxy_box.dart:1568
#38 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#39 RenderProxyBoxWithHitTestBehavior.hitTest (package:flutter/src/rendering/proxy_box.dart:183:19)
proxy_box.dart:183
#40 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#41 RenderProxyBoxWithHitTestBehavior.hitTest (package:flutter/src/rendering/proxy_box.dart:183:19)
proxy_box.dart:183
#42 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#43 RenderProxyBoxWithHitTestBehavior.hitTest (package:flutter/src/rendering/proxy_box.dart:183:19)
proxy_box.dart:183
#44 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#45 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#46 _RenderLayoutBuilder.hitTestChildren (package:flutter/src/widgets/layout_builder.dart:407:19)
layout_builder.dart:407
#47 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#48 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#49 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#50 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#51 RenderProxyBoxWithHitTestBehavior.hitTest (package:flutter/src/rendering/proxy_box.dart:183:19)
proxy_box.dart:183
#52 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#53 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#54 RenderBoxContainerDefaultsMixin.defaultHitTestChildren.<anonymous closure> (package:flutter/src/rendering/box.dart:3339:25)
box.dart:3339
#55 BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:840:31)
box.dart:840
#56 RenderBoxContainerDefaultsMixin.defaultHitTestChildren (package:flutter/src/rendering/box.dart:3334:33)
box.dart:3334
#57 RenderStack.hitTestChildren (package:flutter/src/rendering/stack.dart:695:12)
stack.dart:695
#58 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#59 RenderBoxContainerDefaultsMixin.defaultHitTestChildren.<anonymous closure> (package:flutter/src/rendering/box.dart:3339:25)
box.dart:3339
#60 BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:840:31)
box.dart:840
#61 RenderBoxContainerDefaultsMixin.defaultHitTestChildren (package:flutter/src/rendering/box.dart:3334:33)
box.dart:3334
#62 RenderCustomMultiChildLayoutBox.hitTestChildren (package:flutter/src/rendering/custom_layout.dart:429:12)
custom_layout.dart:429
#63 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#64 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#65 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#66 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#67 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#68 RenderPhysicalModel.hitTest (package:flutter/src/rendering/proxy_box.dart:2032:18)
proxy_box.dart:2032
#69 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#70 RenderProxyBoxWithHitTestBehavior.hitTest (package:flutter/src/rendering/proxy_box.dart:183:19)
proxy_box.dart:183
#71 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#72 RenderProxyBoxWithHitTestBehavior.hitTest (package:flutter/src/rendering/proxy_box.dart:183:19)
proxy_box.dart:183
#73 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#74 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#75 _RenderLayoutBuilder.hitTestChildren (package:flutter/src/widgets/layout_builder.dart:407:19)
layout_builder.dart:407
#76 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#77 RenderBoxContainerDefaultsMixin.defaultHitTestChildren.<anonymous closure> (package:flutter/src/rendering/box.dart:3339:25)
box.dart:3339
#78 BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:840:31)
box.dart:840
#79 RenderBoxContainerDefaultsMixin.defaultHitTestChildren (package:flutter/src/rendering/box.dart:3334:33)
box.dart:3334
#80 RenderStack.hitTestChildren (package:flutter/src/rendering/stack.dart:695:12)
stack.dart:695
#81 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#82 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#83 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#84 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#85 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#86 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#87 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#88 RenderIgnorePointer.hitTest (package:flutter/src/rendering/proxy_box.dart:3625:31)
proxy_box.dart:3625
#89 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#90 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#91 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#92 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#93 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#94 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#95 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#96 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#97 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#98 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#99 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#100 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#101 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#102 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#103 RenderOffstage.hitTest (package:flutter/src/rendering/proxy_box.dart:3756:31)
proxy_box.dart:3756
#104 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#105 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#106 _RenderTheaterMixin.hitTestChildren.childHitTest (package:flutter/src/widgets/overlay.dart:1097:22)
overlay.dart:1097
#107 BoxHitTestResult.addWithPaintOffset (package:flutter/src/rendering/box.dart:840:31)
box.dart:840
#108 _RenderTheaterMixin.hitTestChildren (package:flutter/src/widgets/overlay.dart:1098:22)
overlay.dart:1098
#109 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#110 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#111 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#112 RenderAbsorbPointer.hitTest (package:flutter/src/rendering/proxy_box.dart:3877:56)
proxy_box.dart:3877
#113 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#114 RenderProxyBoxWithHitTestBehavior.hitTest (package:flutter/src/rendering/proxy_box.dart:183:19)
proxy_box.dart:183
#115 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#116 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#117 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#118 RenderCustomPaint.hitTestChildren (package:flutter/src/rendering/custom_paint.dart:564:18)
custom_paint.dart:564
#119 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#120 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#121 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#122 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#123 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#124 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#125 RenderTapRegionSurface.hitTest (package:flutter/src/widgets/tap_region.dart:234:28)
tap_region.dart:234
#126 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#127 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#128 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#129 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#130 RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:128:19)
proxy_box.dart:128
#131 RenderBox.hitTest (package:flutter/src/rendering/box.dart:2943:11)
box.dart:2943
#132 RenderView.hitTest (package:flutter/src/rendering/view.dart:311:12)
view.dart:311
#133 RendererBinding.hitTestInView (package:flutter/src/rendering/binding.dart:649:34)
binding.dart:649
#134 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:408:7)
binding.dart:408
#135 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:394:5)
binding.dart:394
#136 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:341:7)
binding.dart:341
#137 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:308:9)
binding.dart:308
#138 _invoke1 (dart:ui/hooks.dart:332:13)
hooks.dart:332
#139 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:451:7)
platform_dispatcher.dart:451
#140 _dispatchPointerDataPacket (dart:ui/hooks.dart:267:31)
hooks.dart:267
How can we reproduce it?
For me, just toggling various polygon layers off causes the exceptions immediately.
Do you have a potential solution?
No response