Тип аргумента «Объект?» не может быть присвоен типу параметра «Строка» последней версии

#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);
      }),
    ],
  ),
)
 
 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))