import 'package:flutter/foundation.dart'; import '../models/book.dart'; /// 搜索状态管理类 /// /// 提供实时搜索功能,支持书名和作者的模糊搜索 /// 使用防抖机制优化性能,避免频繁搜索请求 class SearchProvider with ChangeNotifier { String _searchQuery = ''; bool _isSearching = false; List _searchResults = []; List _allBooks = []; // 公开访问器 String get searchQuery => _searchQuery; bool get isSearching => _isSearching; List get searchResults => _searchResults; bool get hasQuery => _searchQuery.isNotEmpty; bool get hasResults => _searchResults.isNotEmpty; /// 初始化书籍数据源 /// /// [books] 完整的书籍列表,用于搜索过滤 void loadBooks(List books) { _allBooks = books; _searchResults = books; notifyListeners(); } /// 更新搜索关键词并触发搜索 /// /// [query] 新的搜索关键词,支持部分匹配 void updateQuery(String query) { if (_searchQuery == query) return; _searchQuery = query; _performSearch(); } /// 清空搜索状态 /// /// 重置搜索关键词并显示所有书籍 void clearSearch() { _searchQuery = ''; _searchResults = _allBooks; notifyListeners(); } /// 执行搜索逻辑 /// /// 使用300ms防抖延迟,避免频繁搜索请求 /// 支持书名和作者的不区分大小写模糊匹配 void _performSearch() { _isSearching = true; notifyListeners(); if (_searchQuery.isEmpty) { _searchResults = List.from(_allBooks); _isSearching = false; notifyListeners(); return; } Future.delayed(const Duration(milliseconds: 300), () { if (_searchQuery.isEmpty) { _searchResults = List.from(_allBooks); } else { final query = _searchQuery.toLowerCase(); _searchResults = _allBooks.where((book) { return book.title.toLowerCase().contains(query) || (book.author?.toLowerCase().contains(query) ?? false); }).toList(); } _isSearching = false; notifyListeners(); }); } }