Hello everyone,
while testing out Syncfusion charts I stumbled upon an error:
I tried to enable the tooltip on a waterfall chart (the example from the documentation). When clicking on one of the columns the app returns an error (see below). On a column chart everything works just fine and the tooltip is displayed properly.
I would really appreciate any ideas about the origin of this error.
Thanks a lot!
import 'package:flutter/material.dart';
import 'package:george/constants/styling.dart';
import 'package:syncfusion_flutter_charts/charts.dart';
class DashboardIncomeBalanceDetails extends StatefulWidget {
@override
State<DashboardIncomeBalanceDetails> createState() => _DashboardIncomeBalanceDetailsState();
}
class _DashboardIncomeBalanceDetailsState extends State<DashboardIncomeBalanceDetails> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: false,
titleSpacing: 0.0,
backgroundColor: Colors.white,
leading: BackButton(
color: kSubheadlineColor,
),
title: Text(
'Title',
style: TextStyle(
color: kHeadlineColor,
),
),
),
body: SafeArea(
child: Container(
child: Column(
children: [
SfCartesianChart(
tooltipBehavior: TooltipBehavior(enable: true),
primaryXAxis: NumericAxis(minimum: 0, interval: 2, maximum: 12),
series: <ChartSeries<ChartData, double>>[
WaterfallSeries<ChartData, double>(
enableTooltip: true,
dataSource: <ChartData>[
ChartData(2, 10),
ChartData(3, -3),
ChartData(4, 5, true),
ChartData(5, 4),
ChartData(6, -2),
ChartData(7, -5, true),
ChartData(8, -10),
ChartData(9, 8),
ChartData(10, 8),
ChartData(11, 5, false),
],
negativePointsColor: const Color.fromRGBO(229, 101, 144, 1),
intermediateSumColor: const Color.fromRGBO(79, 129, 188, 1),
totalSumColor: const Color.fromRGBO(79, 129, 188, 1),
color: const Color.fromRGBO(0, 189, 174, 1),
xValueMapper: (ChartData data, _) => data.x,
yValueMapper: (ChartData data, _) => data.y,
intermediateSumPredicate: (ChartData data, _) => data.isIntermediate,
totalSumPredicate: (ChartData data, _) => data.isTotal,
connectorLineSettings: WaterfallConnectorLineSettings(width: 2.5),
),
],
),
],
),
),
),
);
}
}
class ChartData {
ChartData(this.x, this.y, [this.isIntermediate, this.isTotal]);
final double? x;
final num? y;
final bool? isIntermediate;
final bool? isTotal;
}
======== Exception caught by gesture library =======================================================
The following _CastError was thrown while dispatching a pointer event:
Null check operator used on a null value
When the exception was thrown, this was the stack:
#0 TooltipRenderingDetails._renderCartesianChartTooltip.<anonymous closure> (package:syncfusion_flutter_charts/src/common/user_interaction/tooltip_rendering_details.dart:1440:66)
#1 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:614:13)
#2 TooltipRenderingDetails._renderCartesianChartTooltip (package:syncfusion_flutter_charts/src/common/user_interaction/tooltip_rendering_details.dart:1388:16)
#3 TooltipRenderingDetails._renderTooltipView (package:syncfusion_flutter_charts/src/common/user_interaction/tooltip_rendering_details.dart:119:7)
#4 TooltipRenderingDetails.showTooltipView (package:syncfusion_flutter_charts/src/common/user_interaction/tooltip_rendering_details.dart:145:7)
#5 TooltipRenderingDetails.showTooltip (package:syncfusion_flutter_charts/src/common/user_interaction/tooltip_rendering_details.dart:136:46)
#6 TooltipRenderingDetails.internalShowByPixel (package:syncfusion_flutter_charts/src/common/user_interaction/tooltip_rendering_details.dart:843:35)
#7 TooltipBehavior.showByPixel (package:syncfusion_flutter_charts/src/common/user_interaction/tooltip.dart:611:24)
#8 TooltipBehaviorRenderer.onTouchUp (package:syncfusion_flutter_charts/src/common/user_interaction/tooltip.dart:826:48)
#9 ContainerArea._performPointerUp (package:syncfusion_flutter_charts/src/chart/base/chart_base.dart:3309:16)
#10 ContainerArea.build.<anonymous closure>.<anonymous closure> (package:syncfusion_flutter_charts/src/chart/base/chart_base.dart:2395:23)
#11 RenderPointerListener.handleEvent (package:flutter/src/rendering/proxy_box.dart:2916:27)
#12 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:425:22)
#13 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:329:11)
#14 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:380:7)
#15 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:344:5)
#16 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:302:7)
#17 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:285:7)
#21 _invoke1 (dart:ui/hooks.dart:170:10)
#22 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:331:7)
#23 _dispatchPointerDataPacket (dart:ui/hooks.dart:94:31)
(elided 3 frames from dart:async)
Event: PointerUpEvent#e9f15(position: Offset(105.7, 352.0))
position: Offset(105.7, 352.0)
Target: RenderPointerListener#1ece8
needs compositing
parentData: <none> (can use size)
constraints: BoxConstraints(w=338.0, h=280.0)
size: Size(338.0, 280.0)
behavior: deferToChild
listeners: down, move, up, signal
====================================================================================================
Hi Alexander,
We tried to replicate your issue in a simple sample with the latest version of chart widget, but the reported issue is not reproduced at our end. We have also shared the sample below for your reference. Please modify the sample as per your requirement to replicate the issue, which will help us to assist you in a better way.
Regards,
Sriram Kiran
Hi Sriram,
Thanks a lot for your sample. That solved it for me.
The issue was that I was using an older version of syncfusion charts (^20.1.60). After the update everything works perfectly.
Thanks and best regards,
Alex
Hi Alexander,
Most welcome. Kindly get back to us if you have further queries. We are always happy to assist you.
Regards,
Sriram Kiran