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

Flutter中如何实现容器中部的弧形凹陷效果?

Flutter 顶部弧形缺口容器实现方案

直接通过自定义CustomClipper就能实现你要的顶部弧形缺口透明的容器,不需要叠加其他Widget。以下是完整代码:

1. 自定义弧形裁剪器

class TopArcClipper extends CustomClipper<Path> {
  final double gapWidth; // 缺口宽度
  final double gapHeight; // 缺口深度

  TopArcClipper({this.gapWidth = 120, this.gapHeight = 30});

  @override
  Path getClip(Size size) {
    final path = Path();
    // 起点:左侧缺口底部
    path.moveTo(0, gapHeight);
    // 绘制顶部弧形缺口:二次贝塞尔曲线,中间点为缺口最顶端
    path.quadraticBezierTo(
      size.width / 2, // 曲线控制点X(容器中点)
      0, // 曲线控制点Y(缺口顶端)
      size.width - gapWidth / 2, // 曲线终点X(右侧缺口底部)
      gapHeight, // 曲线终点Y(右侧缺口底部)
    );
    // 绘制容器右侧边
    path.lineTo(size.width, size.height);
    // 绘制容器底部边
    path.lineTo(0, size.height);
    // 闭合路径,回到起点
    path.close();
    return path;
  }

  @override
  bool shouldReclip(covariant TopArcClipper oldClipper) {
    // 只有当缺口参数变化时才重新裁剪
    return oldClipper.gapWidth != gapWidth || oldClipper.gapHeight != gapHeight;
  }
}

2. 使用示例

把需要的内容用ClipPath包裹,指定上面的裁剪器即可:

ClipPath(
  clipper: TopArcClipper(gapWidth: 150, gapHeight: 40), // 可自定义缺口大小
  child: Container(
    width: double.infinity,
    height: 200,
    color: Colors.blue, // 容器背景色
    child: const Center(
      child: Text(
        "带顶部弧形缺口的容器",
        style: TextStyle(color: Colors.white, fontSize: 18),
      ),
    ),
  ),
)

说明

  • 裁剪器会直接剪掉顶部的弧形区域,所以该区域会完全透明,能看到下方的内容
  • 通过调整gapWidth和gapHeight可以控制缺口的宽度和深度,适配不同需求
  • 如果需要更圆润的弧形,可以改用arcTo方法,不过二次贝塞尔曲线已经能满足大部分场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:45:02