参数类型“对象?”不能分配给参数类型'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
小部件中。您应该使用
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'