You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:25:25