Selaa lähdekoodia

Merge branch 'v1.1.0' of http://git.atmob.com:28999/Atmob-Flutter/Clean into v1.1.0

# Conflicts:
#	lib/module/contact/duplicate/controller.dart
Destiny 11 kuukautta sitten
vanhempi
commit
818f24cc41

+ 7 - 4
lib/module/contact/all/all_controller.dart

@@ -93,9 +93,12 @@ class AllController extends BaseController {
     for (var contact in contactToDelete) {
       contact.delete();
     }
-    LoadingDialog.hide();
-    ToastUtil.show("Successful");
-    exitEditMode();
-    ContactState.loadContacts();
+
+    Future.delayed(Duration(milliseconds: 300), () {
+      ToastUtil.show("Successful");
+      exitEditMode();
+      LoadingDialog.hide();
+      ContactState.loadContacts();
+    });
   }
 }

+ 27 - 4
lib/module/contact/duplicate/controller.dart

@@ -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();
+    });
   }
 
   // 统计联系人的信息数量

+ 15 - 6
lib/module/contact/incomplete/controller.dart

@@ -2,12 +2,14 @@ import 'package:clean/base/base_controller.dart';
 import 'package:clean/data/repositories/user_repository.dart';
 import 'package:clean/module/contact/contact_state.dart';
 import 'package:clean/module/store/store_view.dart';
+import 'package:flutter/Material.dart';
 import 'package:flutter/widgets.dart';
 import 'package:flutter_contacts/contact.dart';
 import 'package:get/get.dart';
 
 import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
 
+import '../../../dialog/loading_dialog.dart';
 import '../../../utils/toast_util.dart';
 
 class ContactInCompleteController extends BaseController {
@@ -79,25 +81,32 @@ class ContactInCompleteController extends BaseController {
       ToastUtil.show("Please select a contact");
       return;
     }
+
     print("deleteBtnClick selectedContacts: $selectedContacts");
     final contactToDelete = ContactState.contactList
         .where((contact) => selectedContacts.contains(contact.id))
         .toList();
 
+
+    LoadingDialog.show();
+
     for (var contact in contactToDelete) {
       await contact.delete(); // 删除操作必须 `await`
     }
 
-    ToastUtil.show("Successful");
+    Future.delayed(Duration(milliseconds: 300), ()async {
+      LoadingDialog.hide();
+      ToastUtil.show("Successful");
 
-    exitEditMode();
+      exitEditMode();
 
-    await ContactState.loadContacts(); // 确保联系人列表更新
+      await ContactState.loadContacts(); // 确保联系人列表更新
 
-    filterContacts(); // 重新筛选联系人
-    groupContacts(); // 重新分组
+      filterContacts(); // 重新筛选联系人
+      groupContacts(); // 重新分组
 
-    debugPrint("filteredContacts.length: ${filteredContacts.length}");
+      debugPrint("filteredContacts.length: ${filteredContacts.length}");
+    });
   }
 
   // 全选/取消全选