import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:barber_app/core/theme/app_theme.dart'; import 'package:barber_app/core/constants/app_strings.dart'; import 'package:barber_app/features/auth/presentation/bloc/auth_bloc.dart'; import 'package:barber_app/features/home/presentation/pages/home_page.dart'; import 'package:barber_app/shared/widgets/custom_text_field.dart'; import 'package:barber_app/shared/widgets/loading_button.dart'; class RegisterPage extends StatefulWidget { const RegisterPage({super.key}); @override State createState() => _RegisterPageState(); } class _RegisterPageState extends State { final _formKey = GlobalKey(); final _emailController = TextEditingController(); final _passwordController = TextEditingController(); final _confirmPasswordController = TextEditingController(); final _barberNameController = TextEditingController(); final _barberShopNameController = TextEditingController(); bool _obscurePassword = true; bool _obscureConfirmPassword = true; @override void dispose() { _emailController.dispose(); _passwordController.dispose(); _confirmPasswordController.dispose(); _barberNameController.dispose(); _barberShopNameController.dispose(); super.dispose(); } void _onRegister() { if (_formKey.currentState?.validate() ?? false) { context.read().add(AuthRegisterRequested( email: _emailController.text, password: _passwordController.text, barberName: _barberNameController.text, barberShopName: _barberShopNameController.text, )); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text(AppStrings.createAccount), leading: IconButton( icon: const Icon(Icons.arrow_back_ios), onPressed: () => Navigator.of(context).pop(), ), ), body: BlocListener( listener: (context, state) { if (state is AuthAuthenticated) { Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute(builder: (_) => const HomePage()), (route) => false, ); } else if (state is AuthError) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(state.message), backgroundColor: AppColors.error, ), ); } }, child: SafeArea( child: SingleChildScrollView( padding: const EdgeInsets.symmetric(horizontal: 24), child: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const SizedBox(height: 24), // Dados da barbearia _buildSectionTitle('Dados da Barbearia'), const SizedBox(height: 16), CustomTextField( controller: _barberShopNameController, label: AppStrings.barberShopName, hint: 'Ex: Barbearia do João', prefixIcon: Icons.store_outlined, validator: (value) { if (value == null || value.isEmpty) { return 'Informe o nome da barbearia'; } return null; }, ), const SizedBox(height: 16), CustomTextField( controller: _barberNameController, label: AppStrings.barberName, hint: 'Seu nome', prefixIcon: Icons.person_outline, validator: (value) { if (value == null || value.isEmpty) { return 'Informe seu nome'; } return null; }, ), const SizedBox(height: 32), // Dados de acesso _buildSectionTitle('Dados de Acesso'), const SizedBox(height: 16), CustomTextField( controller: _emailController, label: AppStrings.email, hint: 'seu@email.com', keyboardType: TextInputType.emailAddress, prefixIcon: Icons.email_outlined, validator: (value) { if (value == null || value.isEmpty) { return 'Informe o e-mail'; } if (!value.contains('@')) { return AppStrings.invalidEmail; } return null; }, ), const SizedBox(height: 16), CustomTextField( controller: _passwordController, label: AppStrings.password, hint: 'Mínimo 6 caracteres', obscureText: _obscurePassword, prefixIcon: Icons.lock_outline, suffixIcon: IconButton( icon: Icon( _obscurePassword ? Icons.visibility_off : Icons.visibility, color: AppColors.textSecondary, ), onPressed: () { setState(() { _obscurePassword = !_obscurePassword; }); }, ), validator: (value) { if (value == null || value.isEmpty) { return 'Informe a senha'; } if (value.length < 6) { return AppStrings.weakPassword; } return null; }, ), const SizedBox(height: 16), CustomTextField( controller: _confirmPasswordController, label: AppStrings.confirmPassword, hint: 'Repita a senha', obscureText: _obscureConfirmPassword, prefixIcon: Icons.lock_outline, suffixIcon: IconButton( icon: Icon( _obscureConfirmPassword ? Icons.visibility_off : Icons.visibility, color: AppColors.textSecondary, ), onPressed: () { setState(() { _obscureConfirmPassword = !_obscureConfirmPassword; }); }, ), validator: (value) { if (value == null || value.isEmpty) { return 'Confirme a senha'; } if (value != _passwordController.text) { return AppStrings.passwordsDontMatch; } return null; }, ), const SizedBox(height: 32), // Botão de registro BlocBuilder( builder: (context, state) { return LoadingButton( text: AppStrings.createAccount, isLoading: state is AuthLoading, onPressed: _onRegister, ); }, ), const SizedBox(height: 16), // Link para login Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'Já tem uma conta? ', style: TextStyle(color: AppColors.textSecondary), ), TextButton( onPressed: () => Navigator.of(context).pop(), child: Text( AppStrings.login, style: TextStyle( color: AppColors.primaryColor, fontWeight: FontWeight.bold, ), ), ), ], ), const SizedBox(height: 24), ], ), ), ), ), ), ); } Widget _buildSectionTitle(String title) { return Text( title, style: Theme.of(context).textTheme.titleMedium?.copyWith( color: AppColors.primaryColor, fontWeight: FontWeight.bold, ), ); } }