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

Flutter中API数据按状态过滤输出Instance of 'Data'问题求助

过滤API返回数据时显示[Instance of 'Data']的问题解决

问题场景

从API获取包含Ongoing、Upcoming、Past三种状态的数据,希望通过按钮点击事件分别过滤这三类数据。使用where方法过滤后,打印结果为[Instance of 'Data', Instance of 'Data'],无法查看具体数据内容。

API响应示例

{"status": true, "result": "found", "data": [{"ref_id": "73", "postId": "106764933065187174744", "azakhana_name": "sakina baugh", "city_name": "rajula", "description": "djsjjsje", "end_date": "31-01-2023", "image_path": "Posts_Images\/POST-IMG106843982.jpg", "name_of_schollar": "Yasin Rajani", "postDateTime": "19-01-2023 12:22 PM", "program_list": "Majlis", "special_notes": "bsjsisjs", "start_date": "31-01-2023", "time": "3:30 PM", "user_name": "Taki Rajani", "status": "Upcoming"}, {"ref_id": "71", "postId": "106764933065187174744", "azakhana_name": "Shanti baugh", "city_name": "Mahuva", "description": "No", "end_date": "31-01-2023", "image_path": "Posts_Images\/POST-IMG471193454.jpg", "name_of_schollar": "Molana ", "postDateTime": "18-01-2023 12:28 PM", "program_list": "Majlis", "special_notes": "No", "start_date": "18-01-2023", "time": "12:28 PM", "user_name": "Taki Rajani", "status": "Ongoing"}, {"ref_id": "72", "postId": "106764933065187174744", "azakhana_name": "hussiani hall ", "city_name": "Mahuva ", "description": "jsjsisjw", "end_date": "31-01-2023", "image_path": "Posts_Images\/POST-IMG1564452985.jpg", "name_of_schollar": "yes soon", "postDateTime": "19-01-2023 12:21 PM", "program_list": "Majlis", "special_notes": "sjsis8sisjsj", "start_date": "17-01-2023", "time": "12:20 PM", "user_name": "Taki Rajani", "status": "Ongoing"}], "totalPosts": "3", "totalPages": 1, "perPageLimit": 3, "currentPage": 1, "hasNextPage": 0}

过滤代码

var _status = snapshot.data!.data!.where((e) => e.status == "Upcoming").toList();
print(_status);

输出情况

I/flutter (21212): [Instance of 'Data', Instance of 'Data']

解决方法

这个输出并非错误,只是Dart默认打印对象时仅显示实例类型,想要查看具体数据内容,可通过以下几种方式处理:

1. 重写Data类的toString()方法

在你的Data实体类中添加toString()方法,自定义打印内容:

class Data {
  // 已定义的字段
  String? refId;
  String? status;
  String? azakhanaName;
  // ...其他字段

  @override
  String toString() {
    return 'Data{status: $status, azakhanaName: $azakhanaName, cityName: $cityName}';
    // 根据需求添加需要展示的字段
  }
}

修改后再打印_status,即可看到对象的具体字段值。

2. 遍历列表打印指定字段

如果不想修改实体类,可直接遍历过滤后的列表,打印需要的字段:

var _status = snapshot.data!.data!.where((e) => e.status == "Upcoming").toList();
for (var item in _status) {
  print('状态: ${item.status}, 场所名称: ${item.azakhana_name}');
}

3. 转换为JSON格式打印

若需要完整的结构化数据,可将对象转为JSON字符串打印(前提是Data类实现了toJson()方法,通常由json_serializable等序列化工具自动生成):

import 'dart:convert';

// ...
var _status = snapshot.data!.data!.where((e) => e.status == "Upcoming").toList();
for (var item in _status) {
  print(jsonEncode(item.toJson()));
}

另外,从API响应来看,过滤逻辑是正确的,确实存在一条Upcoming状态的数据,只是打印方式导致无法看到具体内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:52:40