#flutter #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(),
],
),
)),
);
И выдайте мне эту ошибку при запуске приложения:
Ожидалось значение типа «виджет», но получено значение типа «Список»
Но в более старых версиях все работает нормально. Тип аргумента «Объект?» не может быть присвоен типу параметра «Строка».
Комментарии:
1. Пожалуйста, укажите полную ошибку. Он также должен объяснить, в чем заключается проблема.
2. Если ваш код не готов к более строгой проверке типов с нулевой безопасностью, не включайте нулевую безопасность. Установите в своем Dart SDK минимальную версию
pubspec.yaml
до версии до 2.12.3. Покажите свой класс вопросов и ответов
Ответ №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 для вставки виджетов ответа внутри
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))