// ignore_for_file: deprecated_member_use import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import '../../../core/widgets/app_scaffold.dart'; import '../../../core/widgets/primary_button.dart'; import '../application/auth_controller.dart'; class AuthChoiceScreen extends ConsumerStatefulWidget { const AuthChoiceScreen({super.key}); @override ConsumerState createState() => _AuthChoiceScreenState(); } class _AuthChoiceScreenState extends ConsumerState { bool _isLoading = false; Future _handleGoogleSignIn() async { setState(() => _isLoading = true); try { await ref.read(authControllerProvider.notifier).signInWithGoogle(); } catch (e) { if (mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Google sign-in failed: $e')), ); } } finally { if (mounted) { setState(() => _isLoading = false); } } } Future _handleGithubSignIn() async { setState(() => _isLoading = true); try { await ref.read(authControllerProvider.notifier).signInWithGithub(); } catch (e) { if (mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('GitHub sign-in failed: $e')), ); } } finally { if (mounted) { setState(() => _isLoading = false); } } } @override Widget build(BuildContext context) { return AppScaffold( body: Center( child: SingleChildScrollView( padding: const EdgeInsets.all(24.0), child: Center( child: ConstrainedBox( constraints: const BoxConstraints(maxWidth: 420), child: Container( padding: const EdgeInsets.symmetric( horizontal: 24, vertical: 32, ), decoration: BoxDecoration( color: Theme.of(context).colorScheme.surface, borderRadius: BorderRadius.circular(32), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.06), blurRadius: 40, offset: const Offset(0, 24), ), ], ), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Align( alignment: Alignment.centerLeft, child: Container( height: 56, width: 56, decoration: BoxDecoration( color: Theme.of(context) .colorScheme .primary .withOpacity(0.08), shape: BoxShape.circle, ), child: Icon( Icons.timer_outlined, size: 32, color: Theme.of(context).colorScheme.primary, ), ), ), const SizedBox(height: 24), Text( '1356', style: Theme.of(context) .textTheme .headlineLarge ?.copyWith( fontWeight: FontWeight.bold, ), textAlign: TextAlign.left, ), const SizedBox(height: 8), Text( 'Your 1356-day journey starts here', style: Theme.of(context).textTheme.bodyLarge?.copyWith( color: Theme.of(context) .colorScheme .onSurface .withOpacity(0.7), ), ), const SizedBox(height: 32), PrimaryButton( onPressed: () => context.push('/sign-in'), text: 'Sign In with Email', isLoading: _isLoading, ), const SizedBox(height: 12), OutlinedButton( onPressed: _isLoading ? null : () => context.push('/sign-up'), style: OutlinedButton.styleFrom( padding: const EdgeInsets.symmetric(vertical: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(999), ), ), child: const Text('Create Account'), ), const SizedBox(height: 24), _SocialButton( icon: Icons.g_mobiledata, label: 'Continue with Google', isLoading: _isLoading, onPressed: _handleGoogleSignIn, ), const SizedBox(height: 12), _SocialButton( icon: Icons.code, label: 'Continue with GitHub', isLoading: _isLoading, onPressed: _handleGithubSignIn, ), ], ), ), ), ), ), ), ); } } class _SocialButton extends StatelessWidget { final IconData icon; final String label; final bool isLoading; final VoidCallback onPressed; const _SocialButton({ required this.icon, required this.label, required this.isLoading, required this.onPressed, }); @override Widget build(BuildContext context) { return ElevatedButton.icon( onPressed: isLoading ? null : onPressed, icon: Icon(icon, size: 24), label: Text(label), style: ElevatedButton.styleFrom( padding: const EdgeInsets.symmetric(vertical: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), ); } }