Flutter 将 List<int> 添加到 List<List>

Flutter add List<int> to List<List>

提问人:Sarmed MQ Berwari 提问时间:7/29/2023 更新时间:7/29/2023 访问量:72

问:

我有有状态的小部件,我想创建数字列表,然后将它们作为列表广告到另一个列表,

我初始化列表 ' 迟到的列表数字; late List listOfDigits;

  @override
  void initState() {
    digits = [];
     listOfDigits = [];
    super.initState();
}`

我有带有控制器名称 = 数字的文本文件,以及将数字添加到数字列表的按钮:digits.add(int.parse(number.text)); setState(() {});

另一个按钮将数字列表添加到 listOfDigits 并清除数字列表:

    listOfDigits.add(digits)
    digits.clear();
    setState(() {});

第一次创建我得到的数字列表:[[]] 当我创建像 [1,8,-9] 这样的第二个数字时,我得到:[[1,8,-9]] 对于这第三次,任何数字(例如 7)添加到数字中,它都会将 otamitcly 添加到列表中,并且如下所示: [[1,8,-9,7],[1,8,-9,7]]

我尝试了与提供商相同的方法,我得到了相同的结果

扑动 列表 数组列表 状态

评论

1赞 pskink 7/29/2023
这是因为您每次都添加相同的列表,而不是使用digits.clear()digits ≠ []

答:

1赞 Bruno Kinast 7/29/2023 #1

您的问题是对象在 Dart(以及大多数语言)中是“通过引用传递”的。

digits并且都是 类型的实例。当您这样做时,您每次都会将相同的实例添加到列表中。当你这样做时,你删除了其中的所有项目,并且由于它包含对 的同一实例的引用,它也是空的。listOfDigitsListlistOfDigits.add(digits)digitsdigits.clear()listOfDigitsdigits

您可以做的是创建整数列表的副本(一个新实例)并将其传递给 ,这样当您清除 时,您不会清除 中的那个。listOfDigitsdigitslistOfDigits

为此,可以使用或创建 的新列表。List.fromdigits

列表.from

// List.from creates a new list with the same values as `digits`.
listOfDigits.add(List.from(digits)); 
digits.clear();
setState(() {});

新列表:

listOfDigits.add(digits);
// Here, instead of clearing the same list inside `listOfDigits`,
// you are simply creating a new one for that variable (and keeping
// the old instance unmodified).
digits = [];
setState(() {});