从API获取数据却打印Instance of 'RegoinDetails'问题求助
问题:打印API获取的自定义类实例显示
Instance of 'RegoinDetails' 从API获取数据后,打印自定义类RegoinDetails的列表时,输出始终是[Instance of 'RegoinDetails', ...],无法查看实际数据内容。
获取数据的代码
getalRegion() async { final pref = await SharedPreferences.getInstance(); final autorization = pref.getString("jwt") ?? ""; try { var url = Uri.parse("https://sss.com/api/Region/Regions"); Response response = await http.get(url, headers: { "Authorization": "Bearer $autorization", }); if (response.statusCode == 200) { final List<Map<String, dynamic>> result = List<Map<String, dynamic>>.from( jsonDecode(utf8.decode(response.bodyBytes))); final getResult = result.map((e) => RegoinDetails.fromJson(e)).toList(); freshRegion = getResult; print(freshRegion); } } catch (e) { log("$e"); } }
打印结果
[Instance of 'RegoinDetails', Instance of 'RegoinDetails', Instance of 'RegoinDetails', Instance of 'RegoinDetails', Instance of 'RegoinDetails', Instance of 'RegoinDetails', Instance of 'RegoinDetails', Instance of 'RegoinDetails', Instance of 'RegoinDetails', Instance of 'RegoinDetails']
RegoinDetails类代码
import 'dart:convert'; List<RegoinDetails> regoinDetailsFromJson(String str) => List<RegoinDetails>.from( json.decode(str).map((x) => RegoinDetails.fromJson(x))); String regoinDetailsToJson(List<RegoinDetails> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson()))); class RegoinDetails { RegoinDetails({ required this.regionCode, required this.regionName, }); String regionCode; String regionName; factory RegoinDetails.fromJson(Map<String, dynamic> json) => RegoinDetails( regionCode: json["regionCode"], regionName: json["regionName"], ); Map<String, dynamic> toJson() => { "regionCode": regionCode, "regionName": regionName, }; }
原因分析
Dart中默认打印自定义类实例时,只会输出Instance of '类名',这是因为没有重写toString()方法来定义实例的字符串表现形式。
解决方法
有三种实用的解决方式:
1. 重写toString()方法(推荐)
在RegoinDetails类中添加toString()方法,自定义实例的打印内容:
class RegoinDetails { // ... 保留原有代码 ... @override String toString() { return 'RegoinDetails(区域编码: $regionCode, 区域名称: $regionName)'; } }
修改后直接打印freshRegion,就能看到每个实例的具体属性值。
2. 转换为JSON格式打印
利用已有的toJson()方法,将每个实例转为Map后打印:
print(freshRegion.map((region) => region.toJson()).toList());
输出会是包含属性键值对的Map列表,格式类似[{regionCode: 'CN-01', regionName: '华北区'}, ...]。
3. 遍历列表打印指定属性
如果只需要查看特定属性,可以遍历列表逐个打印:
for (var region in freshRegion) { print('${region.regionCode} - ${region.regionName}'); }
内容的提问来源于stack exchange,提问作者Gbenga B Ayannuga
相关产品推荐
相关产品推荐

