7

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?

enter image description here

halfer
  • 19,824
  • 17
  • 99
  • 186
Harsha Vardhan
  • 1,048
  • 6
  • 19
  • 34

1 Answers1

10

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;
}

Sven
  • 3,204
  • 1
  • 20
  • 28
  • 1
    I think the container is still a rectangle. And we painted over with customer painter. BoxShadow will not work around the curves and angles. They will follow a rectangular container. Is it possible to actually crop a container to this size rather than painting only that area which we want to see and leaving everything else transparent – GunJack Jun 03 '20 at 06:37