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

搜索功能无法恢复原始待办数据问题排查求助

待办事项搜索功能异常问题

问题现象

  • 在搜索栏输入任意文本可得到筛选后的结果,但其余待办事项会消失
  • 清空搜索栏后无法恢复显示全部待办事项

搜索前:显示完整的待办列表
搜索后:仅保留匹配的待办条目,其余条目丢失

问题代码

搜索功能实现代码

List<Todos> todList =[];
searchTodo(String enterdText) {
    final search = todList.where((txt) {
      final inputtext = txt.todoText.toLowerCase();
      final input = enterdText.toLowerCase();
      return inputtext.contains(input);
    }).toList();
    setState(() => {todList = search});
  }

搜索栏UI代码

TextField(
              onChanged: searchTodo,
              decoration: InputDecoration(
                  hintText: 'Search',
                  prefixIcon: Icon(Icons.search_rounded),
                  //  enabledBorder: InputBorder.none,
                  iconColor: Colors.grey.shade400,
                  border: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(20))),
            ),

修复方案

问题核心是直接覆盖了唯一的待办列表todList,导致原始数据丢失,无法恢复。需维护原始待办数据副本,搜索时基于原始数据筛选,仅更新用于显示的列表。

修改后的代码示例:

// 保存所有待办的原始数据,不会被搜索操作修改
List<Todos> _originalTodoList = [];
// 用于界面显示的列表,随搜索结果动态更新
List<Todos> todList = [];

// 初始化或更新待办数据时调用,同步原始列表和显示列表
void updateTodoList(List<Todos> newTodos) {
  _originalTodoList = List.from(newTodos);
  todList = List.from(newTodos);
  setState(() {});
}

searchTodo(String enteredText) {
  if (enteredText.trim().isEmpty) {
    // 搜索框清空时,恢复显示全部待办
    setState(() {
      todList = List.from(_originalTodoList);
    });
    return;
  }
  // 基于原始列表执行筛选,避免修改原始数据
  final searchResult = _originalTodoList.where((todo) {
    final todoText = todo.todoText.toLowerCase();
    final input = enteredText.toLowerCase();
    return todoText.contains(input);
  }).toList();
  setState(() {
    todList = searchResult;
  });
}

修改后,搜索框清空时会自动恢复显示全部待办,且原始数据始终保留,不会丢失。

内容的提问来源于stack exchange,提问作者faiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:10:39