import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; class StatsCard extends StatelessWidget { const StatsCard({ required this.title, required this.value, this.icon, this.iconColor, this.change, this.isPositive, this.subtitle, super.key, }); final String title; final String value; final IconData? icon; final Color? iconColor; final String? change; final bool? isPositive; final String? subtitle; @override Widget build(BuildContext context) { final theme = Theme.of(context); return Card( child: Padding( padding: const EdgeInsets.all(20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Text( title, style: theme.textTheme.bodyMedium?.copyWith( color: theme.colorScheme.onSurfaceVariant, ), overflow: TextOverflow.ellipsis, ), ), if (icon != null) Icon( icon, color: iconColor ?? theme.colorScheme.primary, size: 24, ), ], ), const Gap(8), Row( crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( value, style: theme.textTheme.headlineMedium?.copyWith( fontWeight: FontWeight.bold, ), ), if (change != null) ...[ const Gap(8), Container( padding: const EdgeInsets.symmetric( horizontal: 6, vertical: 2, ), decoration: BoxDecoration( color: (isPositive ?? true) ? Colors.green.withValues(alpha: 0.1) : Colors.red.withValues(alpha: 0.1), borderRadius: BorderRadius.circular(4), ), child: Text( change!, style: theme.textTheme.bodySmall?.copyWith( color: (isPositive ?? true) ? Colors.green : Colors.red, fontWeight: FontWeight.w600, ), ), ), ], ], ), if (subtitle != null) ...[ const Gap(4), Text( subtitle!, style: theme.textTheme.bodySmall?.copyWith( color: theme.colorScheme.onSurfaceVariant, ), ), ], ], ), ), ); } }