all_controller.dart 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. var isScroll = true;
  25. itemPositionsListener.itemPositions.addListener(() {
  26. final positions = itemPositionsListener.itemPositions.value;
  27. for (var position in positions) {
  28. if (index == position.index) {
  29. isScroll = false;
  30. }
  31. print('Item ${position.index} is visible at position ${position.itemLeadingEdge}');
  32. }
  33. if (index != -1 && isScroll) {
  34. itemScrollController.scrollTo(
  35. index: index, duration: Duration(milliseconds: 300),
  36. // curve: Curves,
  37. );
  38. }
  39. });
  40. }
  41. // 选择/取消选择联系人
  42. void toggleSelectContact(Contact selectContact) {
  43. final asset = ContactState.contactList.firstWhere((contact) => contact.id == selectContact.id);
  44. if (selectedContacts.contains(selectContact.id)) {
  45. selectedContacts.remove(selectContact.id);
  46. } else {
  47. selectedContacts.add(selectContact.id);
  48. }
  49. // 更新全选状态
  50. isAllSelected.value = ContactState.selectedContact.length == ContactState.contactList.length;
  51. }
  52. // 全选/取消全选
  53. void toggleSelectAll() {
  54. if (isAllSelected.value) {
  55. selectedContacts.clear();
  56. } else {
  57. selectedContacts.addAll(ContactState.contactList.map((contact) => contact.id));
  58. }
  59. isAllSelected.value = !isAllSelected.value;
  60. }
  61. // 退出编辑模式时清空选择
  62. void exitEditMode() {
  63. isEdit.value = false;
  64. selectedContacts.clear();
  65. isAllSelected.value = false;
  66. }
  67. void deleteBtnClick() {
  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. }