如何解决Dart报错:参数类型'Object?'无法分配给参数类型'String'
报错根因
你定义的questions列表里的Map没有指定泛型,Dart的类型推断会把同时包含字符串、数组两种类型值的Map识别为Map<String, Object?>,通过questionText这个key取到的值类型是Object?,和Question组件要求的String入参类型不匹配,所以触发报错。
The argument type 'Object?' can't be assigned to the parameter type 'String'.dart(argument_type_not_assignable)
解决方案
以下三种方案按需选择即可:
临时快速修复:确定取出的值一定是非空字符串的前提下,手动做类型强转
把报错的代码行修改为:Question( questions[_questionIndex]['questionText'] as String, ),给Map加显式类型声明:避免后续每次取值都要单独转类型
修改questions变量的定义,显式指定泛型:final List<Map<String, Object>> questions = [ // 原有Map内容保持不变 ];取值时补充类型转换即可:
Question( questions[_questionIndex]['questionText']! as String, ),规范工程化写法:抽象实体类,完全规避硬编码key和类型转换问题,是正式项目的通用最佳实践
首先定义问题实体类:class QuestionItem { final String questionText; final List<String> answers; const QuestionItem({ required this.questionText, required this.answers, }); }把
questions列表改为实体类数组:final questions = [ QuestionItem( questionText: 'What\'s your favorite color?', answers: ['Black', 'Red', 'Green', 'White'], ), QuestionItem( questionText: 'What\'s your favorite animal?', answers: ['Rabbit', 'Snake', 'Elephant', 'Lion'], ), QuestionItem( questionText: 'Who\'s your favorite instructor?', answers: ['Max', 'Max', 'Max', 'Max'], ), ];调用组件时直接取实体类属性即可,不会再有类型报错:
Question( questions[_questionIndex].questionText, ),
内容的提问来源于stack exchange,提问作者Sohan Kundu
相关产品推荐
相关产品推荐

