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

从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:55:22