element_provider.dart 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import 'package:flutter/foundation.dart';
  2. import '../models/element.dart';
  3. import '../services/mock_data_service.dart';
  4. /// 要素状态管理
  5. class ElementProvider with ChangeNotifier {
  6. List<DocumentElement> _elements = [];
  7. List<DocumentElement> _selectedElements = [];
  8. String? _searchQuery;
  9. ElementType? _filterType;
  10. bool _loading = false;
  11. List<DocumentElement> get elements => _elements;
  12. List<DocumentElement> get selectedElements => _selectedElements;
  13. String? get searchQuery => _searchQuery;
  14. ElementType? get filterType => _filterType;
  15. bool get loading => _loading;
  16. /// 过滤后的要素列表
  17. List<DocumentElement> get filteredElements {
  18. var filtered = _elements;
  19. // 搜索过滤
  20. if (_searchQuery != null && _searchQuery!.isNotEmpty) {
  21. filtered = filtered.where((e) {
  22. return e.label.toLowerCase().contains(_searchQuery!.toLowerCase()) ||
  23. e.value.toLowerCase().contains(_searchQuery!.toLowerCase());
  24. }).toList();
  25. }
  26. // 类型过滤
  27. if (_filterType != null) {
  28. filtered = filtered.where((e) => e.type == _filterType).toList();
  29. }
  30. return filtered;
  31. }
  32. ElementProvider() {
  33. loadElements();
  34. }
  35. /// 加载要素列表
  36. Future<void> loadElements({String? documentId}) async {
  37. _loading = true;
  38. notifyListeners();
  39. // 模拟网络请求
  40. await Future.delayed(const Duration(milliseconds: 300));
  41. _elements = MockDataService.getMockElements();
  42. if (documentId != null) {
  43. _elements = _elements.where((e) => e.documentId == documentId).toList();
  44. }
  45. _loading = false;
  46. notifyListeners();
  47. }
  48. /// 设置搜索查询
  49. void setSearchQuery(String? query) {
  50. _searchQuery = query;
  51. notifyListeners();
  52. }
  53. /// 设置类型过滤
  54. void setFilterType(ElementType? type) {
  55. _filterType = type;
  56. notifyListeners();
  57. }
  58. /// 添加要素
  59. void addElement(DocumentElement element) {
  60. _elements.add(element);
  61. notifyListeners();
  62. }
  63. /// 批量替换要素
  64. void setElements(List<DocumentElement> elements) {
  65. _elements = List<DocumentElement>.from(elements);
  66. _selectedElements.clear();
  67. notifyListeners();
  68. }
  69. /// 删除要素
  70. void removeElement(String id) {
  71. _elements.removeWhere((e) => e.id == id);
  72. _selectedElements.removeWhere((e) => e.id == id);
  73. notifyListeners();
  74. }
  75. /// 选择要素
  76. void selectElement(DocumentElement element) {
  77. if (!_selectedElements.contains(element)) {
  78. _selectedElements.add(element);
  79. notifyListeners();
  80. }
  81. }
  82. /// 取消选择要素
  83. void deselectElement(DocumentElement element) {
  84. _selectedElements.remove(element);
  85. notifyListeners();
  86. }
  87. /// 清空选择
  88. void clearSelection() {
  89. _selectedElements.clear();
  90. notifyListeners();
  91. }
  92. }