import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flux/core/theme/theme.dart'; import 'package:flux/core/widgets/flux_logo.dart'; import 'package:flux/core/widgets/flux_text_field.dart'; import 'package:flux/features/auth/bloc/auth_cubit.dart'; class AuthScreen extends StatefulWidget { const AuthScreen({super.key}); @override State createState() => _AuthScreenState(); } class _AuthScreenState extends State { final _emailController = TextEditingController(); final _passwordController = TextEditingController(); @override void dispose() { _emailController.dispose(); _passwordController.dispose(); super.dispose(); } void _submit() { // Chiudiamo la tastiera per fare pulizia a schermo FocusScope.of(context).unfocus(); context.read().submitAuth( _emailController.text.trim(), _passwordController.text.trim(), ); } @override Widget build(BuildContext context) { return Scaffold( body: BlocConsumer( // Ottimizzazione: Ridisegniamo la UI solo quando cambia lo status o la modalità listenWhen: (previous, current) => previous.errorMessage != current.errorMessage || previous.infoMessage != current.infoMessage, listener: (context, state) { // Mostriamo l'errore se c'è if (state.errorMessage != null) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(state.errorMessage!), backgroundColor: Colors.redAccent, ), ); } // Mostriamo il messaggio info (es. Conferma Email) if (state.infoMessage != null) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(state.infoMessage!), backgroundColor: Colors.blueAccent, // O context.accent ), ); } }, builder: (context, state) { final isLoading = state.status == AuthStatus.loading; return SafeArea( child: Center( child: SingleChildScrollView( padding: const EdgeInsets.symmetric(horizontal: 32), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // --- LOGO FLUX --- const FluxLogoAuto(height: 80), const SizedBox(height: 60), // --- TITOLO DINAMICO --- Text( state.isLoginMode ? 'BENTORNATO' : 'CREA ACCOUNT', style: TextStyle( color: context.primaryText, fontSize: 24, fontWeight: FontWeight.w900, letterSpacing: 1.5, ), ), const SizedBox(height: 8), Text( state.isLoginMode ? 'Accedi per gestire il tuo business' : 'Inizia oggi a digitalizzare il tuo negozio', textAlign: TextAlign.center, style: TextStyle(color: context.secondaryText), ), const SizedBox(height: 40), // --- CAMPI INPUT --- FluxTextField( label: 'Email Aziendale', icon: Icons.email_outlined, controller: _emailController, // TODO: Aggiungi nel tuo FluxTextField la gestione del keyboardType se non c'è già! ), const SizedBox(height: 20), FluxTextField( label: 'Password', icon: Icons.lock_outline, isPassword: true, // Magia del FluxTextField! controller: _passwordController, // onSubmitted: (_) => _submit(), // Se lo supporti nel tuo widget custom ), const SizedBox(height: 40), // --- BOTTONE PRINCIPALE --- SizedBox( width: double.infinity, height: 56, child: ElevatedButton( onPressed: isLoading ? null : _submit, child: isLoading ? const SizedBox( height: 24, width: 24, child: CircularProgressIndicator( strokeWidth: 2, color: Colors.white, ), ) : Text( state.isLoginMode ? 'ACCEDI' : 'REGISTRATI', style: const TextStyle( fontWeight: FontWeight.bold, ), ), ), ), // --- SWITCH LOGIN/SIGNUP --- const SizedBox(height: 24), TextButton( onPressed: isLoading ? null : () => context.read().toggleMode(), child: RichText( text: TextSpan( text: state.isLoginMode ? "Non hai un account? " : "Hai già un account? ", style: TextStyle(color: context.secondaryText), children: [ TextSpan( text: state.isLoginMode ? "Registrati" : "Accedi", style: TextStyle( color: context.accent, fontWeight: FontWeight.bold, ), ), ], ), ), ), ], ), ), ), ); }, ), ); } }