import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'dart:math' as math; // Glass 제거: Material 3 Card로 대체 import 'themed_text.dart'; // import '../theme/app_colors.dart'; import '../l10n/app_localizations.dart'; import '../utils/reduce_motion.dart'; /// 구독이 없을 때 표시되는 빈 화면 위젯 /// /// 애니메이션 효과와 함께 사용자에게 구독 추가를 유도합니다. class EmptyStateWidget extends StatelessWidget { final AnimationController fadeController; final AnimationController rotateController; final AnimationController slideController; final VoidCallback onAddPressed; const EmptyStateWidget({ super.key, required this.fadeController, required this.rotateController, required this.slideController, required this.onAddPressed, }); @override Widget build(BuildContext context) { final beginOffset = ReduceMotion.isEnabled(context) ? const Offset(0, 0.05) : const Offset(0, 0.2); final fade = Tween(begin: 0, end: 1).animate( CurvedAnimation(parent: fadeController, curve: Curves.easeIn), ); final slide = Tween(begin: beginOffset, end: Offset.zero).animate( CurvedAnimation(parent: slideController, curve: Curves.easeOutBack), ); return FadeTransition( opacity: fade, child: Center( child: SlideTransition( position: slide, child: RepaintBoundary( child: Card( margin: const EdgeInsets.all(16), elevation: 3, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), side: BorderSide( color: Theme.of(context) .colorScheme .outline .withValues(alpha: 0.5), ), ), child: Padding( padding: const EdgeInsets.all(32), child: Column( mainAxisSize: MainAxisSize.min, children: [ AnimatedBuilder( animation: rotateController, builder: (context, child) { final angleScale = ReduceMotion.isEnabled(context) ? 0.2 : 1.0; return Transform.rotate( angle: angleScale * rotateController.value * 2 * math.pi, child: Container( padding: const EdgeInsets.all(24), decoration: BoxDecoration( color: Theme.of(context).colorScheme.primary, borderRadius: BorderRadius.circular(16), ), child: Icon( Icons.subscriptions_outlined, size: 48, color: Theme.of(context).colorScheme.onPrimary, ), ), ); }, ), const SizedBox(height: 32), ThemedText( AppLocalizations.of(context).noSubscriptions, fontSize: 22, fontWeight: FontWeight.w800, letterSpacing: -0.5, ), const SizedBox(height: 8), ThemedText( AppLocalizations.of(context).addSubscriptionNow, fontSize: 16, opacity: 0.7, ), const SizedBox(height: 32), MouseRegion( onEnter: (_) {}, onExit: (_) {}, child: ElevatedButton( style: ElevatedButton.styleFrom( foregroundColor: Theme.of(context).colorScheme.onPrimary, backgroundColor: Theme.of(context).colorScheme.primary, padding: const EdgeInsets.symmetric( horizontal: 32, vertical: 16, ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), ), elevation: 0, ), onPressed: () { HapticFeedback.mediumImpact(); onAddPressed(); }, child: Text( AppLocalizations.of(context).addSubscription, style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, letterSpacing: 0.5, color: Theme.of(context).colorScheme.onPrimary, ), ), ), ), ], ), ), ), ), ), ), ); } }