Я новичок во Флаттере, как исправить этот код? - PullRequest
0 голосов
/ 12 октября 2019
    import 'dart:math';

import 'package:dart_random_choice/dart_random_choice.dart';
import 'package:flutter/material.dart';

Здесь я получаю случайные числа для вопросов сложения, вычитания, умножения

int num1 = Random().nextInt(100); 
int num2 = Random().nextInt(100);

List<String> typeOfQuestions = [
  'Addition',
  'Subtraction',
  'Multiplication',
  'Division'
];

Widget question;

Здесь я создаю различные типы виджетов в соответствии с математической операцией

Map questions = {
  "Addition": AdditionWidget(
    num1: num1,
    num2: num2,
  ),
  "Subtraction": SubtractionWidget(
    num1: num1,
    num2: num2,
  ),
  "Multiplication": MultiplicationWidget(
    num1: num1,
    num2: num2,
  )
};

gameWinсообщает, прошел ли игрок математику и может ли он перейти на следующий уровень

bool gameWin = false;

TextEditingController answerController;

инициализировать игру - это функция при каждом запуске новой игры и выбрать случайное математическое уравнение

initializeGame() {
  String typeOfQuestion = randomChoice(typeOfQuestions);

  switch (typeOfQuestion) {
    case 'Addition':
      {
        question = questions['Addition'];
      }
      break;
    case 'Subtraction':
      {
        question = questions['Subtraction'];
      }
      break;
    case 'Multiplication':
      {
        question = questions['Addition'];
      }
      break;
    default:
      {
        question = questions['Subtraction'];
      }
      break;
  }
}

class Game extends StatefulWidget {
  _GameState createState() => _GameState();
}

class _GameState extends State<Game> {

Яне уверен, нужен ли мне initstate здесь, я просто поставил его на тот случай, если

  @override
  void initState() {
    super.initState();
  }

  Widget build(BuildContext context) {
    initializeGame();

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Math Rush'),
        ),
        body: Center(
          child: Row(
            children: <Widget>[
              question,
              Flexible(
                child: TextField(
                  controller: answerController,
                  onChanged: (text) {
                    switch (question) {
                      case 'Addition':
                        {
                          if (num1 + num2 == int.parse(text)) {
                            gameWin = true;
                            checkAnswerIsCorrect();
                          }
                        }
                        break;

                        case 'Subtraction':
                        {
                          if (num1 - num2 == int.parse(text)) {
                            gameWin = true;

checkansweriscorrect фактически означает, что ответ правильный, так как игрок выигрывает этот матч, он может перейти на следующий уровень

                            checkAnswerIsCorrect();
                          }
                        }
                        break;
                        case 'Multiplication':
                        {
                          if (num1 * num2 == int.parse(text)) {
                            gameWin = true;
                            checkAnswerIsCorrect();
                          }
                        }
                    }
                  },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }

  checkAnswerIsCorrect() {
    setState(
      () {
        if (gameWin == true) {
          num1 = Random().nextInt(100);
          num2 = Random().nextInt(100);
          initializeGame();
        }
      },
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...