import 'package:flutter/material.dart'; const boxingHeaderStyle = TextStyle(fontSize: 10, fontWeight: FontWeight.w700); class BoxingDetailButton extends StatelessWidget { final bool enabled; final ColorScheme colorScheme; final VoidCallback onPressed; const BoxingDetailButton({ super.key, required this.enabled, required this.colorScheme, required this.onPressed, }); @override Widget build(BuildContext context) { final foreground = enabled ? colorScheme.primary : Colors.grey.shade400; final background = enabled ? Colors.blue.shade50 : Colors.grey.shade100; final border = enabled ? colorScheme.primary : Colors.grey.shade300; return SizedBox( height: 34, child: OutlinedButton.icon( onPressed: enabled ? onPressed : null, icon: Icon(Icons.receipt_long, size: 15, color: foreground), label: Text( '详情', style: TextStyle( fontSize: 12, fontWeight: FontWeight.w700, color: foreground, ), ), style: OutlinedButton.styleFrom( backgroundColor: background, side: BorderSide(color: border), padding: const EdgeInsets.symmetric(horizontal: 10), minimumSize: Size.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)), ), ), ); } } class BoxingModePill extends StatelessWidget { final bool isSingle; final String label; final bool enabled; final VoidCallback onTap; const BoxingModePill({ super.key, required this.isSingle, required this.label, required this.enabled, required this.onTap, }); @override Widget build(BuildContext context) { final bgColor = isSingle ? Colors.blue.shade700 : Colors.orange.shade700; return Material( borderRadius: BorderRadius.circular(8), color: bgColor, child: InkWell( borderRadius: BorderRadius.circular(8), onTap: enabled ? onTap : null, child: Container( height: 36, padding: const EdgeInsets.symmetric(horizontal: 10), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Icons.swap_horiz, color: Colors.white, size: 18), const SizedBox(width: 6), Flexible( child: FittedBox( fit: BoxFit.scaleDown, child: Text( label, maxLines: 1, style: const TextStyle( color: Colors.white, fontSize: 18, fontWeight: FontWeight.w800, ), ), ), ), const SizedBox(width: 8), Text( 'P2', style: TextStyle( color: Colors.white.withValues(alpha: 0.88), fontSize: 12, fontWeight: FontWeight.w700, ), ), ], ), ), ), ); } } class CompactIconButton extends StatelessWidget { final IconData icon; final Color? color; final VoidCallback? onTap; const CompactIconButton({ super.key, required this.icon, this.color, this.onTap, }); @override Widget build(BuildContext context) { return SizedBox( width: 28, height: 28, child: IconButton( icon: Icon(icon, size: 16), color: color, onPressed: onTap, padding: EdgeInsets.zero, constraints: const BoxConstraints(minWidth: 28, minHeight: 28), ), ); } } InputDecoration compactInputDecoration({ required bool disabled, required Color borderColor, }) { final disabledBorder = OutlineInputBorder( borderRadius: BorderRadius.circular(6), borderSide: BorderSide(color: Colors.grey.shade300), ); final activeBorder = OutlineInputBorder( borderRadius: BorderRadius.circular(6), borderSide: BorderSide(color: borderColor, width: 1.5), ); return InputDecoration( contentPadding: EdgeInsets.zero, border: activeBorder, enabledBorder: activeBorder, focusedBorder: activeBorder, disabledBorder: disabledBorder, filled: disabled, fillColor: Colors.grey.shade100, ); }