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

如何在Flutter中旋转盒子并实现目标Clipper裁剪效果

Clipper裁剪预期效果

自定义波浪裁剪Clipper实现方案

以下是可直接实现上图波浪底部裁剪效果的自定义裁剪器代码,适配Flutter开发场景:

class WaveClipper extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    Path path = Path();
    // 路径起点移动到左上角
    path.lineTo(0, size.height - 40);
    // 第一段波浪贝塞尔曲线
    Offset firstControlPoint = Offset(size.width / 4, size.height);
    Offset firstEndPoint = Offset(size.width / 2, size.height - 20);
    path.quadraticBezierTo(
      firstControlPoint.dx,
      firstControlPoint.dy,
      firstEndPoint.dx,
      firstEndPoint.dy,
    );
    // 第二段波浪贝塞尔曲线
    Offset secondControlPoint = Offset(size.width * 3 / 4, size.height - 60);
    Offset secondEndPoint = Offset(size.width, size.height - 20);
    path.quadraticBezierTo(
      secondControlPoint.dx,
      secondControlPoint.dy,
      secondEndPoint.dx,
      secondEndPoint.dy,
    );
    // 路径延伸到右上角后闭合
    path.lineTo(size.width, 0);
    path.close();
    return path;
  }

  @override
  bool shouldReclip(covariant CustomClipper<Path> oldClipper) => false;
}

使用方法

调用时将自定义Clipper传入ClipPath组件即可:

ClipPath(
  clipper: WaveClipper(),
  child: Container(
    height: 220,
    color: Colors.lightBlue,
    // 可自由添加其他子组件内容
  ),
)

效果适配调整

如果渲染效果和你的预期不符,可直接修改对应参数调整:

  • 调整贝塞尔曲线控制点的Y轴数值,即可修改波浪的凸起/凹陷幅度
  • 修改size.height - 数值的具体数值,即可调整波浪距离容器底部的整体偏移高度
  • 增减贝塞尔曲线的段数,即可调整波浪的数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:48:04