我有一些最初是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<>()另一種型別的鑄件,但仍然沒有用。
uj5u.com熱心網友回復:
默認情況下,Dart 會推斷出data文字映射的型別。
在您的第一個示例中,只有 String 作為值,因此它可以推斷型別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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/367333.html
