all_controller.dart 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import 'package:clean/base/base_controller.dart';
  2. import 'package:clean/module/contact/contact_state.dart';
  3. import 'package:clean/utils/toast_util.dart';
  4. import 'package:flutter/Material.dart';
  5. import 'package:flutter_contacts/contact.dart';
  6. import 'package:get/get.dart';
  7. import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
  8. class AllController extends BaseController {
  9. // 是否为编辑状态
  10. RxBool isEdit = false.obs;
  11. // 是否全选
  12. RxBool isAllSelected = false.obs;
  13. // 存储选中的图片ID
  14. final RxSet<String> selectedContacts = <String>{}.obs;
  15. final ItemScrollController itemScrollController = ItemScrollController();
  16. final ItemPositionsListener itemPositionsListener = ItemPositionsListener.create();
  17. @override
  18. void onInit() {
  19. // TODO: implement onInit
  20. super.onInit();
  21. }
  22. void scrollToInitial(String initial) {
  23. int index = ContactState.initials.indexOf(initial);
  24. if (index != -1) {
  25. final positions = itemPositionsListener.itemPositions.value;
  26. final isVisible = positions.any((position) => position.index == index);
  27. if (!isVisible) {
  28. itemScrollController.scrollTo(
  29. index: index,
  30. duration: Duration(milliseconds: 300),
  31. );
  32. }
  33. }
  34. }
  35. // 选择/取消选择联系人
  36. void toggleSelectContact(Contact selectContact) {
  37. // final asset = ContactState.contactList.firstWhere((contact) => contact.id == selectContact.id);
  38. if (selectedContacts.contains(selectContact.id)) {
  39. selectedContacts.remove(selectContact.id);
  40. } else {
  41. selectedContacts.add(selectContact.id);
  42. }
  43. // 更新全选状态
  44. isAllSelected.value = ContactState.selectedContact.length == ContactState.contactList.length;
  45. }
  46. // 全选/取消全选
  47. void toggleSelectAll() {
  48. if (isAllSelected.value) {
  49. selectedContacts.clear();
  50. } else {
  51. selectedContacts.addAll(ContactState.contactList.map((contact) => contact.id));
  52. }
  53. isAllSelected.value = !isAllSelected.value;
  54. }
  55. // 退出编辑模式时清空选择
  56. void exitEditMode() {
  57. isEdit.value = false;
  58. selectedContacts.clear();
  59. isAllSelected.value = false;
  60. }
  61. void deleteBtnClick() {
  62. // 获取要删除的资产
  63. final contactToDelete =
  64. ContactState.contactList.where((contact) => selectedContacts.contains(contact.id)).toList();
  65. for (var contact in contactToDelete) {
  66. contact.delete();
  67. }
  68. ToastUtil.show("Successful");
  69. exitEditMode();
  70. ContactState.loadContacts();
  71. }
  72. }