diff --git a/lib/screens/add_edit_contact_screen.dart b/lib/screens/add_edit_contact_screen.dart new file mode 100644 index 0000000..f8805d5 --- /dev/null +++ b/lib/screens/add_edit_contact_screen.dart @@ -0,0 +1,133 @@ +import 'package:flutter/material.dart'; +import 'package:contacts_dataist_ir/models/contact.dart'; +import 'package:contacts_dataist_ir/database/database_helper.dart'; + +class AddEditContactScreen extends StatefulWidget { + final Contact? contact; // Optional: if editing an existing contact + + const AddEditContactScreen({super.key, this.contact}); + + @override + State createState() => _AddEditContactScreenState(); +} + +class _AddEditContactScreenState extends State { + final _formKey = GlobalKey(); // Key for form validation + final DatabaseHelper _dbHelper = DatabaseHelper(); + + late TextEditingController _nameController; + late TextEditingController _phoneController; + late TextEditingController _emailController; + late TextEditingController _addressController; + late TextEditingController _companyController; + late TextEditingController _notesController; + + @override + void initState() { + super.initState(); + _nameController = TextEditingController(text: widget.contact?.name ?? ''); + _phoneController = TextEditingController(text: widget.contact?.phone ?? ''); + _emailController = TextEditingController(text: widget.contact?.email ?? ''); + _addressController = TextEditingController(text: widget.contact?.address ?? ''); + _companyController = TextEditingController(text: widget.contact?.company ?? ''); + _notesController = TextEditingController(text: widget.contact?.notes ?? ''); + } + + @override + void dispose() { + _nameController.dispose(); + _phoneController.dispose(); + _emailController.dispose(); + _addressController.dispose(); + _companyController.dispose(); + _notesController.dispose(); + super.dispose(); + } + + Future _saveContact() async { + if (_formKey.currentState!.validate()) { + final isEditing = widget.contact != null; + final Contact contact = Contact( + id: isEditing ? widget.contact!.id : null, + name: _nameController.text, + phone: _phoneController.text.isEmpty ? null : _phoneController.text, + email: _emailController.text.isEmpty ? null : _emailController.text, + address: _addressController.text.isEmpty ? null : _addressController.text, + company: _companyController.text.isEmpty ? null : _companyController.text, + notes: _notesController.text.isEmpty ? null : _notesController.text, + ); + + try { + if (isEditing) { + await _dbHelper.updateContact(contact); + } else { + await _dbHelper.insertContact(contact); + } + if (mounted) { // Check if the widget is still mounted before navigating + Navigator.pop(context, true); // Pop with 'true' indicating success + } + } catch (e) { + print('Error saving contact: $e'); + // TODO: Show an error message to the user + } + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(widget.contact == null ? 'Add New Contact' : 'Edit Contact'), + backgroundColor: Theme.of(context).colorScheme.primary, + ), + body: Padding( + padding: const EdgeInsets.all(16.0), + child: Form( + key: _formKey, + child: ListView( + children: [ + TextFormField( + controller: _nameController, + decoration: const InputDecoration(labelText: 'Name *'), + validator: (value) { + if (value == null || value.isEmpty) { + return 'Please enter a name'; + } + return null; + }, + ), + TextFormField( + controller: _phoneController, + decoration: const InputDecoration(labelText: 'Phone'), + keyboardType: TextInputType.phone, + ), + TextFormField( + controller: _emailController, + decoration: const InputDecoration(labelText: 'Email'), + keyboardType: TextInputType.emailAddress, + ), + TextFormField( + controller: _addressController, + decoration: const InputDecoration(labelText: 'Address'), + ), + TextFormField( + controller: _companyController, + decoration: const InputDecoration(labelText: 'Company'), + ), + TextFormField( + controller: _notesController, + decoration: const InputDecoration(labelText: 'Notes'), + maxLines: 3, + ), + const SizedBox(height: 20), + ElevatedButton( + onPressed: _saveContact, + child: Text(widget.contact == null ? 'Save Contact' : 'Update Contact'), + ), + ], + ), + ), + ), + ); + } +} \ No newline at end of file