import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; import 'package:random_avatar/random_avatar.dart'; import '../../../../core/theme/app_theme.dart'; import '../../../../core/widgets/game_ui.dart'; import '../../../../core/widgets/rank_badge.dart'; import '../../domain/entities/leaderboard.dart'; import '../bloc/leaderboard_bloc.dart'; /// جدولِ رتبه‌بندیِ فصل: برترین بازیکنان بر اساس امتیازِ رتبه. class LeaderboardScreen extends StatelessWidget { const LeaderboardScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( body: GameBackground( child: SafeArea( child: Column( children: [ Row(children: [ IconButton( onPressed: () => context.pop(), icon: const Icon(Icons.arrow_back, color: AppColors.gold), ), const Spacer(), const GlowText('رتبه‌بندی فصل', size: 22), const Spacer(), const SizedBox(width: 48), ]), Expanded( child: BlocBuilder( builder: (context, state) { if (state is LeaderboardError) { return Center( child: Column(mainAxisSize: MainAxisSize.min, children: [ Text(state.message, style: const TextStyle(color: Colors.white70)), TextButton( onPressed: () => context .read() .add(LoadLeaderboardEvent()), child: const Text('تلاش مجدد'), ), ]), ); } if (state is! LeaderboardLoaded) { return const Center( child: CircularProgressIndicator(color: AppColors.gold)); } final lb = state.data; if (lb.entries.isEmpty) { return const Center( child: Text('هنوز کسی در این فصل امتیاز نگرفته است', style: TextStyle(color: Colors.white54)), ); } return Column( children: [ Padding( padding: const EdgeInsets.symmetric(vertical: 6), child: Text('فصل ${lb.season}', style: const TextStyle( color: AppColors.gold, fontSize: 14)), ), Expanded( child: ListView.separated( padding: const EdgeInsets.fromLTRB(12, 4, 12, 20), itemCount: lb.entries.length, separatorBuilder: (_, __) => const SizedBox(height: 8), itemBuilder: (_, i) => _row(lb.entries[i]), ), ), ], ); }, ), ), ], ), ), ), ); } Widget _row(RankEntry e) { final medal = e.rank <= 3; return Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), decoration: BoxDecoration( gradient: const LinearGradient( colors: [Color(0xFF4A0C16), Color(0xFF2A0710)], ), borderRadius: BorderRadius.circular(12), border: Border.all( color: medal ? AppColors.gold : AppColors.goldDark, width: medal ? 1.6 : 1), ), child: Row(children: [ SizedBox( width: 28, child: Text('${e.rank}', textAlign: TextAlign.center, style: TextStyle( color: medal ? AppColors.gold : Colors.white70, fontWeight: FontWeight.bold, fontSize: 16)), ), const SizedBox(width: 8), SizedBox( width: 40, height: 40, child: ClipOval( child: RandomAvatar(e.avatar.isEmpty ? e.name : e.avatar)), ), const SizedBox(width: 10), Expanded( child: Text(e.name, maxLines: 1, overflow: TextOverflow.ellipsis, style: const TextStyle(color: Colors.white, fontSize: 15)), ), RankBadge(tier: e.tier, points: e.rankPoints, size: 13), ]), ); } }