import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:injector/injector.dart'; import 'package:prosappco/blocs/auth_bloc/auth_bloc.dart'; import 'package:prosappco/blocs/my_user_bloc/my_user_bloc.dart'; import 'package:prosappco/components/general_primary_button.dart'; import 'package:prosappco/screens/authentication/sign_in_screen.dart'; class ProfileEmailScreen extends StatefulWidget { const ProfileEmailScreen({super.key}); @override State createState() => _ProfileEmailScreenState(); } class _ProfileEmailScreenState extends State { final TextEditingController _emailController = TextEditingController(); final TextEditingController _passwordController = TextEditingController(); late final AuthBloc authBloc; @override void initState() { super.initState(); authBloc = Injector.appInstance.get(); } @override void dispose() { _emailController.dispose(); _passwordController.dispose(); super.dispose(); } void _showLoginModal(BuildContext context) { showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: const Text('Requiere inicio de sesión reciente'), content: const Text('Por favor, inicie sesión nuevamente para continuar.'), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(); }, child: const Text('OK'), ), ], ); }, ); } @override Widget build(BuildContext context) { return BlocProvider( create: (context) => authBloc, child: BlocListener( listener: (context, state) { if (state is AuthStateSuccess) { Navigator.of(context).pop(); } if (state is AuthStateEmailAlreadyInUse) { ScaffoldMessenger.of(context).showSnackBar(const SnackBar( content: Text('El correo ya existe'), )); } if (state is AuthStateRequiresRecentLogin) { _showLoginModal(context); } }, child: BlocBuilder( builder: (context, state) { if (state.status == MyUserStatus.success) { _emailController.text = state.user!.email ?? ''; return Scaffold( appBar: AppBar( title: Text( _emailController.text.isEmpty ? 'Agregar correo' : 'Actualizar correo', ), ), body: Center( // Centro del contenido child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.symmetric( horizontal: 40, vertical: 10), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ TextFormField( controller: _emailController, decoration: const InputDecoration( labelText: 'Email', prefixIcon: Icon(Icons.email_rounded), hintText: 'Email', border: OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(10.0), )), errorBorder: OutlineInputBorder( borderSide: BorderSide(color: Colors.red), ), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide(color: Colors.red, width: 2.0), ), ), validator: (value) { if (value == null || value.isEmpty) { return 'Por favor, ingrese su contraseña'; } return null; }, ), const SizedBox(height: 20), TextFormField( controller: _passwordController, obscureText: true, decoration: const InputDecoration( labelText: 'Contraseña', prefixIcon: Icon(Icons.lock_rounded), hintText: 'Contraseña', border: OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(10.0), )), errorBorder: OutlineInputBorder( borderSide: BorderSide(color: Colors.red), ), focusedErrorBorder: OutlineInputBorder( borderSide: BorderSide(color: Colors.red, width: 2.0), ), ), validator: (value) { if (value == null || value.isEmpty) { return 'Por favor, ingrese su contraseña'; } return null; }, ), const SizedBox(height: 30), GeneralPrimaryButton( onPressed: () { if (_emailController.text.isEmpty) { return; } if (_passwordController.text.isEmpty) { return; } context.read().add( AuthEventAddEmailAndPassword( email: _emailController.text, password: _passwordController.text, ), ); }, label: _emailController.text.isEmpty ? 'Registrar' : 'Actualizar', ), ], ), ), ), ), ); } else { return const Center(child: CircularProgressIndicator()); } }, ), ), ); } }