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

Flutter中'duplicateItems'未定义,修改后仍报错,寻求解决

解决“未定义名称'duplicateItems'”及搜索过滤问题

核心问题分析

  1. 未定义duplicateItems:代码直接使用了duplicateItems变量,但从未声明过它——这是报错的直接原因。
  2. 改名后仍报错的隐藏问题:problemlist是problemModel对象列表,你试图调用item.toLowerCase(),但对象本身没有这个方法,必须针对对象的具体属性(比如标题、描述等)做字符串处理。
  3. 额外性能隐患:initState里每1秒调用一次接口,会导致频繁网络请求和状态刷新,严重影响性能。

完整修复方案

1. 声明原始数据副本

在状态类里新增变量保存接口返回的原始数据,避免过滤时覆盖原始列表:

class _ViewProblemState extends State<ViewProblem> {
  List<ProblemModel> problemlist = [];
  // 新增:保存原始数据的副本
  List<ProblemModel> _originalProblemList = [];
  StreamController _streamController = StreamController();
  Timer? _timer; // 新增:管理定时器
  // ...
}

2. 修改接口请求逻辑

更新getAllProblem方法,同时更新原始列表和显示列表:

Future getAllProblem() async {
  _originalProblemList = await Problemcontrollers().getProblem();
  setState(() {
    // 重置显示列表为原始数据
    problemlist = List.from(_originalProblemList);
  });
  _streamController.sink.add(_originalProblemList);
}

3. 修复搜索过滤逻辑

针对problemModel的具体属性(比如title,请根据实际模型字段修改)进行过滤:

void _filterSearch(String query) {
  setState(() {
    if (query.trim().isEmpty) {
      // 搜索为空时重置为原始列表
      problemlist = List.from(_originalProblemList);
    } else {
      problemlist = _originalProblemList
          .where((item) => 
              // 替换为你实际需要过滤的字段,比如item.title
              item.title.toLowerCase().contains(query.toLowerCase()))
          .toList();
    }
  });
}

4. 优化定时器与资源释放

调整定时器间隔(建议拉长到30秒以上),并在页面销毁时释放资源:

@override
void initState() {
  super.initState();
  // 初始化时先请求一次数据
  getAllProblem();
  // 设置定时刷新,避免过于频繁
  _timer = Timer.periodic(Duration(seconds: 30), (timer) {
    getAllProblem();
  });
}

@override
void dispose() {
  // 页面销毁时取消定时器
  _timer?.cancel();
  // 关闭流控制器,避免内存泄漏
  _streamController.close();
  super.dispose();
}

5. 代码规范修正(可选但推荐)

遵循Dart代码规范,类名首字母大写、使用驼峰命名:

// 修正类名
class ViewProblem extends StatefulWidget {
  @override
  State<ViewProblem> createState() => _ViewProblemState();
}

// 修正模型类名
class ProblemModel {
  // 你的模型字段
  String title;
  // ...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:10:28