如何在flutter中使用小部件映射列表



我想要一个普通的questionare类型的东西。第一个问题一得到回答,就应该转到下一个问题。但是,当我使用.map((时,出现了一个错误,因为"type"Null"不是类型强制转换"中类型"List"的子类型。.map((和spread运算符在以前版本的flutter中曾经起作用,但现在它们不起作用了。有人能给我一个解决方案吗?

这是以下代码main.dart


class MyAppState extends State<MyApp> {
int qindex = 0;
void answeQues() {
setState(() {
qindex = qindex + 1;
});
print(qindex);
}
@override
Widget build(BuildContext context) {
var questions = [
{
'questionText': 'what's your favourite color?',
'answers': ['R', 'G', 'B', 'Y']
},
{
'questionText': 'what's your favourite animal?',
' answers': ['Rabbit', 'Giraffe', 'Bear', 'Yax']
},
{
'questionText': 'what's your favourite sport?',
'answers': ['Rugby', 'Cricket', 'Basketball', 'Football']
},
];
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('My first App'),
),
body: Column(
children: [
Questions(
questions[qindex]['questionText'].toString(),
),
...(questions[qindex]['answers'] as List<String>).map((answer) {
return Answers(answeQues, answer);
}).toList()
// questions[qindex]['answers'].entries.map((answer) {
//   return Answers(answeQues, answer);
// }).toList()
],
),
),
);
}
}

这是我的答案。dart文件

import 'package:flutter/material.dart';
class Answers extends StatelessWidget {
final Function selectHandler;
final String answerText;
Answers(this.selectHandler, this.answerText);
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
padding: EdgeInsets.all(10),
child: RaisedButton(
color: Colors.blue,
child: Text(answerText),
onPressed: () {
selectHandler();
},
),
);
}
}

错误:-

类型"Null"不是类型强制转换中类型"List"的子类型。

对于第二个问题,密钥名称(' answers'(的开头有空格,这会导致问题:

var questions = [
...
{
'questionText': 'what's your favourite animal?',
' answers': ['Rabbit', 'Giraffe', 'Bear', 'Yax']
},
...
];

.map((和spread运算符没有错,它们仍然在Flutter中使用。

最新更新