Dart二维列表更新异常求助:所有行值被重复覆盖
Dart二维列表更新时所有行被最后一行覆盖的问题分析与解决
问题根源
你创建二维列表的方式存在关键问题:
List<List<String>> InitialBoard1 = List.filled(8, List.filled(8, "a", growable: false), growable: false);
List.filled的第二个参数是同一个固定对象——这里就是List.filled(8, "a")生成的单个列表实例。所以InitialBoard1里的8个元素,本质上都是指向同一个子列表的引用。
当你循环修改InitialBoard1[i-1][j]时,每次操作都是在修改这个唯一的子列表。后续循环会覆盖之前的修改内容,最终所有行自然都会显示最后一次循环的结果。
解决方案
改用List.generate创建二维列表,它会为每个索引单独生成新的子列表,彻底避免引用复用:
var PieceMap2 = { 0: "a", 1: "b", 2: "c", 3: "d", 4: "e", 5: "f", 6: "g", 7: "h" }; // 用List.generate生成每个独立的子列表 List<List<String>> InitialBoard1 = List.generate(8, (_) => List.filled(8, "a", growable: false), growable: false); void main() { for (int i = 8; i > 0; i--) { for (int j = 0; j <= 7; j++) { String a = PieceMap2[j] ?? "null"; String b = '$i'; String c = a + b; print(c); InitialBoard1[i - 1][j] = c; } print(InitialBoard1[i - 1]); } for (int i = 0; i < 8; i++) { print(InitialBoard1[i]); } }
验证结果
修改后运行代码,最终输出会和你的预期完全一致:每行分别对应a1-h1、a2-h2直到a8-h8,不会再出现所有行被最后一行覆盖的问题。
内容的提问来源于stack exchange,提问作者Dragomir despard
相关产品推荐
相关产品推荐

