On a project i am working on i list all contacts with checkboxlist. When you tap one it adds to selectedContact list and Database, tap again and it deletes from both so far so good. My problem was when app restarts selected Contacts also zeroed so i used database. I save phone numbers and query all contacts with that phone number and keep adding it to selectedContacts. The problem is even though selectedContact items has the same values as _contacts items selectedContact.contains(c) returns false.
Any ideas?
c is the 'Contact' class object
return ListView.builder(
itemCount: _contacts?.length ?? 0,
itemBuilder: (BuildContext context, int index) {
Contact c = _contacts?.elementAt(index);
//print(snapshot.data[index]);
//selectedContacts.forEach((element) {print(element.phones.first.value);});
//print(selectedContacts.contains(c).toString() +" " +c.phones.first.value);
return CheckboxListTile(
value: selectedContacts.contains(c),
onChanged: (bool value) {
setState(() {
value
? addDb(c)
: deleteDb(c);
});
},
title: Text(c.displayName ?? ""),
secondary: CircleAvatar(child: Text(c.initials())),
);
void addDb(Contact c) {
selectedContacts.add(c);
DatabaseHelper.addContact(c);
}
void deleteDb(Contact c) {
selectedContacts.remove(c);
DatabaseHelper.deleteContact(c);
}
var selectedContacts = List<Contact>();
void importFromDatabase()async{
var import = await DatabaseHelper.importContacts();
import.forEach((element)async {
var contacts = (await ContactsService.getContactsForPhone(element,withThumbnails: false,iOSLocalizedLabels: true)).toList();
selectedContacts.addAll(contacts);
});
}
I have some kind of debugging print statement below which prints selectedContacts and prints if it contains the C
but even though their variables are same it returns false.
EDIT: Contact class is from contacts_service package
// Name
String displayName, givenName, middleName, prefix, suffix, familyName;
// Company
String company, jobTitle;
// Email addresses
Iterable<Item> emails = [];
// Phone numbers
Iterable<Item> phones = [];
// Post addresses
Iterable<PostalAddress> postalAddresses = [];
// Contact avatar/thumbnail
Uint8List avatar;