Flutter筛选列表时出现Class 'int' has no instance getter 'id'错误求助
问题原因与解决方案
问题根源
你代码里的listsearch列表存储的是纯整数类型的ID值(比如打印出的[695, 523, 908,...]),但在筛选时错误地尝试调用product.id——整数类型本身并没有id这个属性,这就是报错的直接原因。
修复方案
方案1:直接对比ID值(适配当前代码逻辑)
因为listsearch里每个元素就是ID本身,直接拿元素和目标ID对比即可,注意类型要匹配:
// 推荐:把目标ID转为int类型对比(和你的ID类型一致) final _filteredList = listsearch.where((id) => id == 1202).toList(); // 备选:如果需要用字符串对比,将ID转为字符串 final _filteredList = listsearch.where((id) => id.toString() == '1202').toList();
方案2:存储完整数据(适合后续扩展)
如果之后需要处理产品的其他字段(比如名称、详情等),可以修改数据存储逻辑,把API返回的完整对象存入列表:
// 修改Searchgetdata中的循环逻辑 for (int i = 0; i < jsonList.length; i++) { listsearch.add(jsonList[i]); // 存入整个JSON对象,而非仅id字段 } // 此时筛选可以通过键名访问id字段 final _filteredList = listsearch.where((product) => product['id'] == 1202).toList();
额外提示
- 建议给
listsearch指定类型,避免类型混淆,比如List<int> listsearch = [](方案1)或List<Map<String, dynamic>> listsearch = [](方案2)。 - 异步数据加载时,建议判断列表是否为空再进行筛选,避免空列表处理问题。
内容的提问来源于stack exchange,提问作者M Al
相关产品推荐
相关产品推荐

