// ignore_for_file: library_private_types_in_public_api library ticket_widget; import 'package:flutter/material.dart'; import 'package:general_package/clip_shadow/clip_shadow.dart'; class TicketWidget extends StatefulWidget { const TicketWidget({ Key? key, required this.width, required this.height, required this.child, this.padding, this.margin, this.color = Colors.white, this.isCornerRounded = false, required this.shadow, }) : super(key: key); final double width; final double height; final Widget child; final Color color; final bool isCornerRounded; final EdgeInsetsGeometry? padding; final EdgeInsetsGeometry? margin; final List shadow; @override _TicketWidgetState createState() => _TicketWidgetState(); } class _TicketWidgetState extends State { @override Widget build(BuildContext context) { return Container( margin: widget.margin, child: ClipShadow( boxShadow: widget.shadow, clipper: TicketClipper(), child: AnimatedContainer( duration: const Duration(seconds: 1), width: widget.width, height: widget.height, padding: widget.padding, decoration: BoxDecoration( color: widget.color, borderRadius: widget.isCornerRounded ? BorderRadius.circular(20.0) : BorderRadius.circular(0.0), ), child: widget.child, ), ), ); } } class TicketClipper extends CustomClipper { @override Path getClip(Size size) { Path path = Path(); path.lineTo(0.0, size.height); path.lineTo(size.width, size.height); path.lineTo(size.width, 0.0); path.addOval( Rect.fromCircle(center: Offset(0.0, size.height / 2), radius: 20.0)); path.addOval(Rect.fromCircle( center: Offset(size.width, size.height / 2), radius: 20.0)); return path; } @override bool shouldReclip(CustomClipper oldClipper) => false; }