Flutter中syncfusion_flutter_charts的onMarkerRender回调未触发
syncfusion_flutter_charts v19.3.47 onMarkerRender 回调不触发解决方案
- 版本触发约束:19.3.47版本的
onMarkerRender回调无法在marker全默认配置下触发,需要给每个LineSeries的MarkerSettings额外添加至少一个自定义样式属性,比如设置borderWidth: 0.1即可。 - 动画阻塞问题:当前你给LineSeries设置了1500ms的动画,该版本下回调会在动画完全结束后才会触发,测试阶段可先将
animationDuration设为0验证回调是否正常触发。 - 索引逻辑错误:你当前共有2个LineSeries,索引从0开始计数,你代码中判断
seriesIndex == 1和seriesIndex == 2,其中seriesIndex == 2永远不会命中,需要调整为判断0和1。 - 异步数据更新问题:如果你的
lineChartData是异步获取后赋值的,需要在数据更新后调用setState触发图表重绘,才会执行onMarkerRender回调。
修改后可运行的核心代码示例:
SfCartesianChart( onMarkerRender: (MarkerRenderArgs args) { print(args); ChartData dataPoint = lineChartData[args.pointIndex ?? 0]; // 修正索引判断:第一个系列索引为0,第二个为1 if ((dataPoint.inns1Wkt && args.seriesIndex == 0) || (dataPoint.inns2Wkt && args.seriesIndex == 1)) { args.color = args.seriesIndex == 0 ? Colors.red : Colors.amber; args.markerHeight = 10; args.markerWidth = 10; } else { args.markerHeight = 0; args.markerWidth = 0; } }, legend: Legend( isVisible: true, position: LegendPosition.bottom, ), title: ChartTitle( textStyle: Theme.of(context) .textTheme .subtitle2 ?.copyWith(fontWeight: FontWeight.bold), text: 'comparision', ), trackballBehavior: _trackballBehavior1, series: <LineSeries<ChartData, num>>[ LineSeries<ChartData, num>( name: widget.match.summary!.inns1.battingTeam!.name, // 测试阶段可先设为0验证回调 animationDuration: 1500, dataSource: lineChartData, xValueMapper: (ChartData sales, _) => sales.over, yValueMapper: (ChartData sales, _) => sales.inns1TotalRun, // 新增borderWidth触发回调 markerSettings: MarkerSettings(isVisible: true, borderWidth: 0.1), emptyPointSettings: EmptyPointSettings( mode: EmptyPointMode.gap)), LineSeries<ChartData, num>( animationDuration: 1500, name: widget.match.summary!.inns2.battingTeam!.name, dataSource: lineChartData, xValueMapper: (ChartData sales, _) => sales.over, yValueMapper: (ChartData sales, _) => sales.inns2TotalRun, dataLabelMapper: (ChartData sales, _) => '${sales.over}', // 新增borderWidth触发回调 markerSettings: MarkerSettings( isVisible: true, borderWidth: 0.1 ), emptyPointSettings: EmptyPointSettings(mode: EmptyPointMode.gap)), ])
内容的提问来源于stack exchange,提问作者Harinath
相关产品推荐
相关产品推荐

