community_charts
community_charts copied to clipboard
Fix multiple null exceptions when tapping on bar graph rapidly
When tapping on bar graph rapidly, there is a race condition between bar selection and graph rendering, causing null exceptions at various places.
This is one of the exceptions:
-------- Exception caught by rendering library ---------------------------------
The following _TypeError was thrown during performLayout():
Null check operator used on a null value
The relevant error-causing widget was:
OrdinalComboChart OrdinalComboChart:file:///E:/work/app/lib/screens/stat_chart.dart:485:18
When the exception was thrown, this was the stack:
#0 BarRenderer.addPositionToDetailsForSeriesDatum (package:community_charts_common/src/chart/bar/bar_renderer.dart:89:59)
bar_renderer.dart:89
#1 BaseSeriesRenderer.getDetailsForSeriesDatum (package:community_charts_common/src/chart/common/series_renderer.dart:402:12)
series_renderer.dart:402
#2 BaseChart.getSelectedDatumDetails (package:community_charts_common/src/chart/common/base_chart.dart:318:41)
base_chart.dart:318
#3 LinePointHighlighter._updateViewData (package:community_charts_common/src/chart/common/behavior/line_point_highlighter.dart:198:16)
line_point_highlighter.dart:198
#4 BaseChart.fireOnAxisConfigured.<anonymous closure> (package:community_charts_common/src/chart/common/base_chart.dart:686:34)
base_chart.dart:686
#5 List.forEach (dart:core-patch/growable_array.dart:416:8)
growable_array.dart:416
#6 BaseChart.fireOnAxisConfigured (package:community_charts_common/src/chart/common/base_chart.dart:685:25)
base_chart.dart:685
#7 CartesianChart.onPostLayout (package:community_charts_common/src/chart/cartesian/cartesian_chart.dart:491:5)
cartesian_chart.dart:491
#8 BaseChart.layout (package:community_charts_common/src/chart/common/base_chart.dart:441:7)
base_chart.dart:441
#9 ChartContainerRenderObject.performLayout (package:community_charts_flutter/src/chart_container.dart:171:13)
chart_container.dart:171
#10 RenderObject.layout (package:flutter/src/rendering/object.dart:2577:7)
object.dart:2577
#11 RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:105:21)
proxy_box.dart:105
#12 RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:2416:7)
object.dart:2416
#13 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1051:18)
object.dart:1051
#14 PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:1064:15)
object.dart:1064
#15 RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:577:23)
binding.dart:577
#16 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1138:13)
binding.dart:1138
#17 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:443:5)
binding.dart:443
#18 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1392:15)
binding.dart:1392
#19 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1313:9)
binding.dart:1313
#20 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1171:5)
binding.dart:1171
#21 _invoke (dart:ui/hooks.dart:312:13)
hooks.dart:312
#22 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:419:5)
platform_dispatcher.dart:419
#23 _drawFrame (dart:ui/hooks.dart:283:31)
hooks.dart:283
The following RenderObject was being processed when the exception was fired: ChartContainerRenderObject<String>#db013 NEEDS-LAYOUT NEEDS-PAINT
parentData: <none> (can use size)
constraints: BoxConstraints(w=324.0, h=201.1)
semantic boundary
size: Size(324.0, 201.1)
painter: ChartContainerCustomPaint#33163()
RenderObject: ChartContainerRenderObject<String>#db013 NEEDS-LAYOUT NEEDS-PAINT
parentData: <none> (can use size)
constraints: BoxConstraints(w=324.0, h=201.1)
semantic boundary
size: Size(324.0, 201.1)
painter: ChartContainerCustomPaint#33163()
--------------------------------------------------------------------------------