contact_state.dart 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import 'package:flutter_contacts/contact.dart';
  2. import 'package:flutter_contacts/flutter_contacts.dart';
  3. import 'package:get/get.dart';
  4. class ContactState {
  5. static RxList<Contact> contactList = <Contact>[].obs;
  6. static RxList<String> initials = <String>[].obs;
  7. static RxMap<String, List<Contact>> groupedContacts = <String, List<Contact>>{}.obs;
  8. static RxList<Contact> selectedContact = <Contact>[].obs;
  9. static Future<void> loadContacts() async {
  10. await getContacts();
  11. ContactState.groupedContacts.value = groupContactsByInitial(ContactState.contactList);
  12. ContactState.initials.value = ContactState.groupedContacts.keys.toList()..sort();
  13. }
  14. static Future<void> getContacts() async {
  15. // 获取所有联系人
  16. List<Contact> contacts = await FlutterContacts.getContacts(
  17. withProperties: true,
  18. withPhoto: true,
  19. );
  20. // 按名字的首字母排序
  21. contacts.sort((a, b) => (a.displayName ?? '').compareTo(b.displayName ?? ''));
  22. ContactState.contactList.value = contacts;
  23. }
  24. static Map<String, List<Contact>> groupContactsByInitial(List<Contact> contacts) {
  25. Map<String, List<Contact>> groupedContacts = {};
  26. for (var contact in contacts) {
  27. String initial = (contact.displayName ?? '').isNotEmpty
  28. ? contact.displayName[0].toUpperCase()
  29. : '#';
  30. if (!groupedContacts.containsKey(initial)) {
  31. groupedContacts[initial] = [];
  32. }
  33. groupedContacts[initial]!.add(contact);
  34. }
  35. return groupedContacts;
  36. }
  37. }