import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:chepuhagram/domain/services/api_service.dart'; import 'package:chepuhagram/logic/auth_provider.dart'; class AccountSettingsScreen extends StatefulWidget { const AccountSettingsScreen({super.key}); @override State createState() => _AccountSettingsScreenState(); } class _AccountSettingsScreenState extends State { final _formKey = GlobalKey(); final _usernameController = TextEditingController(); final _firstNameController = TextEditingController(); final _lastNameController = TextEditingController(); final _phoneController = TextEditingController(); final _emailController = TextEditingController(); final _aboutController = TextEditingController(); bool _isSaving = false; @override void initState() { super.initState(); final auth = context.read(); _usernameController.text = auth.username ?? ''; _firstNameController.text = auth.firstName ?? ''; _lastNameController.text = auth.lastName ?? ''; _phoneController.text = auth.phone ?? ''; _emailController.text = auth.email ?? ''; _aboutController.text = auth.about ?? ''; } @override void dispose() { _usernameController.dispose(); _firstNameController.dispose(); _lastNameController.dispose(); _phoneController.dispose(); _emailController.dispose(); _aboutController.dispose(); super.dispose(); } Future _save() async { if (!_formKey.currentState!.validate()) return; setState(() => _isSaving = true); try { final api = ApiService(); await api.updateMe( username: _usernameController.text.trim(), firstName: _firstNameController.text.trim(), lastName: _lastNameController.text.trim(), phone: _phoneController.text, email: _emailController.text, about: _aboutController.text, ); if (!mounted) return; await context.read().refreshMe(); if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('Сохранено')), ); Navigator.of(context).pop(); } catch (e) { if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(e.toString().replaceAll('Exception: ', ''))), ); } finally { if (mounted) setState(() => _isSaving = false); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Аккаунт'), actions: [ TextButton( onPressed: _isSaving ? null : _save, child: _isSaving ? const SizedBox( width: 16, height: 16, child: CircularProgressIndicator(strokeWidth: 2), ) : const Text( 'Сохранить', style: TextStyle(color: Colors.white), ), ), ], ), body: Form( key: _formKey, child: ListView( padding: const EdgeInsets.all(16), children: [ TextFormField( controller: _usernameController, decoration: const InputDecoration( labelText: 'Имя пользователя', hintText: 'Латиница, цифры, подчеркивания', ), validator: (v) { if (v == null || v.trim().isEmpty) return 'Введите имя пользователя'; if (!RegExp(r'^[a-zA-Z0-9_]{3,20}$').hasMatch(v.trim())) { return 'Имя пользователя должно содержать от 3 до 20 символов (латиница, цифры, подчеркивания)'; } return null; }, ), const SizedBox(height: 12), TextFormField( controller: _firstNameController, decoration: const InputDecoration( labelText: 'Имя', ), validator: (v) { if (v == null || v.trim().isEmpty) return 'Введите имя'; return null; }, ), const SizedBox(height: 12), TextFormField( controller: _lastNameController, decoration: const InputDecoration( labelText: 'Фамилия', ), ), const SizedBox(height: 12), TextFormField( controller: _phoneController, decoration: const InputDecoration( labelText: 'Телефон', ), keyboardType: TextInputType.phone, ), const SizedBox(height: 12), TextFormField( controller: _emailController, decoration: const InputDecoration( labelText: 'Почта', ), keyboardType: TextInputType.emailAddress, ), const SizedBox(height: 12), TextFormField( controller: _aboutController, decoration: const InputDecoration( labelText: 'О себе', ), minLines: 2, maxLines: 5, ), ], ), ), ); } }