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

如何为Dart中Playcard对象列表添加自增id属性?

解决Dart中为Playcard列表添加自增id的问题

问题原因

  1. Dart的顶级作用域仅允许变量/函数声明,不能直接执行循环赋值这类执行语句,所以把循环放在方法外会报错。
  2. 你定义的addId是顶级函数,必须在程序入口main函数中调用才会执行,否则不会自动触发。

解决方案

方案一:通过main函数调用addId方法

在代码中添加main函数,调用addId来执行id赋值逻辑:

import 'package:memory/models/playcard.dart';

var availablePlaycards = [
  Playcard(front: 'back.png', back: 'sheep.png', flipped: false),
  Playcard(front: 'back.png', back: 'cow.png', flipped: false),
  Playcard(front: 'back.png', back: 'pig.png', flipped: false),
];

final List<Playcard> clonedCards = [...availablePlaycards];
var doubledCards = List<Playcard>.from(availablePlaycards)..addAll(clonedCards)..shuffle();

void addId() {
  for (int i = 0; i < doubledCards.length; i++) {
    doubledCards[i].id = i + 1; // 若需从1开始自增则+1,从0开始直接用i
  }
  print(doubledCards);
}

// 程序入口,调用addId执行赋值
void main() {
  addId();
}

方案二:链式调用直接初始化时赋值id

利用asMap()将列表转为索引-元素映射,通过forEach直接在列表初始化链中完成id赋值,更简洁:

import 'package:memory/models/playcard.dart';

var availablePlaycards = [
  Playcard(front: 'back.png', back: 'sheep.png', flipped: false),
  Playcard(front: 'back.png', back: 'cow.png', flipped: false),
  Playcard(front: 'back.png', back: 'pig.png', flipped: false),
];

final List<Playcard> clonedCards = [...availablePlaycards];
var doubledCards = List<Playcard>.from(availablePlaycards)
  ..addAll(clonedCards)
  ..shuffle()
  ..asMap().forEach((index, card) {
    card.id = index + 1; // 自增id,按需选择从0或1开始
  });

void main() {
  print(doubledCards); // 验证结果
}

补充说明

你的Playcard类中id属性未用final修饰,是可修改的,这部分定义没问题,能正常接受赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:50:33