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

Flutter中List<myPerson>打印显示Instance of问题求助

问题:打印自定义类实例列表显示"Instance of"而非属性值

问题详情

定义了包含name、age、height属性的myPerson类,创建mypeople列表并添加该类实例后,直接打印列表显示Instance of 'myPerson',但单独打印实例的name、age、height能得到正确数据。尝试添加toString方法、使用${p.name}格式均无效,执行mypeople.add(MyPerson(name: p.name,age:p.age , height:p.height))后打印列表仍显示Instance of。

问题原因

  1. 类名大小写不一致:Dart是大小写敏感语言,代码中类名定义为myPerson,但添加实例时用了MyPerson,导致创建的实例不属于目标类,重写的toString()无法生效。
  2. 未正确重写toString():自定义类默认的toString()方法仅返回Instance of 'ClassName',必须手动重写该方法定义实例的打印格式。
  3. 代码语法错误:原代码中PeopleList定义为列表变量,却以函数形式调用await PeopleList(),存在逻辑错误。

解决方案

步骤1:统一类名并重写toString()

遵循Dart大驼峰命名规范,将类名改为MyPerson,并在类内重写toString()方法,自定义实例的打印格式。

步骤2:修正代码逻辑错误

调整PeopleList的定义(假设是异步获取数据的函数),确保遍历和实例化的逻辑正确。

修正后的完整代码

// 模拟异步获取人员数据的函数
Future<List<Map<String, dynamic>>> PeopleList() async {
  return [
    {"name": "Ana", "age": 25, "height": 165},
    {"name": "Ron", "age": 30, "height": 180},
    {"name": "Jack", "age": 22, "height": 175},
    {"name": "Tom", "age": 28, "height": 178},
    {"name": "Lisa", "age": 26, "height": 162},
    {"name": "Frank", "age": 32, "height": 185},
  ];
}

class MyPerson {
  String name;
  int age;
  int height;
  
  MyPerson({required this.name, required this.age, required this.height});
  
  // 重写toString,自定义实例打印内容
  @override
  String toString() {
    return 'MyPerson(name: $name, age: $age, height: $height)';
  }
}

class MyHomePageState extends State<MyHomePage> {
  List<MyPerson> mypeople = [];

  Future<List<MyPerson>> getPeople() async {
    for(var p in await PeopleList()) {
      if(p.isNotEmpty) {  
        // 使用统一的类名MyPerson创建实例
        mypeople.add(MyPerson(name: p['name'], age: p['age'], height: p['height']));
      }
    }  
    print(mypeople); // 现在会打印每个实例的具体属性信息
    return mypeople;  
  }
}

关键说明

  • 重写toString()是解决打印问题的核心,只有这样Dart才会按照你定义的格式输出实例内容。
  • 严格遵守Dart的命名规范和大小写敏感规则,避免因类名不一致导致的逻辑错误。
  • 确保异步数据获取的逻辑正确,await仅用于异步函数调用,不能直接作用于列表变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:05:16