import 'card_details.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; class CardProviderIcon extends StatefulWidget { const CardProviderIcon({required this.cardDetails, super.key}); final CardDetails? cardDetails; @override State createState() => _CardProviderIconState(); } class _CardProviderIconState extends State { final Map cardProviderSvg = { 'credit-card': '', 'error': '', '${CardProviderID.DiscoverCard.name}': '', '${CardProviderID.AmericanExpress.name}': '', '${CardProviderID.Mastercard.name}': '', '${CardProviderID.Visa.name}': '', '${CardProviderID.DinersClub.name}': '', '${CardProviderID.JCB.name}': '', }; final double height = 20; final double width = 30; @override Widget build(BuildContext context) { late Widget child; if (widget.cardDetails?.cardNumber != null && widget.cardDetails!.cardNumberFilled && widget.cardDetails!.validState == ValidState.invalidCard) { child = SvgPicture.string( key: const Key('invalid-card'), cardProviderSvg['error']!, color: Colors.red, height: height, width: width, ); } else { if (widget.cardDetails?.provider?.id == null) { child = SvgPicture.string( key: const Key('credit_card'), cardProviderSvg['credit-card']!, color: Colors.black, height: height, width: width, ); } else { child = createCardSvg(widget.cardDetails!.provider!.id); } } return AnimatedSwitcher( duration: const Duration(milliseconds: 150), transitionBuilder: (child, animation) { return ScaleTransition( scale: animation, child: FadeTransition( opacity: animation, child: child, )); }, child: child, ); } Widget createCardSvg(CardProviderID id) { return SvgPicture.string( key: Key('${id.name}-card'), cardProviderSvg[id.name]!, height: height, width: width, ); } }