如何解决映射键是一个字符串但返回“对象?”
我有以下地图列表:
var questions = [
{
'questionText': 'What is your favorite color?','answers': ['Black','Green','Red','White'],},{
'questionText': 'What is your favorite animal?','answers': ['Pig','Goat','Lion','Baboon'],{
'questionText': 'What is your favorite number?','answers': ['1','2','3','4'],{
'questionText': 'What is your favorite game console?','answers': ['Xbox','Playstation','Nintendo','PC'],{
'questionText': 'What is your favorite car model?','answers': ['Nissan','Toyota','Ford','Honda'],];
我有一个采用字符串类型参数的示例函数。如果我想使用映射之一的键作为该参数:
ExampleFunction(questions[1]['questionText']);
我收到以下错误:
参数类型“对象?”不能分配给参数 输入“字符串”。
我了解使用映射运算符“[ ]”会根据 documentation 生成可为空类型。它说使用如下感叹号使其不可为空:
ExampleFunction(questions[1]['questionText']!);
但这只会产生以下错误,这次没有解释“?”标记:
无法将参数类型“Object”分配给参数 输入“字符串”。
当我将鼠标悬停在列表上时,它会给我:
List<Map<String,Object>>
当我在每个映射中唯一的类型是字符串键和列表答案时,为什么键显示为对象?
解决方法
Map
有多种值类型:String
的 questionText
和 List<String>
的 answers
。这两者最接近的匹配类型是 Object
。
您可以使用 as
关键字指定类型:
questions[1]['questionText'] as String
或者创建一个特定的类
class Question {
final String questionText;
final List<String> answers;
Question({
required this.questionText,required this.answers,});
}
var questions = [
Question(
questionText: 'What is your favorite color?',answers: ['Black','Green','Red','White'],),];
,
问题是你没有 Map
{
'questionText': 'What is your favorite color?',-> <String,String>
'answers': ['Black',List>
}
因为 Map 中的数据可以是 String 或 List,所以分配了 Object -> Map
您可以使用 toString() 转换为字符串
questions[1]['questionText']!.toString();
或者您可以创建一个名为 question 的类:
class Question{
String questionText;
List<String> answers;
Question(this.questionText,this.answers);
factory Question.fromMap(Map) {
return Question(map[questionText],map[answers]);
}
Map<String,dynamic> toMap() {
return {
"questionText": this.questionText,"answers": this.answers,}
}
}
使用 Question 类,您可以从地图 Question.fromMap(questions[0]) 创建问题。并转换为映射 myQuestion。
Question question = Question("question",["answer1","answer2"]);
ExampleFunction(question.questionText);
或
Question question = Question.fromMap(myQuestionMap);
ExampleFunction(question.questionText);
并转换为地图
Map mapQuestion = question.toMap();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。