import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:random_avatar/random_avatar.dart'; import '../../../../core/config.dart'; import '../../../../core/locator/locator.dart'; import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/frames.dart'; import '../../../../core/widgets/game_ui.dart'; import '../../../wallet/presentation/bloc/wallet_bloc.dart'; import '../../../wallet/presentation/bloc/wallet_event.dart'; import '../../../wallet/presentation/bloc/wallet_state.dart'; import '../../../wallet/presentation/bloc/wallet_status.dart'; import '../../data/data_source/remote/carpet_api_provider.dart'; import '../../data/data_source/remote/frame_api_provider.dart'; import '../../domain/entities/carpet.dart'; import '../../domain/entities/frame.dart'; import '../../domain/entities/shop_entities.dart'; import '../bloc/shop_bloc.dart'; import '../bloc/shop_event.dart'; import '../bloc/shop_state.dart'; import '../bloc/shop_status.dart'; part 'shop_screen.parts.dart'; /// فروشگاه با تب‌های سکه/بلیط/کارت/تجهیزات/VIP. class ShopScreen extends StatelessWidget { const ShopScreen({super.key}); @override Widget build(BuildContext context) { return DefaultTabController( length: 7, child: Scaffold( backgroundColor: Colors.transparent, body: GameBackground( child: BlocConsumer( listenWhen: (a, b) => a.actionStatus != b.actionStatus, listener: (context, state) { final s = state.actionStatus; if (s is ActionSuccess) { context.read().add(LoadWalletEvent()); ScaffoldMessenger.of( context, ).showSnackBar(SnackBar(content: Text(s.message))); } else if (s is ActionError) { ScaffoldMessenger.of( context, ).showSnackBar(SnackBar(content: Text(s.message))); } }, builder: (context, state) { return Column( children: [ _header(context), Expanded( child: Container( margin: const EdgeInsets.fromLTRB(8, 0, 8, 8), decoration: BoxDecoration( gradient: const LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [AppColors.lapisMid, AppColors.lapisLo], ), borderRadius: BorderRadius.circular(16), border: Border.all( color: AppColors.goldDark, width: 1.5, ), ), child: Column( children: [ const _ShopTabs(), Expanded(child: _body(context, state.loadStatus)), ], ), ), ), ], ); }, ), ), ), ); } Widget _body(BuildContext context, ShopLoadStatus status) { if (status is ShopLoaded) { final d = status.data; return TabBarView( children: [ _CoinsTab(packages: d.coinPackages), _TicketsTab(packages: d.ticketPackages), _CardsTab(data: d), const _CarpetsTab(), const _FramesTab(), _BoostersTab(boosters: d.boosters), _VipTab(packages: d.vipPackages), ], ); } if (status is ShopLoadError) { return Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ Text(status.message), TextButton( onPressed: () => context.read().add(LoadShopEvent()), child: const Text('تلاش مجدد'), ), ], ), ); } return const Center( child: CircularProgressIndicator(color: AppColors.gold), ); } Widget _header(BuildContext context) { return Padding( padding: const EdgeInsets.all(8), child: Row( children: [ const AppBackButton(), const Spacer(), BlocBuilder( builder: (context, s) { final w = s.walletStatus is WalletLoaded ? (s.walletStatus as WalletLoaded).wallet : null; return Row( children: [ StatChip( icon: Icons.confirmation_number, value: '${w?.tickets ?? 0}', ), const SizedBox(width: 8), StatChip( icon: Icons.monetization_on, value: '${w?.coins ?? 0}', ), ], ); }, ), ], ), ); } }