Flutter添加搜索功能后无法恢复初始用户列表问题求助
问题原因
你直接将过滤后的结果赋值给了users变量,导致原始的完整用户列表被覆盖。当删除搜索字符时,没有原始数据可以重新生成完整列表,所以无法恢复。
解决方案
需要单独保存一份原始的完整用户列表,每次搜索都基于这份原始数据进行过滤,而不是修改后的users。
步骤1:新增原始列表变量
在你的State类中添加一个变量来存储原始用户数据:
List<User>? users; // 当前展示的用户列表 List<User>? _originalUsers; // 存储从数据库获取的完整用户列表
步骤2:保存原始数据
修改getUsersFromDatabase方法,将获取到的完整数据同时赋值给users和_originalUsers:
void getUsersFromDatabase() async { // 替换成你实际从数据库获取数据的逻辑 final fetchedUsers = await fetchUsers(); setState(() { users = fetchedUsers; _originalUsers = fetchedUsers; // 保存原始完整列表 }); }
步骤3:修改搜索函数
让搜索基于原始列表进行过滤,而不是当前的users:
void searchUser(String query) { if (_originalUsers == null) return; setState(() { if (query.trim().isEmpty) { // 查询为空时,直接恢复完整列表 users = _originalUsers; } else { final suggestions = _originalUsers!.where((user) { final userName = user.name.toLowerCase(); final input = query.toLowerCase(); return userName.contains(input); }).toList(); users = suggestions; } }); }
这样修改后,无论你怎么修改搜索框的内容,都是基于原始的完整用户列表进行过滤,删除搜索字符时自然就能恢复初始的完整列表了。
内容的提问来源于stack exchange,提问作者Fedy Belaid
相关产品推荐
相关产品推荐

