You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
6.9 KiB
210 lines
6.9 KiB
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<ContatcDetailPage> { |
|
late TextEditingController _nameController; |
|
late TextEditingController _emailController; |
|
late TextEditingController _phoneController; |
|
late TextEditingController _streetController; |
|
late TextEditingController _street2Controller; |
|
late TextEditingController _cityController; |
|
late TextEditingController _countryController; |
|
|
|
|
|
// Future<ContactDetail> 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<void> _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<ContactDetail> _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; |
|
} |
|
} |