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

Flutter搜索栏功能异常:输入关键词无结果求排查

问题排查与修复方案

核心问题点

  • 搜索函数变量命名冲突:_filterSearch里重新声明了同名的局部problemlist,导致循环遍历的是空列表,完全没用到全局数据源。
  • 模型匹配逻辑无效:用item.toString().contains(query)判断,默认toString()不会返回模型的具体字段内容(比如姓名、区域),无法正确匹配关键词。
  • 搜索结果未更新UI:筛选完成后,既没把结果传递给流控制器,也没触发UI刷新,导致搜索结果无法展示。
  • 定时刷新覆盖搜索结果:initState里的每秒定时任务会重新拉取全量数据,直接覆盖搜索结果。

修复后的完整代码

class view_problem extends StatefulWidget {
  @override
  State<view_problem> createState() => _view_problemState();
}

class _view_problemState extends State<view_problem> {
  List<problemModel> problemlist = [];
  List<problemModel> filteredList = [];
  StreamController _streamController = StreamController();
  Timer? _refreshTimer;

  Future getAllProblem() async {
    problemlist = await problemcontrollers().getProblem();
    filteredList = List.from(problemlist);
    _streamController.sink.add(filteredList);
  }

  @override
  void initState() {
    getAllProblem();
    // 如需定时刷新,建议添加搜索状态判断,避免覆盖搜索结果
    // _refreshTimer = Timer.periodic(Duration(seconds: 10), (timer) {
    //   getAllProblem();
    // });
    super.initState();
  }

  @override
  void dispose() {
    _streamController.close();
    _refreshTimer?.cancel();
    super.dispose();
  }

  void _filterSearch(String query) {
    if (query.isEmpty) {
      filteredList = List.from(problemlist);
    } else {
      filteredList = problemlist.where((item) {
        // 匹配具体字段,忽略大小写提升体验
        return item.name_surname.toLowerCase().contains(query.toLowerCase()) ||
            item.area.toLowerCase().contains(query.toLowerCase());
      }).toList();
    }
    _streamController.sink.add(filteredList);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: const Color.fromARGB(255, 14, 12, 134),
        title: const Text('information'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(10),
        child: Column(
          children: [
            const SizedBox(height: 20),
            TextField(
              onChanged: (value) => _filterSearch(value),
              decoration: const InputDecoration(
                  labelText: 'Search', suffixIcon: Icon(Icons.search)),
            ),
            const SizedBox(height: 20),
            Expanded(
              child: StreamBuilder(
                stream: _streamController.stream,
                builder: (context, snapshots) {
                  if (snapshots.hasData) {
                    return ListView.builder(
                        itemCount: filteredList.length,
                        itemBuilder: ((context, index) {
                          problemModel problem = filteredList[index];
                          return Card(
                            margin: const EdgeInsets.all(10),
                            child: ListTile(
                              title: Text(
                                problem.name_surname,
                                style: const TextStyle(
                                    fontWeight: FontWeight.bold, fontSize: 19),
                              ),
                              subtitle: Text(
                                problem.area,
                                style: const TextStyle(
                                    fontWeight: FontWeight.bold, fontSize: 17),
                              ),
                              trailing: Text(
                                problem.status,
                                style: const TextStyle(
                                    fontWeight: FontWeight.bold, fontSize: 16),
                              ),
                            ),
                          );
                        }));
                  }
                  return const Center(child: CircularProgressIndicator());
                },
              ),
            )
          ],
        ),
      ),
    );
  }
}

关键修复说明

  • 新增filteredList存储筛选结果,避免和原始数据源冲突
  • 搜索时匹配模型的具体字段(姓名、区域),并忽略大小写优化体验
  • 移除了每秒自动刷新的定时任务(如需保留,建议添加搜索状态判断)
  • 筛选完成后通过流控制器发送结果,触发UI更新
  • 完善资源释放,在dispose中关闭流和取消定时任务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:23:10