Flutter中访问列表内Map报错:Object类型无法赋值给String类型参数
问题解决:Dart中Map列表取值的类型不匹配错误
错误原因
你用var定义question时,Dart会自动推断其类型为List<Map<String, Object>>——每个Map里的value既有String类型(Questionkey的值),又有List类型(Answer的值),所以value的类型被统一推断为Object。当你通过question[_index]['Questionkey']取值时,返回的是Object类型,若后续代码需要String类型参数,就会触发类型不匹配的错误。
三种解决方法
方法一:强制类型转换
直接将取值结果转换为String类型,适合确定该key对应的value一定是String的场景:
(question[_index]['Questionkey'] as String)
注意:如果该key对应的value不是String,会抛出类型转换异常。
方法二:显式指定集合类型
定义question时,明确指定Map的value类型为dynamic,让Dart允许value为任意类型:
List<Map<String, dynamic>> question = [ { 'Questionkey': "which cryptocurrency do you like", 'Answer': ['bitcoin', 'etherium'] }, { 'Questionkey': "and why do you like that?", 'Answer': ['stable', 'acutally i don\'t know '] }, ];
此时question[_index]['Questionkey']会被推断为dynamic类型,可直接当作String使用(只要实际值为String)。
方法三:用类封装数据(推荐)
对于结构化数据,用类定义能彻底避免Map的类型模糊问题,编译期即可保证类型安全:
class Question { final String questionKey; final List<String> answers; Question({required this.questionKey, required this.answers}); } // 定义列表 var question = [ Question( questionKey: "which cryptocurrency do you like", answers: ['bitcoin', 'etherium'] ), Question( questionKey: "and why do you like that?", answers: ['stable', 'acutally i don\'t know '] ), ]; // 安全访问 question[_index].questionKey
内容的提问来源于stack exchange,提问作者lional messi
相关产品推荐
相关产品推荐

