Co-authored-by: MENDOZA BALLARDO GAEL RICARDO <gael-meb123@users.noreply.github.com> Co-authored-by: Azareth-Tr <Azareth-Tr@users.noreply.github.com> modificacion de las vistas principales para el usuario ciudadano, primer avance para el panel admin
126 lines
3.5 KiB
Dart
126 lines
3.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:recolecta_app/core/theme/app_theme.dart';
|
|
import 'package:recolecta_app/core/widgets/app_widgets.dart';
|
|
import 'package:recolecta_app/core/services/auth_controller.dart';
|
|
import 'package:recolecta_app/core/api/api_service.dart';
|
|
|
|
class EditProfileScreen extends ConsumerStatefulWidget {
|
|
const EditProfileScreen({super.key});
|
|
|
|
@override
|
|
ConsumerState<ConsumerStatefulWidget> createState() =>
|
|
_EditProfileScreenState();
|
|
}
|
|
|
|
class _EditProfileScreenState extends ConsumerState<EditProfileScreen> {
|
|
final _formKey = GlobalKey<FormState>();
|
|
final _nameController = TextEditingController();
|
|
final _emailController = TextEditingController();
|
|
bool _isLoading = false;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
// TODO: Si deseas pre-llenar los datos, aquí puedes llamar a tu API
|
|
// (ej. GET /users/me) usando ref.read(apiServiceProvider)
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
_nameController.dispose();
|
|
_emailController.dispose();
|
|
super.dispose();
|
|
}
|
|
|
|
Future<void> _saveProfile() async {
|
|
if (!_formKey.currentState!.validate()) {
|
|
return;
|
|
}
|
|
setState(() {
|
|
_isLoading = true;
|
|
});
|
|
|
|
try {
|
|
final apiService = ref.read(apiServiceProvider);
|
|
await apiService.updateUser({
|
|
'name': _nameController.text,
|
|
'email': _emailController.text,
|
|
});
|
|
|
|
if (mounted) {
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
const SnackBar(content: Text('Perfil actualizado con éxito')),
|
|
);
|
|
Navigator.of(context).pop();
|
|
}
|
|
} catch (e) {
|
|
if (mounted) {
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(content: Text('Error al actualizar el perfil: $e')),
|
|
);
|
|
}
|
|
} finally {
|
|
if (mounted) {
|
|
setState(() {
|
|
_isLoading = false;
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: const Text('Editar Perfil'),
|
|
actions: [
|
|
if (_isLoading)
|
|
const Padding(
|
|
padding: EdgeInsets.only(right: 16.0),
|
|
child: CircularProgressIndicator(),
|
|
)
|
|
else
|
|
TextButton(onPressed: _saveProfile, child: const Text('Guardar')),
|
|
],
|
|
),
|
|
body: Form(
|
|
key: _formKey,
|
|
child: ListView(
|
|
padding: const EdgeInsets.all(16.0),
|
|
children: [
|
|
TextFormField(
|
|
controller: _nameController,
|
|
decoration: const InputDecoration(
|
|
labelText: 'Nombre',
|
|
border: OutlineInputBorder(),
|
|
),
|
|
validator: (value) {
|
|
if (value == null || value.isEmpty) {
|
|
return 'Por favor ingresa tu nombre';
|
|
}
|
|
return null;
|
|
},
|
|
),
|
|
const SizedBox(height: 16),
|
|
TextFormField(
|
|
controller: _emailController,
|
|
decoration: const InputDecoration(
|
|
labelText: 'Correo Electrónico',
|
|
border: OutlineInputBorder(),
|
|
),
|
|
keyboardType: TextInputType.emailAddress,
|
|
validator: (value) {
|
|
if (value == null || !value.contains('@')) {
|
|
return 'Por favor ingresa un correo válido';
|
|
}
|
|
return null;
|
|
},
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|