无法将参数类型“Map<String, Object>”分配给参数类型“String”

时间:2021-06-02 12:57:30

标签: arrays list flutter dart

import 'package:learnflutter/questionMain.dart';
import 'questionButton.dart';

class mainQuestions extends StatelessWidget {
  List aQuestions;
  int questionIndex;
  Function answerQuestion;

  mainQuestions(
      {required this.aQuestions,
      required this.answerQuestion,
      required this.questionIndex});

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Question(
          aQuestions[questionIndex]['aQuestion'],
        ),
        ...(aQuestions[questionIndex]['answers'] as List<Map<dynamic, dynamic>>)
            .map((answer) {
          return Answer(answerQuestion, answer);
        })
      ],
    );
  }
}

我的问题是它一直在说: 无法将参数类型“Map”分配给参数类型“String” 我是颤振的新手,有人可以帮助我吗?谢谢! (不是说用HTML只是不知道怎么加代码

...(aQuestions[questionIndex]['answers'] as List<Map<dynamic, dynamic>>)
            .map((answer) {
          return Answer(answerQuestion, answer);

2 个答案:

答案 0 :(得分:0)

我认为要解决的问题是将答案提取到一个单独的变量中,并在最后调用 toList。这对我来说没有引起任何编译错误:

List<Widget> _answers() {
  List<Map<dynamic, dynamic>> answers = aQuestions[questionIndex]['answers'] as List<Map<dynamic, dynamic>>;
  return answers.map(answer => Answer(answerQuestion, answer)).toList();
}

return Column(
  children: [
    Question(aQuestions[questionIndex]['aQuestion']),
    ..._answers(),
  ]

答案 1 :(得分:0)

map 函数返回一个可迭代对象,而不是一个列表。这就是为什么在映射之后,您必须通过调用 toList() 函数将其转换为列表。 方法如下:

import 'package:learnflutter/questionMain.dart';
import 'questionButton.dart';

class mainQuestions extends StatelessWidget {
  List aQuestions;
  int questionIndex;
  Function answerQuestion;

  mainQuestions(
      {required this.aQuestions,
      required this.answerQuestion,
      required this.questionIndex});

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Question(
          aQuestions[questionIndex]['aQuestion'],
        ),
        ...(aQuestions[questionIndex]['answers'] as List<Map<dynamic, dynamic>>)
            .map((answer) {
          return Answer(answerQuestion, answer);
        }).toList()
      ],
    );
  }
}