createWaveProvider static method

PathProvider createWaveProvider(
  1. double waveWidth,
  2. double maxWaveHeight
)

Implementation

static PathProvider createWaveProvider(
  double waveWidth,
  double maxWaveHeight,
) {
  return (Size size, double progress) {
    double waveTotalWidth = size.width * 3;
    double top = size.height * (1 - progress);
    Path path = Path()
      ..moveTo(size.width, top)
      ..lineTo(size.width, size.height)
      ..lineTo(0, size.height)
      ..lineTo(-2 * size.width, top);
    //draw bezier
    double waveHeight = (1 - progress) * maxWaveHeight;
    //move wave
    double leftOffset = 2 * size.width * progress;
    path.lineTo(-2 * size.width + leftOffset, top);

    double drawWaveWidth = leftOffset;
    while (drawWaveWidth < waveTotalWidth) {
      path.relativeQuadraticBezierTo(
        waveWidth / 2,
        waveHeight,
        waveWidth,
        0,
      );
      path.relativeQuadraticBezierTo(
        waveWidth / 2,
        -waveHeight,
        waveWidth,
        0,
      );
      drawWaveWidth += (waveWidth * 2);
    }
    return path;
  };
}