import 'package:flutter/material.dart'; import 'package:prosapp_web_app/providers/auth_provider.dart'; import 'package:prosapp_web_app/router/router.dart'; import 'package:prosapp_web_app/services/navigation_service.dart'; import 'package:provider/provider.dart'; class SetupNameView extends StatefulWidget { const SetupNameView({super.key}); @override State createState() => _SetupNameViewState(); } class _SetupNameViewState extends State { final _nameController = TextEditingController(); bool _loading = false; String? _error; @override void dispose() { _nameController.dispose(); super.dispose(); } Future _save() async { final name = _nameController.text.trim(); if (name.length < 3) { setState(() => _error = 'Ingresa al menos 3 caracteres'); return; } setState(() { _loading = true; _error = null; }); try { await context.read().updateName(name); NavigationService.replaceTo(Flurorouter.setupCityRoute); } catch (_) { setState(() => _loading = false); } } @override Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return Center( child: ConstrainedBox( constraints: const BoxConstraints(maxWidth: 420), child: SingleChildScrollView( padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 40), child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( width: 72, height: 72, decoration: BoxDecoration( color: const Color(0xFF42A4EF).withOpacity(0.12), shape: BoxShape.circle, ), child: const Icon(Icons.waving_hand_rounded, color: Color(0xFF42A4EF), size: 34), ), const SizedBox(height: 20), const Text( '¡Bienvenido a ProsApp!', style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold), textAlign: TextAlign.center, ), const SizedBox(height: 8), Text( '¿Cómo te llamas? Usaremos tu nombre para personalizar tu experiencia.', textAlign: TextAlign.center, style: TextStyle( fontSize: 14, color: isDark ? Colors.white54 : Colors.grey[600], ), ), const SizedBox(height: 32), TextField( controller: _nameController, autofocus: true, textCapitalization: TextCapitalization.words, onSubmitted: (_) => _save(), decoration: InputDecoration( labelText: 'Tu nombre completo', hintText: 'Ej: Juan Pérez', prefixIcon: const Icon(Icons.person_outline), errorText: _error, filled: true, fillColor: isDark ? const Color(0xFF1E293B) : const Color(0xFFF5F8FF), border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide.none, ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide( color: isDark ? const Color(0xFF334155) : const Color(0xFFE0E7FF), ), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: const BorderSide( color: Color(0xFF42A4EF), width: 2), ), ), ), const SizedBox(height: 24), SizedBox( width: double.infinity, child: ElevatedButton( onPressed: _loading ? null : _save, style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFF42A4EF), foregroundColor: Colors.white, padding: const EdgeInsets.symmetric(vertical: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12)), elevation: 0, ), child: _loading ? const SizedBox( width: 20, height: 20, child: CircularProgressIndicator( color: Colors.white, strokeWidth: 2), ) : const Text('Continuar', style: TextStyle( fontSize: 15, fontWeight: FontWeight.w600)), ), ), ], ), ), ), ); } }