import 'package:flutter/material.dart'; import 'package:youmazgestion/Models/users.dart'; import '../Services/authDatabase.dart'; class EditUserPage extends StatefulWidget { final Users user; const EditUserPage({super.key, required this.user}); @override _EditUserPageState createState() => _EditUserPageState(); } class _EditUserPageState extends State { late TextEditingController _nameController; late TextEditingController _lastNameController; late TextEditingController _emailController; late TextEditingController _usernameController; late TextEditingController _passwordController; String _selectedRole = ''; @override void initState() { super.initState(); _nameController = TextEditingController(text: widget.user.name); _lastNameController = TextEditingController(text: widget.user.lastName); _emailController = TextEditingController(text: widget.user.email); _usernameController = TextEditingController(text: widget.user.username); _passwordController = TextEditingController(); // Leave password field empty initially _selectedRole = widget.user.role; } @override void dispose() { _nameController.dispose(); _lastNameController.dispose(); _emailController.dispose(); _usernameController.dispose(); _passwordController.dispose(); super.dispose(); } void _updateUser() { final String name = _nameController.text; final String lastName = _lastNameController.text; final String email = _emailController.text; final String username = _usernameController.text; final String password = _passwordController.text; // Get the entered password final String role = _selectedRole; final Users updatedUser = Users( id: widget.user.id, name: name, lastName: lastName, email: email, password: password.isNotEmpty ? password : widget.user .password, // Use entered password if not empty, otherwise keep the existing password username: username, role: role, ); AuthDatabase.instance.updateUser(updatedUser).then((value) { // User update successful showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: const Text('Update Successful'), content: const Text('User information has been updated.'), actions: [ ElevatedButton( onPressed: () { Navigator.of(context).pop(); Navigator.pop(context, true); // Return true to indicate successful update }, child: const Text('OK'), ), ], ); }, ); }).catchError((error) { print(error); // Update failed showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: const Text('Update Failed'), content: const Text('An error occurred during user information update.'), actions: [ ElevatedButton( onPressed: () { Navigator.of(context).pop(); }, child: const Text('OK'), ), ], ); }, ); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Edit User'), ), body: Padding( padding: const EdgeInsets.all(16.0), child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ TextField( controller: _nameController, decoration: const InputDecoration( labelText: 'First Name', ), ), const SizedBox(height: 16.0), TextField( controller: _lastNameController, decoration: const InputDecoration( labelText: 'Last Name', ), ), const SizedBox(height: 16.0), TextField( controller: _emailController, decoration: const InputDecoration( labelText: 'Email', ), keyboardType: TextInputType.emailAddress, ), const SizedBox(height: 16.0), TextField( controller: _usernameController, decoration: const InputDecoration( labelText: 'Username', ), ), const SizedBox(height: 16.0), TextField( controller: _passwordController, decoration: const InputDecoration( labelText: 'Password', ), obscureText: true, ), const SizedBox(height: 16.0), DropdownButton( value: _selectedRole, onChanged: (String? newValue) { setState(() { _selectedRole = newValue!; }); }, items: ['admin', 'user'] .map>((String value) { return DropdownMenuItem( value: value, child: Text(value), ); }).toList(), ), const SizedBox(height: 16.0), ElevatedButton( onPressed: _updateUser, child: const Text('Update'), ), ], ), ), ), ); } }