I want to achieve a custom shaped container as it is in the below image. Is there a way to build a custom shaped container in the Flutter?
To display a Round Image in Flutter, you can use Container with BoxDecoration, and use BoxShape. circle for shape and provide the image for image property.
Syntax: Container({Key key, AlignmentGeometry alignment, EdgeInsetsGeometry padding, Color color, Decoration decoration, Decoration foregroundDecoration, double width, double height, BoxConstraints constraints, EdgeInsetsGeometry margin, Matrix4 transform, Widget child, Clip clipBehavior: Clip. none});
Karol's answer is a bit vague. I decided to expand upon it with some actual code.
I think this is what you're looking for. The last class is specifically interesting for the question:
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: CustomPaint(
painter: Chevron(),
child: Container(
width: 100.0,
height: 120.0,
child: Padding(
padding: EdgeInsets.only(top: 30.0),
child: Align(
alignment: Alignment.topCenter,
child: Text("1", style: TextStyle(fontSize: 24.0)),
),
),
),
),
),
);
}
}
class Chevron extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final Gradient gradient = new LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.orangeAccent, Colors.yellow],
tileMode: TileMode.clamp,
);
final Rect colorBounds = Rect.fromLTRB(0, 0, size.width, size.height);
final Paint paint = new Paint()
..shader = gradient.createShader(colorBounds);
Path path = Path();
path.moveTo(0, 0);
path.lineTo(0, size.height);
path.lineTo(size.width / 2, size.height - size.height / 3);
path.lineTo(size.width, size.height);
path.lineTo(size.width, 0);
path.close();
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => false;
}
You can achieve this using CustomPainter.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With