参数类型“对象?”不能分配给参数类型'String'最新版本

Posted

技术标签:

【中文标题】参数类型“对象?”不能分配给参数类型\'String\'最新版本【英文标题】:The argument type 'Object?' can't be assigned to the parameter type 'String' latest version参数类型“对象?”不能分配给参数类型'String'最新版本 【发布时间】:2021-09-24 18:17:48 【问题描述】:

她的部分来自 code.dart:

final List<Map< String,Object>> question = [
    
      'questionText': 'what\'s your favorite\'s color?',
      'answers': [
        'Black',
        'Green',
        'Blue',
        'Yellow',
      ]
    ,
    
      'questionText': 'Select a true fact about Paulo Maldini!',
      'answers': [
        'He is dead',
        'He is alive',
        'He killed',
        'He is single',
      ]
    ,
  ];

  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            centerTitle: true,
            title: MyText("Quiz Bahlol", fontstyle2),
          ),
          body: Container(
            width: double.infinity,
            child: Column(
              children: <Widget>[
                Question(question[_questionIndex]['questionText']),
            // in this line error
   question[_questionIndex]['answers'].map((answer) 
                  return Answer(answerQuestion, answer);
                ).toList(),
              ],
            ),
          )),
    );

并在运行应用程序时给我这个错误:

需要一个“小部件”类型的值,但得到一个“列表”类型的值

但在旧版本中工作正常。 参数类型“对象?”不能分配给参数类型“字符串”。

【问题讨论】:

请提供完整的错误信息。它还应该解释问题出在哪一行。 如果您的代码还没有准备好进行更严格的空安全类型检查,请不要启用空安全。将 pubspec.yaml 中的 Dart SDK 最低版本设置为 2.12 之前的版本。 展示你的问答类 【参考方案1】:

你应该试试这个:

改变这个:

final List<Map< String,Object>> question = [

  'questionText': 'what\'s your favorite\'s color?',
  'answers': [
    'Black',
    'Green',
    'Blue',
    'Yellow',
  ]
,

  'questionText': 'Select a true fact about Paulo Maldini!',
  'answers': [
    'He is dead',
    'He is alive',
    'He killed',
    'He is single',
  ]
,

];

到:

var question = [
    
      'questionText': 'what\'s your favorite\'s color?',
      'answers': [
        'Black',
        'Green',
        'Blue',
        'Yellow',
      ]
    ,
    
      'questionText': 'Select a true fact about Paulo Maldini!',
      'answers': [
        'He is dead',
        'He is alive',
        'He killed',
        'He is single',
      ]
    ,
  ];

还有变化:

Question(question[_questionIndex]['questionText']),

到:

Question(question[_questionIndex]['questionText'] as String),

【讨论】:

【参考方案2】:

问题出在您的Column 小部件中。您应该使用

答案小部件之前的spread operator:
Container(
  width: double.infinity,
  child: Column(
    children: <Widget>[
      Question(question[_questionIndex]['questionText']),
      ...question[_questionIndex]['answers'].map((answer) 
        return Answer(answerQuestion, answer);
      ),
    ],
  ),
)
collection-for statement 将答案的小部件插入到 Column 子项中:
Container(
  width: double.infinity,
  child: Column(
    children: <Widget>[
      Question(question[_questionIndex]['questionText']),
      for (var answer in question[_questionIndex]['answers'])
        Answer(answerQuestion, answer)
    ],
  ),
)

【讨论】:

【参考方案3】:

您的列的子列是使用列表中的列表创建的,它应该只是一个列表。

只需少量代码编辑的最简单解决方案:

children: <Widget>[
   Question(question[_questionIndex]['questionText']),
 ] + List.generate(question[_questionIndex]['answers'].length, (index) => 
    Answer(answerQuestion, answer))
       
 

【讨论】:

以上是关于参数类型“对象?”不能分配给参数类型'String'最新版本的主要内容,如果未能解决你的问题,请参考以下文章

参数类型“对象?”不能分配给参数类型“字符串”

错误:参数类型“对象?”不能分配给参数类型“字符串”

参数类型“AsyncSnapshot<Object?>”不能分配给参数类型“Map<String, dynamic>”

颤振列表错误参数类型'List'不能分配给参数类型'String'

Flutter - 错误:参数类型'String/*1*/'不能分配给参数类型'String/*2*/'

TypeScript - 'String' 类型的参数不能分配给'string' 类型的参数