all_controller.dart 2.7 KB

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