You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:36:02