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

Flutter:如何在Syncfusion Spline Chart中显示多个Tooltip?

如何在Syncfusion Flutter Spline Chart单系列折线图上显示多个Tooltip

可以实现,根据你的期望效果,推荐以下两种方案:

方案一:固定显示每个点的"Tooltip"样式标签

这种方式会在每个数据标记点旁固定展示带框的数值,和你期望的视觉效果完全匹配,本质是用**数据标签(Data Label)**模拟Tooltip样式:

修改你的SplineSeries配置,添加dataLabelSettings:

SplineSeries<ChartData, String>(
  dataSource: chartData,
  xValueMapper: (ChartData sales, _) => sales.x,
  yValueMapper: (ChartData sales, _) => sales.y,
  markerSettings: const MarkerSettings(isVisible: true),
  color: BaseColors.primaryBlueColor,
  name: 'High',
  // 配置数据标签模拟Tooltip
  dataLabelSettings: DataLabelSettings(
    isVisible: true,
    textStyle: const TextStyle(fontSize: 12, color: Colors.white),
    backgroundColor: BaseColors.primaryBlueColor,
    borderColor: Colors.white,
    borderWidth: 1,
    borderRadius: BorderRadius.circular(4),
    labelPosition: ChartDataLabelPosition.top, // 标签放在标记点上方
    // 自定义标签内容,显示带百分号的数值
    builder: (data, point, series, pointIndex, seriesIndex) {
      return Text('${data.y}%');
    },
  ),
),

方案二:hover触发显示多个关联点信息

如果你需要的是鼠标hover时显示多个点的Tooltip内容,可以通过自定义TooltipBehavior的builder来实现:

tooltipBehavior: TooltipBehavior(
  enable: true,
  // 自定义Tooltip内容,可展示多个点的数据
  builder: (dynamic data, dynamic point, dynamic series, int pointIndex, int seriesIndex) {
    return Container(
      padding: const EdgeInsets.all(8),
      color: Colors.white,
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: chartData.map((item) {
          return Text('${item.x}: ${item.y}%', style: const TextStyle(color: Colors.black));
        }).toList(),
      ),
    );
  },
),

完整修改后的代码示例(方案一)

SfCartesianChart(
  plotAreaBorderWidth: 0,
  title: const ChartTitle(text: ''),
  primaryXAxis: const CategoryAxis(
    majorGridLines: MajorGridLines(width: 0),
  ),
  primaryYAxis: const NumericAxis(
    majorGridLines:
        MajorGridLines(width: 1, color: BaseColors.lightGreyColor),
    opposedPosition: true,
    maximum: 100,
    maximumLabels: 4,
    labelFormat: '{value}%',
    axisLine: AxisLine(width: 1),
  ),
  series: _getDefaultSplineSeries(chartData),
);
}

List<SplineSeries<ChartData, String>> _getDefaultSplineSeries(
    List<ChartData> chartData) {
  return <SplineSeries<ChartData, String>>[
    SplineSeries<ChartData, String>(
      dataSource: chartData,
      xValueMapper: (ChartData sales, _) => sales.x,
      yValueMapper: (ChartData sales, _) => sales.y,
      markerSettings: const MarkerSettings(isVisible: true),
      color: BaseColors.primaryBlueColor,
      name: 'High',
      dataLabelSettings: DataLabelSettings(
        isVisible: true,
        textStyle: const TextStyle(fontSize: 12, color: Colors.white),
        backgroundColor: BaseColors.primaryBlueColor,
        borderColor: Colors.white,
        borderWidth: 1,
        borderRadius: BorderRadius.circular(4),
        labelPosition: ChartDataLabelPosition.top,
        builder: (data, point, series, pointIndex, seriesIndex) {
          return Text('${data.y}%');
        },
      ),
    ),
  ];
}

内容的提问来源于stack exchange,提问作者khush pajwani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:17:44