import 'package:flutter/material.dart';

class WaveClipper extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    Paint paint = Paint();
    Path path = Path();

    // Path number 1
    path = Path();
    path.lineTo(size.width * 0.05, size.height * 0.3);
    path.cubicTo(-0.03, size.height * 0.18, size.width * 0.02,
        size.height * 0.05, size.width * 0.05, 0);
    path.cubicTo(
        size.width * 0.05, 0, size.width * 0.92, 0, size.width * 0.92, 0);
    path.cubicTo(size.width, 0, size.width, size.height * 0.05, size.width,
        size.height * 0.07);
    path.cubicTo(size.width, size.height * 0.07, size.width, size.height * 0.91,
        size.width, size.height * 0.91);
    path.cubicTo(size.width, size.height, size.width * 0.94, size.height,
        size.width * 0.9, size.height);
    path.cubicTo(size.width * 0.9, size.height, size.width * 0.05, size.height,
        size.width * 0.05, size.height);
    path.cubicTo(size.width * 0.1, size.height * 0.95, size.width * 0.07,
        size.height * 0.87, size.width * 0.05, size.height * 0.84);
    path.cubicTo(-0.02, size.height * 0.76, size.width * 0.02,
        size.height * 0.63, size.width * 0.05, size.height * 0.58);
    path.cubicTo(size.width * 0.13, size.height * 0.45, size.width * 0.09,
        size.height * 0.34, size.width * 0.05, size.height * 0.3);
    path.cubicTo(size.width * 0.05, size.height * 0.3, size.width * 0.05,
        size.height * 0.3, size.width * 0.05, size.height * 0.3);
    return path;
  }

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

class BowClipper extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    Paint paint = Paint();
    Path path = Path();

    // Path number 1
    path = Path();
    path.lineTo(0, size.height);
    path.cubicTo(0, size.height, 0, size.height, 0, size.height);
    path.cubicTo(0, size.height, size.width * 0.89, size.height,
        size.width * 0.89, size.height);
    path.cubicTo(size.width, size.height, size.width, size.height, size.width,
        size.height * 0.88);
    path.cubicTo(size.width, size.height * 0.88, size.width, size.height * 0.11,
        size.width, size.height * 0.11);
    path.cubicTo(size.width, 0, size.width * 0.95, 0, size.width * 0.89, 0);
    path.cubicTo(
        size.width * 0.89, 0, size.width * 0.63, 0, size.width * 0.63, 0);
    path.cubicTo(size.width * 0.11, size.height * 0.04, size.width * 0.04,
        size.height * 0.68, 0, size.height);
    path.cubicTo(0, size.height, 0, size.height, 0, size.height);
    return path;
  }

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

class ConcavClipper extends CustomClipper<Path> {
  @override
  Path getClip(Size size) {
    Paint paint = Paint();
    Path path = Path();

    // Path number 1
    path.lineTo(size.width * 0.16, size.height * 0.58);
    path.cubicTo(size.width * 0.16, size.height * 0.16, size.width * 0.08,
        size.height * 0.1, size.width * 0.03, 0);
    path.cubicTo(
        size.width * 0.03, 0, size.width * 0.93, 0, size.width * 0.93, 0);
    path.cubicTo(size.width, 0, size.width, size.height * 0.05, size.width,
        size.height * 0.07);
    path.cubicTo(size.width, size.height * 0.07, size.width, size.height * 0.9,
        size.width, size.height * 0.9);
    path.cubicTo(size.width, size.height * 0.98, size.width * 0.95, size.height,
        size.width * 0.93, size.height);
    path.cubicTo(
        size.width * 0.93, size.height, 0, size.height, 0, size.height);
    path.cubicTo(size.width * 0.12, size.height * 0.9, size.width * 0.15,
        size.height * 0.68, size.width * 0.16, size.height * 0.58);
    path.cubicTo(size.width * 0.16, size.height * 0.58, size.width * 0.16,
        size.height * 0.58, size.width * 0.16, size.height * 0.58);
    return path;
  }

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