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

如何在Flutter中为fl_chart自定义饼图添加边框与模糊效果?

基于fl_chart实现带边框与模糊效果的自定义饼图

一、自定义形状边框实现

针对你基于pie_chart_sample2.dart的自定义饼图,给自定义形状加边框有两种直接方案:

  • 自定义绘制层叠加:在原饼块绘制完成后,用相同路径绘制描边样式的画笔。比如在示例的自定义CustomPainter实现里,绘制填充色路径后追加描边逻辑:
// 绘制饼块填充
canvas.drawPath(sectionPath, Paint()..color = section.color);

// 绘制边框
canvas.drawPath(
  sectionPath,
  Paint()
    ..style = PaintingStyle.stroke
    ..color = Colors.white // 自定义边框颜色
    ..strokeWidth = 2, // 自定义边框宽度
);
  • Stack组件嵌套:如果不想修改底层绘制逻辑,用Stack将饼图与自定义边框组件叠加,边框组件通过CustomPaint绘制与饼块匹配的路径描边,注意调整位置和大小与饼图对齐。

二、模糊效果实现

针对参考效果的饼块外阴影模糊,推荐以下实现方式:

  • 前置模糊阴影绘制:在绘制原饼块路径前,先绘制带模糊效果的同路径图层作为阴影:
import 'dart:ui';

// 绘制模糊阴影
canvas.save();
canvas.drawPath(
  sectionPath,
  Paint()
    ..color = Colors.black.withOpacity(0.3)
    ..imageFilter = ImageFilter.blur(sigmaX: 5, sigmaY: 5),
);
canvas.restore();

// 再绘制原饼块填充和边框
canvas.drawPath(sectionPath, Paint()..color = section.color);
canvas.drawPath(sectionPath, Paint()..style = PaintingStyle.stroke..color = Colors.white..strokeWidth = 2);
  • 组件级整体模糊:如果需要给整个饼图加模糊,直接用ImageFiltered包裹PieChart组件:
ImageFiltered(
  imageFilter: ImageFilter.blur(sigmaX: 2, sigmaY: 2),
  child: PieChart(/* 你的饼图配置 */),
)

三、原示例适配提示

原示例通过PieChartData的sections传入自定义PieChartSectionData,你可以自定义PieChartSectionData的badgeWidget,或者直接重写PieChart的painter属性,替换为整合了边框、模糊逻辑的自定义绘制实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:05:16