import 'package:flutter/material.dart'; import 'secureStorage.dart'; import 'homepage.dart'; import 'contactService.dart'; import 'model/contactDetail.dart'; import 'dart:convert'; import 'dart:typed_data'; class ContatcDetailPage extends StatefulWidget { late ContactDetail contact ; late ContactService contactService; ContatcDetailPage({Key? key, required this.contact, required this.contactService}) : super(key: key); @override _ContatcDetailPageState createState() => _ContatcDetailPageState(); } class _ContatcDetailPageState extends State { late TextEditingController _nameController; late TextEditingController _emailController; late TextEditingController _phoneController; late TextEditingController _streetController; late TextEditingController _street2Controller; late TextEditingController _cityController; late TextEditingController _countryController; // Future getContactDetailValues() async { // final response = await _contactService.contactDetailRequest(); // final ContactDetail contactResult = ContactDetail.fromJson(response); // print(contactResult); // return contactResult; // } @override void initState() { super.initState(); _nameController = TextEditingController(text: widget.contact.name.toString()); _emailController = TextEditingController(text: widget.contact.email.toString()); _phoneController = TextEditingController(text: widget.contact.phone.toString()); _streetController = TextEditingController(text: widget.contact.street.toString()); _street2Controller = TextEditingController(text: widget.contact.street2.toString()); _cityController = TextEditingController(text: widget.contact.city.toString()); _countryController = TextEditingController(text: widget.contact.country.toString()); } @override void dispose() { _nameController.dispose(); _emailController.dispose(); _phoneController.dispose(); _streetController.dispose(); _cityController.dispose(); _countryController.dispose(); super.dispose(); } getCircleAvatar(image) { if (image != null && image != false){ Uint8List imageBytes = base64.decode(image); ImageProvider imageProvider = MemoryImage(imageBytes); return CircleAvatar( backgroundImage: imageProvider, radius: 50, ); } else{ return null; } } Future _deleteContact(BuildContext context) async { final response = await widget.contactService.contactDeleteRequest(id: widget.contact.id);// Replace with your API endpoint if (response['data']['delete'] == 'Success') { final apikey = await userCreds.read(key: 'api-key'); Navigator.push( context, MaterialPageRoute(builder: (_) => HomePage(apikey:apikey.toString())) ); // Go back to contact list page after successful delete } else { // Show error message if delete fails showDialog( context: context, builder: (context) => AlertDialog( title: Text('Error'), content: Text('Failed to delete contact. Please try again.'), actions: [ TextButton( onPressed: () { Navigator.pop(context); }, child: Text('OK'), ), ], ), ); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Contact Details'), actions: [ IconButton( icon: Icon(Icons.save), onPressed: () async { // Save changes and navigate back print('update clicked with name${widget.contact.name}'); final ContactDetail updatedrResult = await _saveUpdateChanges(); print(updatedrResult); setState(() { widget.contact = updatedrResult; }); }, ), IconButton( icon: Icon(Icons.delete), onPressed:() { showDialog( context: context, builder: (context) => AlertDialog( title: Text('Confirm Delete'), content: Text('Are you sure you want to delete this contact?'), actions: [ TextButton( onPressed: (){ Navigator.pop(context); }, child: Text('Cancel') ), TextButton( onPressed: () async { await _deleteContact(context); }, child: Text('Delete') ) ], ) ); }, ) ] ), body: SingleChildScrollView( padding: EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Center( child: getCircleAvatar(widget.contact.image1920), ), SizedBox(height: 16), TextFormField( controller: _nameController, decoration: InputDecoration(labelText: 'Name'), ), TextFormField( controller: _emailController, decoration: InputDecoration(labelText: 'Email'), ), TextFormField( controller: _phoneController, decoration: InputDecoration(labelText: 'Phone'), ), SizedBox(height: 16), Text( 'Address:', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), TextFormField( controller: _streetController, decoration: InputDecoration(labelText: 'Street'), ), TextFormField( controller: _street2Controller, decoration: InputDecoration(labelText: 'Street2'), ), TextFormField( controller: _cityController, decoration: InputDecoration(labelText: 'City'), ), TextFormField( controller: _countryController, decoration: InputDecoration(labelText: 'Country'), readOnly: true, ), ], ), ), ); } Future _saveUpdateChanges() async { final updatedContact = ContactDetail( id: widget.contact.id, name: _nameController.text, email: _emailController.text, phone: _phoneController.text, image1920: widget.contact.image1920, street: _streetController.text, street2: _street2Controller.text, city: _cityController.text, country: _countryController.text, ); final newUpdatedContacts = await widget.contactService.contactUpdateRequest(contact: updatedContact); return newUpdatedContacts; } }