如何告诉飞镖不要将地图转换为 <String, String> 类型并使其成为 <String, Object> 类型?
How to tell dart to not convert map to <String, String> type and let it be <String, Object> type?
我有一些最初是 List<Map<String, String>>
的数据,但将来在某些方法调用中我必须为这些 Map<String, String>
元素分配 <String, dynamic>
值。这是一些显示我意图的飞镖代码:
class MyClass {
String ageGroup = 'some';
MyClass({required this.ageGroup});
}
void main() {
var data = [
{
'name': 'john',
'userName': 'john',
},
{
'name': 'john1',
'userName': 'john1',
},
];
// JsLinkedHashMap<String, String> in dartpad
print(data[0].runtimeType);
// after some while
// throws an error
data[0]['ageGroup'] = MyClass(ageGroup: 'something');
}
data[0]['ageGroup']
作业给我这样的错误:Error: A value of type 'MyClass' can't be assigned to a variable of type 'String'.
我应该如何让 dart 知道不将此映射转换为 <String, String>
并将其设为 <String, dynamic>
,因为将来 Objects
也将是值。
我找到了 1 个解决方法,但我不想使用它:
void main() {
var data = [
{
'something_random': 123,
'name': 'john',
'userName': 'john',
},
{
'something_random': 123,
'name': 'john1',
'userName': 'john1',
},
];
print(data[0].runtimeType);
data[0]['ageGroup'] = MyClass(ageGroup: 'something');
}
这个很好用,但我不想这样用....还有其他方法吗...
我试过 .cast<>()
和另一种类型的转换,但仍然没有用。
默认情况下,Dart 会推断出您 data
文字映射的类型。
在您的第一个示例中,只有字符串作为值,因此它推断类型 List<Map<String, String>>
。在最后一个片段中,它推断 List<Map<String, Object>>
因为映射值中有字符串和整数。
您可以通过两种方式强制数据类型:
var data = <Map<String, dynamic>>[...]; // force type of list literal
// or
List<Map<String, dynamic>> data = [...]; // directly type data
我有一些最初是 List<Map<String, String>>
的数据,但将来在某些方法调用中我必须为这些 Map<String, String>
元素分配 <String, dynamic>
值。这是一些显示我意图的飞镖代码:
class MyClass {
String ageGroup = 'some';
MyClass({required this.ageGroup});
}
void main() {
var data = [
{
'name': 'john',
'userName': 'john',
},
{
'name': 'john1',
'userName': 'john1',
},
];
// JsLinkedHashMap<String, String> in dartpad
print(data[0].runtimeType);
// after some while
// throws an error
data[0]['ageGroup'] = MyClass(ageGroup: 'something');
}
data[0]['ageGroup']
作业给我这样的错误:Error: A value of type 'MyClass' can't be assigned to a variable of type 'String'.
我应该如何让 dart 知道不将此映射转换为 <String, String>
并将其设为 <String, dynamic>
,因为将来 Objects
也将是值。
我找到了 1 个解决方法,但我不想使用它:
void main() {
var data = [
{
'something_random': 123,
'name': 'john',
'userName': 'john',
},
{
'something_random': 123,
'name': 'john1',
'userName': 'john1',
},
];
print(data[0].runtimeType);
data[0]['ageGroup'] = MyClass(ageGroup: 'something');
}
这个很好用,但我不想这样用....还有其他方法吗...
我试过 .cast<>()
和另一种类型的转换,但仍然没有用。
默认情况下,Dart 会推断出您 data
文字映射的类型。
在您的第一个示例中,只有字符串作为值,因此它推断类型 List<Map<String, String>>
。在最后一个片段中,它推断 List<Map<String, Object>>
因为映射值中有字符串和整数。
您可以通过两种方式强制数据类型:
var data = <Map<String, dynamic>>[...]; // force type of list literal
// or
List<Map<String, dynamic>> data = [...]; // directly type data