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

#flutter #flutter-layout #flutter-dependencies

Вопрос:

Эта ошибка будет удалена, если я добавлю ?.toString ()??», но тогда это не сработает. Его в строке «вопросы[questionindex][‘Текст вопроса’]».

 import 'package:flutter/material.dart';

import 'answer.dart';
import 'question.dart';

class Quiz extends StatelessWidget {
  final List<Map<String, Object>> questions;
  final questionindex;
  final Function answerQuestion;

  Quiz(
      {required this.answerQuestion,
      required this.questions,
      required this.questionindex});
  @override
  Widget build(BuildContext context) {
    return Column(children: [
           Question(
        questions[questionindex]['questionText']
      ), 
      ...((questions[questionindex]['answers'] as List<Map<String, Object>>)
              .map((answer) => Answer(
                    () => answerQuestion(answer[
                        'score']), 
                    answer['text'].toString(),
                  )) 
          ).toList() 
    ]);
  }
}
 

Это приложение для викторин, которое я пытаюсь создать
Вопрос код виджета такой :

 import 'package:flutter/material.dart';

class Question extends StatelessWidget {
  final String questionText;

  Question(this.questionText);
  @override
  Widget build(BuildContext context) {
    return Container(
        //we use container around the text instead of directly using text to get everything in center not just buttons
        width: double.infinity,
        margin: EdgeInsets.all(10), //spacing around the container
        child: Text(
          questionText,
          style: TextStyle(fontSize: 28),
          textAlign: TextAlign.center,
        ));
  }
}
 

Ответ №1:

Вероятно, это связано с тем, что questions[questionindex]['questionText'] это тип объекта, а виджету Question требуется String параметр типа.
поэтому, когда вы добавляете .toString() метод, он преобразует переменную типа объекта в переменную строкового типа.

Давайте рассмотрим этот код

 List<Map<String, Object>> questions = [{'a': someObj1, 'b': someObj2}, {'c': someObj3, 'd': someObj4}];
 

Здесь вопросы-это список карт, и предположим, что переменная someObj является объектом в вашем коде.
Когда вы пишете questions[questionindex]['a'] , вы имеете в someObj1 виду тот или иной объект.

Таким образом, вы не передаете строку, вместо этого вы передаете объект Question виджету.

Вы можете изменить Question виджет так, чтобы он принимал объект, или вам нужно передать строку в этом объекте, если у него есть какое-либо String свойство

Комментарии:

1. Эй, я добавил спасибо за ваш ответ

2. Да @kavyabhargava , я обновил свой ответ, это должно помочь.