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
相关产品推荐
相关产品推荐

