|
|
@@ -39,6 +39,11 @@ class ContactDuplicateController extends BaseController {
|
|
|
final UnionFind uf = UnionFind();
|
|
|
final Map<String, List<Contact>> phoneToContactsMap = {};
|
|
|
|
|
|
+ // 获取所有联系人
|
|
|
+ List<Contact> contacts = await FlutterContacts.getContacts(
|
|
|
+ withProperties: true,
|
|
|
+ withPhoto: true,
|
|
|
+ );
|
|
|
// 遍历所有联系人,建立电话号码与联系人的映射
|
|
|
for (var contact in contacts) {
|
|
|
for (var phone in contact.phones) {
|
|
|
@@ -49,6 +54,9 @@ class ContactDuplicateController extends BaseController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 按名字的首字母排序
|
|
|
+ contacts
|
|
|
+ .sort((a, b) => (a.displayName ?? '').compareTo(b.displayName ?? ''));
|
|
|
// 合并拥有相同电话号码的联系人
|
|
|
for (var phone in phoneToContactsMap.keys) {
|
|
|
final contactList = phoneToContactsMap[phone]!;
|
|
|
@@ -60,6 +68,17 @@ class ContactDuplicateController extends BaseController {
|
|
|
// 整理分组结果
|
|
|
final Map<Contact, List<Contact>> groupedContacts = {};
|
|
|
for (var contact in contacts) {
|
|
|
+ if (contact.phones.isNotEmpty) {
|
|
|
+ for (var phone in contact.phones) {
|
|
|
+ final phoneNumber = phone.number;
|
|
|
+
|
|
|
+ if (phoneNumber.isNotEmpty) {
|
|
|
+ if (!groupedContacts.containsKey(phoneNumber)) {
|
|
|
+ groupedContacts[phoneNumber] = [];
|
|
|
+ }
|
|
|
+ groupedContacts[phoneNumber]!.add(contact);
|
|
|
+ }
|
|
|
+ }
|
|
|
final root = uf.find(contact);
|
|
|
if (!groupedContacts.containsKey(root)) {
|
|
|
groupedContacts[root] = [];
|
|
|
@@ -67,6 +86,7 @@ class ContactDuplicateController extends BaseController {
|
|
|
groupedContacts[root]!.add(contact);
|
|
|
}
|
|
|
|
|
|
+ Map<String, List<Contact>> tempContacts = {};
|
|
|
Map<Contact, List<Contact>> tempContacts = {};
|
|
|
tempContacts.addAll(groupedContacts);
|
|
|
for (var key in groupedContacts.keys) {
|
|
|
@@ -75,6 +95,7 @@ class ContactDuplicateController extends BaseController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ contactsByPhoneNumber.value = tempContacts;
|
|
|
return tempContacts;
|
|
|
}
|
|
|
|
|
|
@@ -279,13 +300,15 @@ class ContactDuplicateController extends BaseController {
|
|
|
.where((contact) => selectedContacts.contains(contact.id))
|
|
|
.toList();
|
|
|
|
|
|
+ LoadingDialog.show();
|
|
|
for (var contact in contactToDelete) {
|
|
|
contact.delete();
|
|
|
}
|
|
|
-
|
|
|
- ToastUtil.show("Successful");
|
|
|
- exitEditMode();
|
|
|
- ContactState.loadContacts();
|
|
|
+ Future.delayed(Duration(milliseconds: 300), () {
|
|
|
+ ToastUtil.show("Successful");
|
|
|
+ exitEditMode();
|
|
|
+ ContactState.loadContacts();
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
// 统计联系人的信息数量
|