Dart实现Map与List互转时map2段NoSuchMethodError错误求解
Dart Map与List互转错误排查
错误根源
- 你定义的
Person.PersonNameAge是静态方法,返回值为String类型,而非Person类实例,因此list1数组中存储的所有元素都是字符串,不是Person对象 - 生成
map2的代码段仍然按照元素为Person实例的逻辑调用element.name、element.age属性,String类没有对应实例getter,因此直接抛出异常
修复方案
如果要保持互转逻辑一致性,你可以修改PersonNameAge方法,直接返回Person实例:
// 修改前 // static String PersonNameAge(name, age) { // name = name; // age = age; // return ('{$name,$age}'); // } // 修改后 static Person PersonNameAge(name, age) { // id字段可按需赋值,这里传null适配原有可空类型定义 return Person(null, name, age); }
修改后list1存储的就是Person实例,后续生成map2的逻辑就可以正常运行。
如果确实需要list1存储字符串,那生成map2的逻辑需要先解析字符串提取name和age,示例如下:
var map2 = {}; list1.forEach((element) { // 去掉首尾大括号后按逗号分割内容 var parts = element.replaceAll(RegExp(r'[{}]'), '').split(','); map2[parts[0]] = int.parse(parts[1]); }); print(map2);
内容的提问来源于stack exchange,提问作者Ruben Fernandes
相关产品推荐
相关产品推荐

