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'), ), ], ), ), ), ); } }