gpt4 book ai didi

flutter - 尝试分配新值时,无法将元素类型 'int' 分配给映射值类型 'FieldValue'

转载 作者:行者123 更新时间:2023-12-05 09:00:57 29 4
gpt4 key购买 nike

我有可以正常工作的初始数据。

var data = {field1: FieldValue.increment(1)};

当我向数据中添加另一个字段时也很好。

data.addAll({field2: FieldValue.increment(1)});

但如果我将值设置为 0,它就不允许我这样做。

data.addAll({field3: 0});

它会报错:无法将元素类型“int”分配给映射值类型“FieldValue”。

我尝试这样做,但仍然遇到同样的问题。

data[field3] = 0;

如何将 field3 设置为特定值?

注意:这是完整的代码。

DocumentReference<Map<String, dynamic>> ref = db.collection('MyCollect').doc(uid);
var data = {field1: FieldValue.increment(1)};
data.addAll({field2: FieldValue.increment(1)});
data.addAll({field3: 0});
ref.set(data, SetOptions(merge: true));

最佳答案

为了更好的理解

当你不想显式地给出一个类型但它的值决定了它的类型时,你可以使用 var 关键字,并且对于下一个操作/赋值,它只会接受那个特定的类型从第一次开始。

另一方面,dynamic 关键字也用于不显式地为变量设置类型,但所有其他类型都对其有效。

var a = "text";
a = "text2"; // ok
a = 1; // throws the error

dynamic b = "text";
b = "text2"; // ok
b = 1; // also ok

在您的例子中,您使用的是 var 关键字,因此在第一个值分配中它采用其类型:

var data = {field1: FieldValue.increment(1)}; // takes the Map<String, FieldValue> type
data.addAll({field3: 0}); // 0 is int and FieldValue.increment(1) is FieldValue type, so it throws an error

但是,您可以通过使用 dynamic 关键字来解决此问题并让您的 data 变量接受任何类型的元素类型:

dynamic data = {field1: FieldValue.increment(1)}; // will accept it.

或者,指定这是一个Map,但它的值是dynamic:

Map<String, dynamic> data = {field1: FieldValue.increment(1)}; // will accept it also.

希望这对您有所帮助!

关于flutter - 尝试分配新值时,无法将元素类型 'int' 分配给映射值类型 'FieldValue',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74493013/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com