Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart:Map.update error";未捕获错误:TypeError:type';(动态)=>;num';不是类型为';(字符串)=>;字符串'&引用;_Dart - Fatal编程技术网

Dart:Map.update error";未捕获错误:TypeError:type';(动态)=>;num';不是类型为';(字符串)=>;字符串'&引用;

Dart:Map.update error";未捕获错误:TypeError:type';(动态)=>;num';不是类型为';(字符串)=>;字符串'&引用;,dart,Dart,我有一个地图列表作为一组数据(dataMap),希望使用Map.update方法进行如下转换。这捕获到一个错误:Uncaught error:TypeError:Closure'main\uu convertIdFromStringToDocRef\u Closure':type'(dynamic)=>num'不是type'(String)=>String'的子类型。我应该误解一些关于Map.update,但我不确定它是什么。。。你能教我吗 void main() { num _conver

我有一个地图列表作为一组数据(
dataMap
),希望使用
Map.update
方法进行如下转换。这捕获到一个错误:
Uncaught error:TypeError:Closure'main\uu convertIdFromStringToDocRef\u Closure':type'(dynamic)=>num'不是type'(String)=>String'
的子类型。我应该误解一些关于
Map.update
,但我不确定它是什么。。。你能教我吗

void main() {
  num _convertStringToNum(dynamic str, String collection) {
    if (str is String) { return num.tryParse(str); }
    if (str is num) { return str; }
    return null;
  }

  Map<String, dynamic> _convertIdFromStringToNum(Map<String, dynamic> map, String collection) {
    map.update('id', (mapId) => _convertStringToNum(mapId, collection));
    return map;
  }

  Map<String, dynamic> dataMap = {
    'types': [
      {
        'id': '123',
        'name': 'foo',
      },
      {
        'id': '234',
        'name': 'bar',
      }
    ],
  };

  dataMap.update('types', (types) {
    if (!(types is List<Map<String, dynamic>>)) { return null; }
    types.map((Map<String, dynamic> type) => _convertIdFromStringToNum(type, 'types')).toList();
    return types;
  });
}

void main(){
num _convertStringToNum(动态str,字符串集合){
如果(str是String){return num.tryParse(str);}
如果(str是num){return str;}
返回null;
}
映射_convertIdFromStringToNum(映射映射,字符串集合){
map.update('id',(mapId)=>\u convertStringToNum(mapId,collection));
返回图;
}
映射数据映射={
“类型”:[
{
'id':'123',
'name':'foo',
},
{
'id':'234',
'name':'bar',
}
],
};
dataMap.update('类型',(类型){
如果(!(类型为列表)){returnnull;}
types.map((map type)=>\u convertIdFromStringToNum(type,'types')).toList();
返回类型;
});
}

这段代码可以在DartPad上运行。

我和你一样也遇到了奇怪的问题

似乎如果使用
String
初始化映射条目,则无法将其修改为
num

Map<String, dynamic> item = {
 "id": "123",
 "name": "TEST"
};

// this throws exception that `item['id']` has `String` value and we are trying to replace it with `num`
item['id'] = num.tryParse(item['id']); 
在使用
.map
迭代列表时,我正在创建
类型的实例
并调用
toMap
方法,该方法返回唯一的对象

void main() {
  Map<String, dynamic> dataMap = {
    'types': [
      {
        'id': 111,
        'name': 'foo',
      },
      {
        'id': '123',
        'name': 'foo',
      },
      {
        'id': '234',
        'name': 'bar',
      }
    ],
  };

  dataMap['types'] = (dataMap['types'] is List<Map>)
      ? dataMap['types'].map((type) => Type.fromMap(type).toMap())
      : null;

  print(dataMap);
}
void main(){
映射数据映射={
“类型”:[
{
id:111,,
'name':'foo',
},
{
'id':'123',
'name':'foo',
},
{
'id':'234',
'name':'bar',
}
],
};
dataMap['types']=(dataMap['types']是列表)
?数据映射['types'].map((类型)=>type.fromMap(类型).toMap())
:null;
打印(数据地图);
}

我自己找到了解决方案。(但仍不清楚真正的原因……)

问题出在
.map(MapEntry f(K键,V值))
方法上。该方法的参数是一个函数
MapEntry f(K键,V值)
,如代码中所述,我希望
键上的
Map
,但实际上它是
JsLinkedHashMap
(值是
字符串
)。当我试图通过
map.update('id',(mapId)=>\u convertStringToNum(mapId,collection))分配非字符串值时
在函数
\u convertIdFromStringToNum
中,它抛出异常

所以我改变了代码如下。我创建了一个新的
Map
newMap
),然后对其执行
.update()

void main() {
  num _convertStringToNum(dynamic str, String collection) {
    if (str is String) { return num.tryParse(str); }
    if (str is num) { return str; }
    return null;
  }

  Map<String, dynamic> _convertIdFromStringToNum(Map<String, dynamic> map, String collection) {
    final Map<String, dynamic> newMap = Map<String, dynamic>.from(map);
    newMap.update('id', (mapId) => _convertStringToNum(mapId, collection));
    return newMap;
  }

  Map<String, dynamic> dataMap = {
    'types': [
      {
        'id': '123',
        'name': 'foo',
      },
      {
        'id': '234',
        'name': 'bar',
      }
    ],
  };

  dataMap.update('types', (types) {
    if (!(types is List<Map<String, dynamic>>)) { return null; }
    return types.map((Map<String, dynamic> type) => _convertIdFromStringToNum(type, 'types')).toList();
  });
}
void main(){
num _convertStringToNum(动态str,字符串集合){
如果(str是String){return num.tryParse(str);}
如果(str是num){return str;}
返回null;
}
映射_convertIdFromStringToNum(映射映射,字符串集合){
最终映射newMap=Map.from(映射);
update('id',(mapId)=>\u convertStringToNum(mapId,collection));
返回newMap;
}
映射数据映射={
“类型”:[
{
'id':'123',
'name':'foo',
},
{
'id':'234',
'name':'bar',
}
],
};
dataMap.update('类型',(类型){
如果(!(类型为列表)){returnnull;}
返回类型.map((map type)=>\u convertIdFromStringToNum(type,'types')).toList();
});
}

请提供:
\u convertIdFromStringToDocRef
或尝试以下操作:
\u convertIdFromStringToDocRef(type['id','types')
因为它需要
id
作为
string
(请参阅错误消息)很抱歉输入错误,
\u convertIdFromStringToDocRef
应该是
\u convertidFromStringToDromTonum
。我修改了问题。请尝试解决方案:
\u convertIdFromStringToDocRef(type['id','types')
谢谢,但它失败了,出现了一个错误
未捕获的错误:TypeError:“123”:type'JSString'不是“Map”类型的子类型。
。我有两个函数,第二个函数带有参数
(Map,String)
。你能在问题中解释一下你想要实现什么吗?您想将编号的
id
值转换为
number
?非常感谢!您的第一个代码片段没有出现异常,
tryParce()
已成功将DartPad上的字符串修改为num。。。但你的解决方案也很有效。我仍然想知道我的代码不起作用的原因,但这可能是解决方案。
void main() {
  num _convertStringToNum(dynamic str, String collection) {
    if (str is String) { return num.tryParse(str); }
    if (str is num) { return str; }
    return null;
  }

  Map<String, dynamic> _convertIdFromStringToNum(Map<String, dynamic> map, String collection) {
    final Map<String, dynamic> newMap = Map<String, dynamic>.from(map);
    newMap.update('id', (mapId) => _convertStringToNum(mapId, collection));
    return newMap;
  }

  Map<String, dynamic> dataMap = {
    'types': [
      {
        'id': '123',
        'name': 'foo',
      },
      {
        'id': '234',
        'name': 'bar',
      }
    ],
  };

  dataMap.update('types', (types) {
    if (!(types is List<Map<String, dynamic>>)) { return null; }
    return types.map((Map<String, dynamic> type) => _convertIdFromStringToNum(type, 'types')).toList();
  });
}