Flutter / Dart / NoSuchMethodError - PullRequest
0 голосов
/ 26 мая 2020

Я не могу исправить ошибку 2 часа. Может быть, один из вас сможет мне помочь. Вы можете найти фотографию ниже.

Консоль отладки также сообщает мне:

[ The following NoSuchMethodError was thrown building MyApp (dirty, state: _MyAppState#c7f7e):
I/flutter (17681): The method 'map' was called on null.
I/flutter (17681): Receiver: null
I/flutter (17681): Tried calling: map<Answer>(Closure: (String) => Answer)]
import 'package:flutter/material.dart';

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

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _MyAppState();
  }
}

class _MyAppState extends State<MyApp> {
  var _questionIndex = 0;

  void _answerQuestion() {
    setState(() {
      _questionIndex = _questionIndex + 1;
    });
    print(_questionIndex);
  }

  @override
  Widget build(BuildContext context) {
    const questions = const [
      {
        'questionText': 'What\'s your favorite color?',
        'answer': ['Black', 'Yellow', 'white', 'green'],
      },
      {
        'questionText': 'What\'s your favorite animal?',
        'answer': ['Lion', 'Rabbit', 'Snake', 'Elephant'],
      },
      {
        'questionText': 'What\'s your favorite instructor?',
        'answer': ['Flo', 'Viona', 'Flint', 'Flo'],
      },
    ];

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('My First App!'),
        ),
        body: Column(
          children: [
            Question(
              questions[_questionIndex]['questionText'],
            ),
            ...(questions[_questionIndex]['answers'] as List<String>)
                .map((answer) {
              return Answer(_answerQuestion, answer);
            }).toList()
          ],
        ),
      ),
    );
  }
}

import 'package:flutter/material.dart';

//import './main.dart';

class Question extends StatelessWidget {
  final String questionText;

  Question(this.questionText);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      margin: EdgeInsets.all(10),
      child: Text(
        questionText,
        style: TextStyle(fontSize: 28),
        textAlign: TextAlign.center,
      ),
    );
  }
}

import 'package:flutter/material.dart';

class Answer extends StatelessWidget {
  final Function selectHandler;
  final String answerText;

  Answer(this.selectHandler, this.answerText);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      child: RaisedButton(
        color: Colors.blue,
        textColor: Colors.white,
        child: Text(answerText),
        onPressed: selectHandler,
      ),
    );
  }
}

Это показывает мне приложение

1 Ответ

0 голосов
/ 27 мая 2020

На вашей карте нет ключа с названием answers. Вместо этого он называется answer. Таким образом, questions[_questionIndex]['answers'] вернет null, поскольку оператор [] для Map задокументирован как:

Возвращает значение для данного ключа или null, если ключ отсутствует на карте.

https://api.dart.dev/stable/2.8.3/dart-core/Map/operator_get.html

...