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

Flutter中List<String>无法赋值给List<problemModel>的问题求助

问题修复方案

错误原因

你代码里的核心问题有两个:

  1. duplicateItems被声明为List<String>,但problemlist是List<problemModel>,两种类型完全不兼容,无法直接赋值。
  2. 过滤逻辑错误:你用了一个空的字符串列表来过滤,既得不到有效结果,也不符合“根据搜索词过滤问题列表”的需求。

修复后的完整代码

class _view_problemState extends State<view_problem> {
  List<problemModel> problemlist = [];
  List<problemModel> _originalProblemList = []; // 新增:保存原始问题列表
  StreamController _streamController = StreamController();

  Future getAllProblem() async {
    _originalProblemList = await problemcontrollers().getProblem();
    problemlist = List.from(_originalProblemList); // 初始化显示全部问题
    _streamController.sink.add(problemlist);
  }

  @override
  void initState() {
    Timer.periodic(Duration(seconds: 1), (timer) {
      getAllProblem();
    });
    super.initState();
  }

  void _filterSearch(String query) {
    setState(() {
      if (query.trim().isEmpty) {
        // 搜索框为空时,恢复显示全部问题
        problemlist = List.from(_originalProblemList);
      } else {
        // 根据problemModel中的字符串字段过滤(这里假设字段名为title,你需要替换成实际字段)
        problemlist = _originalProblemList
            .where((problem) =>
                problem.title.toLowerCase().contains(query.toLowerCase()))
            .toList();
      }
    });
  }
}

关键修改点

  • 新增_originalProblemList变量,用来保存从接口获取的完整问题列表,避免每次过滤都重新请求网络,同时作为过滤的数据源。
  • 移除了无用的duplicateItems变量,直接基于_originalProblemList进行过滤。
  • 过滤时指定problemModel中的具体字符串字段(比如title),你需要根据自己的problemModel类结构替换成实际存在的字段(比如问题描述、编号等)。
  • 增加了搜索框为空时的处理逻辑,恢复显示全部问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:05:27