import 'package:flutter/material.dart'; import '../utils/google_play_games_manager.dart'; import '../utils/colors.dart'; import '../l10n/app_localizations.dart'; class GooglePlayGamesWidget extends StatefulWidget { const GooglePlayGamesWidget({super.key}); @override State createState() => _GooglePlayGamesWidgetState(); } class _GooglePlayGamesWidgetState extends State { final GooglePlayGamesManager _gamesManager = GooglePlayGamesManager.instance; bool _isInitializing = false; @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; // Show disabled state if feature is not enabled if (!_gamesManager.isEnabled) { return Card( margin: const EdgeInsets.all(16), child: Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Row( children: [ Icon( Icons.videogame_asset_off, color: ZenColors.secondaryText, ), const SizedBox(width: 8), Text( l10n.googlePlayGames, style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, color: ZenColors.secondaryText, ), ), ], ), const SizedBox(height: 12), Text( l10n.googlePlayGamesServiceDisabled, style: const TextStyle( color: ZenColors.secondaryText, fontSize: 14, ), ), ], ), ), ); } return Card( margin: const EdgeInsets.all(16), child: Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Row( children: [ Icon( Icons.videogame_asset, color: _gamesManager.isSignedIn ? ZenColors.defaultLink : ZenColors.secondaryText, ), const SizedBox(width: 8), Text( l10n.googlePlayGames, style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, color: _gamesManager.isSignedIn ? ZenColors.primaryText : ZenColors.secondaryText, ), ), ], ), const SizedBox(height: 12), if (_gamesManager.isSignedIn) ...[ Text( l10n.signedInAs(_gamesManager.playerName ?? 'Player'), style: const TextStyle( color: ZenColors.primaryText, fontSize: 14, ), ), const SizedBox(height: 12), Row( children: [ Expanded( child: ElevatedButton.icon( onPressed: _showLeaderboards, icon: const Icon(Icons.leaderboard), label: Text(l10n.leaderboards), style: ElevatedButton.styleFrom( backgroundColor: ZenColors.buttonBackground, foregroundColor: ZenColors.buttonText, ), ), ), const SizedBox(width: 8), Expanded( child: ElevatedButton.icon( onPressed: _showAchievements, icon: const Icon(Icons.emoji_events), label: Text(l10n.achievements), style: ElevatedButton.styleFrom( backgroundColor: ZenColors.buttonBackground, foregroundColor: ZenColors.buttonText, ), ), ), ], ), const SizedBox(height: 8), TextButton( onPressed: _signOut, child: Text( l10n.signOut, style: const TextStyle(color: ZenColors.secondaryText), ), ), ] else ...[ Text( l10n.signInPrompt, style: const TextStyle( color: ZenColors.secondaryText, fontSize: 14, ), ), const SizedBox(height: 12), SizedBox( width: double.infinity, child: ElevatedButton.icon( onPressed: _isInitializing ? null : _signIn, icon: _isInitializing ? const SizedBox( width: 16, height: 16, child: CircularProgressIndicator(strokeWidth: 2), ) : const Icon(Icons.login), label: Text(_isInitializing ? l10n.signingIn : l10n.signIn), style: ElevatedButton.styleFrom( backgroundColor: ZenColors.buttonBackground, foregroundColor: ZenColors.buttonText, ), ), ), ], ], ), ), ); } Future _signIn() async { setState(() { _isInitializing = true; }); try { final success = await _gamesManager.signIn(); if (!mounted) return; if (success) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(AppLocalizations.of(context)!.signInSuccess), backgroundColor: ZenColors.defaultLink, ), ); } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(AppLocalizations.of(context)!.signInFailed), backgroundColor: Colors.red, ), ); } } catch (e) { if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(AppLocalizations.of(context)!.errorSigningIn(e.toString())), backgroundColor: Colors.red, ), ); } finally { if (mounted) { setState(() { _isInitializing = false; }); } } } Future _signOut() async { await _gamesManager.signOut(); if (!mounted) return; setState(() {}); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(AppLocalizations.of(context)!.signOutSuccess), backgroundColor: ZenColors.secondaryText, ), ); } Future _showLeaderboards() async { try { await _gamesManager.showLeaderboards(); } catch (e) { if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(AppLocalizations.of(context)!.errorShowingLeaderboards(e.toString())), backgroundColor: Colors.red, ), ); } } Future _showAchievements() async { try { await _gamesManager.showAchievements(); } catch (e) { if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(AppLocalizations.of(context)!.errorShowingAchievements(e.toString())), backgroundColor: Colors.red, ), ); } } }