Draw wave curve on top of image slider in flutter - flutter

I need to implement below like effect on top of image slider, please guide me

You can create custom ClipPath
class Clipper extends CustomClipper<Path> {
#override
Path getClip(Size size) {
Path path = Path();
path.lineTo(0, size.height);
path.quadraticBezierTo(
size.width / 4, size.height - 40, size.width / 2, size.height - 20);
path.quadraticBezierTo(
3 / 4 * size.width, size.height, size.width, size.height - 30);
path.lineTo(size.width, 0);
return path;
}
#override
bool shouldReclip(Clipper oldClipper) => false;
}
find sample snippet
Note : this is basic idea you to have modify by your own requirement
sample output

Related

Flutter - How to clip an arc container?

How to implement effect like pic below.
I have a rect container(width:400, height:100), I want to clip the blue area of the rect, so I can get the orange area.Attention,
The orange arc is tangent to the bottom line . Could you give the details code?
You can use a Custom Clipper class , to get this type of shape I will share an example code you can change values according to your need
class ClipPathClass extends CustomClipper<Path> {
#override
Path getClip(Size size) {
double radius = 50;
var path = Path();
path.lineTo(0.0, size.height - 30);
var firstControlPoint = Offset(size.width / 4, size.height);
var firstPoint = Offset(size.width / 2, size.height);
path.quadraticBezierTo(firstControlPoint.dx, firstControlPoint.dy,
firstPoint.dx, firstPoint.dy);
var secondControlPoint = Offset(size.width - (size.width / 4), size.height);
var secondPoint = Offset(size.width, size.height - 30);
path.quadraticBezierTo(secondControlPoint.dx, secondControlPoint.dy,
secondPoint.dx, secondPoint.dy);
path.lineTo(size.width, 0.0);
path.lineTo(size.width - radius, 0);
path.close();
return path;
}
#override
bool shouldReclip(CustomClipper<Path> oldClipper) => false;
}
then use this ClipPathClass() like ,
ClipPath(
clipper: ClipPathClass(),
child: Container(width:400,height: 100,color:Colors.grey)
)

How can I achieve an inclined looking path in flutter (taking this picture as example)

Path I am trying to achieve
I had been trying to achieve this path, but I am having trouble when clipping, not only it clips the opposite part of the container but also gets my path to be dirty.
I am also looking on achieving the same effect, but with an opposite direction.
This is the code i have done so far(It is an up arc clip path):
class UpArcClip extends CustomClipper<Path> {
#override
Path getClip(Size size) {
final path = Path();
path.lineTo(0, size.height);
path.lineTo(0.0, size.height - 100);
path.quadraticBezierTo(
size.width / 2, size.height, size.width, size.height - 100);
path.lineTo(size.width, 0.0);
path.close();
return path;
}
#override
bool shouldReclip(CustomClipper old) => false;
}
Already achieved it by myself:
class LeftInclinedArcClipper extends CustomClipper<Path> {
#override
Path getClip(Size size) {
final path = Path();
path.moveTo(0, size.height);
path.lineTo(0, size.height * 0.7);
path.quadraticBezierTo(
size.width / 3, size.height * 0.45, size.width, size.height * 0.53);
path.lineTo(size.width, size.height);
path.close();
return path;
}
#override
bool shouldReclip(CustomClipper old) => false;
}

Round corners of a Path for clipRect not working

How can I make my corners rounded in a Path for ClipPath?
class MyClipper extends CustomClipper<Path> {
#override
Path getClip(Size size) {
final Path path = Path();
path.moveTo(0, 0);
path.lineTo(size.width - 10, 0);
path.lineTo(size.width, size.height / 2);
path.lineTo(size.width - 10, size.height);
path.lineTo(0, size.height);
path.lineTo(0, 0);
path.close();
return path;
}
#override
bool shouldReclip(MyClipper oldClipper) => false;
}
I tried adding this in the middle but it didn't give the desired results
path.quadraticBezierTo(size.width - radius, size.height / 2 - radius, size.width + radius, size.height / 2 + radius);
Trying to round this part
Draw the black part of this first:
And then replace the lineTo between the black arrows with the bezier method using the control point
Example how to use the quadraticBezierTo method:
path.moveTo(0, 0);
final controlPoint = Offset(1, 1);
path.quadraticBezierTo(controlPoint.dx, controlPoint.dy, 0, 2);
path.lineTo(0, 0);
This draws half an oval.

Custom Clipper Bezier curve Flutter

I am currently unable to draw a bezier curve.
The output I have right now is :
The output that I need is :
What should I add here as bezier values to get the curve?
The code snippet of the custom clipper is:
class OnBoardingClipper extends CustomClipper<Path> {
#override
Path getClip(Size size) {
var path = Path();
path.moveTo(0.0, size.height * 0.18);
path.lineTo(0.0, size.height);
path.lineTo(size.width, size.height);
path.lineTo(size.width, 0.0);
return path;
}
#override
bool shouldReclip(CustomClipper<Path> oldClipper) => false;
}
P.S. Thanks for reading and apologies in case of bad formatting. :-)
You can add a quadraticBezier with values of e.g., (3 / 4 * size.width, size.height * 0.18) , (size.width, size.height * 0.05).
Code:
#override
Path getClip(Size size) {
var path = Path();
path.moveTo(0.0, size.height * 0.18);
path.quadraticBezierTo(
3 / 4 * size.width, size.height * 0.18, size.width, size.height * 0.05);
path.lineTo(size.width, size.height);
path.lineTo(0.0, size.height);
return path;
}
Result:

Apply clip path to bottom bar in Flutter

How do I apply a ClipPath to a BottomBar or a BottomNavigationBar in Flutter? I am trying to clip around the fourth tab in BottomBar(The clipped path should always be around fourth element). This is what I have so far:
#override
getClip(Size size) {
Path path = Path();
path.lineTo(0, size.height);
path.lineTo(size.width, size.height);
path.lineTo(size.width, 0);
path.lineTo(size.width * 0.79, 0);
path.quadraticBezierTo(size.width*0.77, 0, size.width*0.77, size.height*0.2);
path.cubicTo(size.width * 0.77, size.height*1.2, size.width * 0.61, size.height*1.2,
size.width * 0.61, size.height*0.2);
path.quadraticBezierTo(size.width*0.61, 0, size.width*0.60,0);
path.lineTo(size.width * 0.59, 0);
return path;
}
#override
bool shouldReclip(CustomClipper oldClipper) {
return false;
}
}
WHAT I WANT:
The fourth element needs to be within the Center of the ClipPath for all screen sizes within a Stack.
Thanks!