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

Dart访问List嵌套Map内自定义Transaction对象取值异常如何解决

问题原因
  • 执行assets[0]['transactions']返回Instance of 'Transaction'不属于取值失败,这是Dart打印自定义类实例的默认输出,证明你已经拿到了目标对象,只是没有访问对象属性,也没有给类配置可读的输出格式。
  • 偶尔返回null是因为你没有给列表和Map显式声明类型,Dart类型推导异常导致的取值失败。
  • 隐藏逻辑错误:你当前Transaction类里id字段的写法有误,Random().toString()拿到的是随机数生成器实例的默认字符串,不是随机生成的id值。
解决方案

1. 正确访问对象属性

从Map中取出的值默认是dynamic类型,先强转为Transaction类型,再访问内部属性即可拿到具体值:

final firstTransaction = assets[0]['transactions'] as Transaction;
// 访问对应属性
print(firstTransaction.from); // 输出 someone
print(firstTransaction.amount); // 输出 1.0
print(firstTransaction.id); // 输出对应id值

2. 自定义对象打印格式

如果需要直接打印Transaction对象就能看到完整内容,重写类的toString()方法即可,同时修复id生成的错误写法:

import 'dart:math';

class Transaction {
  // 修复id生成逻辑,生成0-99999之间的随机数字作为id
  final String id = Random().nextInt(99999).toString();
  final String from;
  final double amount;

  Transaction({
    required this.from,
    required this.amount,
  });

  // 重写toString方法,自定义打印内容
  @override
  String toString() {
    return 'Transaction{id: $id, from: $from, amount: $amount}';
  }
}

修改后你再打印assets[0]['transactions'],就会直接输出类似Transaction{id: 12345, from: someone, amount: 1.0}的可读内容,不会再显示Instance of 'Transaction'。

3. 显式声明集合类型避免null问题

给assets列表显式声明类型,避免类型推导异常导致的取值为null问题:

final List<Map<String, dynamic>> assets = [
  {
    "name": "BRL", 
    "balance": 150.2, 
    "transactions" : Transaction(from: "someone", amount: 1)
  },
  {
    "name": "US", 
    "balance": 1100.2, 
    "transactions" : Transaction(from: "someone", amount: 5)
  },
];

内容的提问来源于stack exchange,提问作者Müller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:15:48