Flutter错误:无法将Map<dynamic,dynamic>分配给Map<String,dynamic>参数
解决方法
这个错误的核心是**sqflite的query方法返回的Map类型是Map<dynamic, dynamic>,但你的Photo.fromMap构造函数要求传入Map<String, dynamic>**,有两种简单的修复方式:
方法1:显式指定返回类型(推荐)
直接把getPhotos方法里的List<Map>改成List<Map<String, dynamic>>——sqflite查询返回的键本身就是字符串类型,这样类型完全匹配,不会再报错:
修改后的getPhotos代码:
Future<List<Photo>> getPhotos() async { var dbClient = await db; // 显式指定列表元素类型为Map<String, dynamic> List<Map<String, dynamic>> maps = await dbClient!.query(TABLE, columns: [ID, NAME]); List<Photo> photos = []; if (maps.isNotEmpty) { for (int i = 0; i < maps.length; i++) { photos.add(Photo.fromMap(maps[i])); } } return photos; }
方法2:类型强制转换
如果不想修改列表的类型声明,可以在调用构造函数时,把maps[i]强制转换成Map<String, dynamic>:
修改后的循环部分代码:
for (int i = 0; i < maps.length; i++) { photos.add(Photo.fromMap(maps[i] as Map<String, dynamic>)); }
两种方法都能解决类型不匹配的问题,更推荐第一种,因为它符合Dart类型安全的设计原则,能在编译阶段就避免潜在的类型错误。
内容的提问来源于stack exchange,提问作者Jay Khatri
相关产品推荐
相关产品推荐

