Firebase 数组的元素是固定长度的,而数组本身不是固定长度的

Firebase 数组的元素是固定长度的,而数组本身不是固定长度的,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我的数据如下所示: var data = List(); snapshot.data.documents.forEach((doc) => data.add(doc.data)); //my example data is one doc data.add({"x": "y"}); //works data[0]["bar"].add({"foo": "bar"}); //doesn't

我的数据如下所示:

var data = List();
snapshot.data.documents.forEach((doc) => data.add(doc.data)); //my example data is one doc
data.add({"x": "y"}); //works
data[0]["bar"].add({"foo": "bar"}); //doesn't
Unhandled Exception: Unsupported operation: Cannot add to a fixed-length list
当我进行第二次数组修改时,会出现以下错误:

  data = [
    {
      "foo": "",
      "bar": [
        {"foo": "bar"},
        {"foo": "bar"},
        {"foo": "bar"},
      ],
    },
  ];
我曾经尝试过使用不是从firebase中获取的普通数据来实现这一点,它的工作原理与预期相符。我还尝试使用List.from填充数组,但也不起作用。

请执行以下操作:

var data = List();
snapshot.data.documents.forEach((doc) => data.add(doc.data)); //my example data is one doc
data.add({"x": "y"}); //works
data[0]["bar"].add({"foo": "bar"}); //doesn't
Unhandled Exception: Unsupported operation: Cannot add to a fixed-length list
这样做:

var data = List();
snapshot.data.documents.forEach((doc) => data.add(doc.data)); //my example data is one doc
data.add({"x": "y"}); //works
data[0]["bar"].add({"foo": "bar"}); //doesn't
Unhandled Exception: Unsupported operation: Cannot add to a fixed-length list
问题是add方法用于对象类型。在使用add方法之前,需要添加强制转换:

(数据[0][“bar”]作为列表)。添加({“foo”:“bar”});
问题是在对象类型上使用add方法。在使用add方法之前,需要添加强制转换:

(数据[0][“bar”]作为列表)。添加({“foo”:“bar”});

快照.数据.文档[0]['bar']
显然是一个固定长度(即不可增长的)
列表
。您不能使不可增长的
列表
可增长。您需要创建一个可增长的副本:

data[0][“bar”]=data[0][“bar”].toList();//创建一个副本。
数据[0][“bar”]。添加({“foo”:“bar”});//现在应该可以了。
或者:

data[0][“bar”]=[…data[0][“bar”],{“foo”:“bar”}];

然而,虽然后一种方法更紧凑,但不太清楚是否需要明确的副本。

snapshot.data.documents[0]['bar']
显然是一个固定长度(即不可增长的)
列表。您不能使不可增长的
列表
可增长。您需要创建一个可增长的副本:

data[0][“bar”]=data[0][“bar”].toList();//创建一个副本。
数据[0][“bar”]。添加({“foo”:“bar”});//现在应该可以了。
或者:

data[0][“bar”]=[…data[0][“bar”],{“foo”:“bar”}];

然而,尽管后一种方法更紧凑,但不太清楚是否需要明确的副本。

我很确定静态类型是
动态的
。否则,可能会出现另一个错误,即没有
add
方法。错误消息清楚地表明问题在于OP试图修改一个固定长度的
列表
,而不是一个可增长的列表。我很确定静态类型是
动态
。否则,可能会出现另一个错误,即没有
add
方法。错误消息清楚地表明问题在于OP试图修改一个固定长度的
列表,而不是一个可增长的列表。
data2=List()
如果您稍后要重新分配它,则它是没有意义的,添加
data2
变量不会将固定长度的
List
更改为可增长的变量。
data2=List()
如果您稍后要重新分配它,那么将
data2
变量添加不会将固定长度的
List
更改为可增长的。谢谢。这就是问题所在。现在可以了。在将数据添加到阵列时,是否有其他方法通过强制数据可增长来修复它?谢谢。这就是问题所在。现在可以了。在将数据添加到阵列时,是否有其他方法通过强制数据可增长来修复它?