| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- // 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<BoxShadow> shadow;
- @override
- _TicketWidgetState createState() => _TicketWidgetState();
- }
- class _TicketWidgetState extends State<TicketWidget> {
- @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<Path> {
- @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<Path> oldClipper) => false;
- }
|