Flutter中List<String>无法赋值给List<problemModel>的问题求助
问题修复方案
错误原因
你代码里的核心问题有两个:
duplicateItems被声明为List<String>,但problemlist是List<problemModel>,两种类型完全不兼容,无法直接赋值。- 过滤逻辑错误:你用了一个空的字符串列表来过滤,既得不到有效结果,也不符合“根据搜索词过滤问题列表”的需求。
修复后的完整代码
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
相关产品推荐
相关产品推荐

