テストアプリケーションfinal


goal:最終的に問題解決ソフトを完成します.
最後の質問に答えると、エラーや変化のない様子ではなくポップアップウィンドウが表示され、ウィンドウのクリックボタンをクリックすると初期状態に戻ります.

セットを使う。


「RFLUTTER Alert」パッケージを使用して、簡単なコマンドでポップアップウィンドウを作成できます.installingラベルページは、私のプロジェクトに統合されています.
https://pub.dev/packages/rflutter_alert/install
  • pubspec.yamiファイル設定
  • main.dartファイル内の「import」
  • 「QuizBrain」クラスの設定

    quiz_brain.dartファイルの「QuizBrain」クラスに2つのメソッドを追加します.

    「isFined」メソッドの作成


    最後の質問に達したことを確認するために、「isFined」メソッドを作成します.
    ※最後の質問が完了したら、「true」の値を返し、そうでなければ「false」の値を返します.※
    bool isFinished() {
      if (_questionNumber >= _questionBank.length - 1) {
        return true;
      } else {
        return false;
      }
    }

    リセット方法の作成


    問題番号(Problem Number)アトリビュート値を0に変換するリセット(Reset)メソッドを作成します.
    ※「isFined」メソッドが「true」値を返す場合に使用するメソッド.※
    void reset() {
      _questionNumber = 0;
    }

    main.dartファイルの変更

    main.dart上記の方法をファイル内で使用します.
    isFinedメソッドがtrue値を返すと、ポップアップウィンドウが表示され、resetメソッドが呼び出され、scoreKeeper変数がNULL値に変換されます.
    「false」値を返す場合は、既存のコマンドを実行します.
    ※ポップアップウィンドウは、クラスが提供するコマンドで簡単に表示できます.
    https://pub.dev/packages/rflutter_alert
  • 国境戦
  • void checkAnswer(bool userPickedAnswer) {
      bool correctAnswer = quizBrain.getCorrectAnswer();
      setState(() {
        if (userPickedAnswer == correctAnswer) {
          scoreKeeper.add(Icon(
            Icons.check,
            color: Colors.green,
          ));
        } else {
          scoreKeeper.add(Icon(
            Icons.close,
            color: Colors.red,
          ));
        }
        quizBrain.nextQuestion();
      });
    }  
  • 変更後
  • void checkAnswer(bool userPickedAnswer) {                   
      bool correctAnswer = quizBrain.getCorrectAnswer();  
      setState(() {        
        if (quizBrain.isFinished() == true) {                 
          Alert(                                                 
            context: context,                                   
            title: 'Finished!',                                 
            desc: 'You\'ve reached the end of the quiz.',      
          ).show();                                             
          quizBrain.reset();                                    
          scoreKeeper = [];
        }                                                       
        else {                                                 
          if (userPickedAnswer == correctAnswer) {               
            scoreKeeper.add(Icon(                               
              Icons.check,                                       
              color: Colors.green,                               
            ));                                                
          } else {                                               
            scoreKeeper.add(Icon(                               
              Icons.close,                                       
              color: Colors.red,                                 
            ));                                                 
          }                                                     
          quizBrain.nextQuestion();                             
        }                                                       
      });                                                      
    }                                                           
    以上、最終的にクイズソフトが完成しました.次は、クイズアプリケーションの完全なコードです.
  • quiz_brain.dartファイル
  • import 'question.dart';
    
    class QuizBrain {
      int _questionNumber = 0;
    
      List<Question> _questionBank = [
        Question('Some cats are actually allergic to humans', true),
        Question('You can lead a cow down stairs but not up stairs.', false),
        Question('Approximately one quarter of human bones are in the feet.', true),
        Question('A slug\'s blood is green.', true),
        Question('Buzz Aldrin\'s mother\'s maiden name was \"Moon\".', true),
        Question('It is illegal to pee in the Ocean in Portugal.', true),
        Question(
            'No piece of square dry paper can be folded in half more than 7 times.',
            false),
        Question(
            'In London, UK, if you happen to die in the House of Parliament, you are technically entitled to a state funeral, because the building is considered too sacred a place.',
            true),
        Question(
            'The loudest sound produced by any animal is 188 decibels. That animal is the African Elephant.',
            false),
        Question(
            'The total surface area of two human lungs is approximately 70 square metres.',
            true),
        Question('Google was originally called \"Backrub\".', true),
        Question(
            'Chocolate affects a dog\'s heart and nervous system; a few ounces are enough to kill a small dog.',
            true),
        Question(
            'In West Virginia, USA, if you accidentally hit an animal with your car, you are free to take it home to eat.',
            true),
      ];
    
      void nextQuestion() {
        if (_questionNumber < _questionBank.length - 1) {
          _questionNumber++;
        }
      }
    
      String getQuestionText() {
        return _questionBank[_questionNumber].questionText;
      }
    
      bool getCorrectAnswer() {
        return _questionBank[_questionNumber].questionAnswer;
      }
      
      bool isFinished() {
        if (_questionNumber >= _questionBank.length - 1) {
          return true;
        } else {
          return false;
        }
      }
      
      void reset() {
        _questionNumber = 0;
      }
    }
    
  • main.dartファイル
  • import 'package:flutter/material.dart';            
    import 'package:rflutter_alert/rflutter_alert.dart';       
    import 'quiz_brain.dart';                                 
    QuizBrain quizBrain = QuizBrain();                             
    void main() => runApp(Quizzler());                                    
    class Quizzler extends StatelessWidget {                 
                                                       
      Widget build(BuildContext context) {                       
        return MaterialApp(                                     
          home: Scaffold(                                       
            backgroundColor: Colors.grey.shade900,               
            body: SafeArea(                                     
              child: Padding(                                   
                padding: EdgeInsets.symmetric(horizontal: 10.0), 
                child: QuizPage(),                               
              ),                                                   
            ),                                           
          ),                                               
        );                                                 
      }                          
    }                                                                           
    
    class QuizPage extends StatefulWidget {                     
                                                       
      _QuizPageState createState() => _QuizPageState();        
    }                                                           
    
    class _QuizPageState extends State<QuizPage> {        
      List<Icon> scoreKeeper = [];                               
      
      void checkAnswer(bool userPickedAnswer) {                 
        bool correctAnswer = quizBrain.getCorrectAnswer();       
                                                            
        setState(() {                                           
          if (quizBrain.isFinished() == true) {                 
            Alert(                                               
              context: context,                                 
              title: 'Finished!',                               
              desc: 'You\'ve reached the end of the quiz.',     
            ).show();   
            
            quizBrain.reset();                                                  
            scoreKeeper = [];                             
          } else {                                               
            if (userPickedAnswer == correctAnswer) {             
              scoreKeeper.add(Icon(                             
                Icons.check,                                     
                color: Colors.green,                            
              ));                                               
            } else {                                       
              scoreKeeper.add(Icon(                             
                Icons.close,                              
                color: Colors.red,                               
              ));                                            
            }                                                 
            quizBrain.nextQuestion();                         
          }                                                
        });                                              
      }      
      
                                                       
      Widget build(BuildContext context) {                       
        return Column(                                           
          mainAxisAlignment: MainAxisAlignment.spaceBetween,     
          crossAxisAlignment: CrossAxisAlignment.stretch,       
          children: <Widget>[                                   
            Expanded(                                           
              flex: 5,                                           
              child: Padding(                                   
                padding: EdgeInsets.all(10.0),                   
                child: Center(                                   
                  child: Text(                                   
                    quizBrain.getQuestionText(),                 
                    textAlign: TextAlign.center,                 
                    style: TextStyle(                           
                      fontSize: 25.0,                           
                      color: Colors.white,                       
                    ),                                           
                  ),                                    
                ),                                        
              ),                                             
            ),                                                
            Expanded(                                          
              child: Padding(                                   
                padding: EdgeInsets.all(15.0),               
                child: TextButton(                               
                  style: ButtonStyle(                           
                    backgroundColor: MaterialStateProperty.all(Colors.green),   
                  ),                                             
                  child: Text(                                   
                    'True',                                    
                    style: TextStyle(                           
                      color: Colors.white,                       
                      fontSize: 20.0,                           
                    ),                                                           
                  ),                                             
                  onPressed: () {                               
                    //The user picked true.                     
                    checkAnswer(true);                           
                  },                                       
                ),                                               
              ),                                                 
            ),                                             
            Expanded(                                                           
              child: Padding(                                                   
                padding: EdgeInsets.all(15.0),                                  
                child: TextButton(                                              
                  style: ButtonStyle(                                           
                      backgroundColor: MaterialStateProperty.all(Colors.red)),   
                  child: Text(                                                  
                    'False',                                                    
                    style: TextStyle(                                           
                      fontSize: 20.0,                                           
                      color: Colors.white,                                      
                    ),                                                           
                  ),                                                             
                  onPressed: () {                                               
                    //The user picked false.                                    
                    checkAnswer(false);                                         
                  },                                                            
                ),                                                               
              ),                                                                 
            ),                                                                   
            Row(                                                                
              children: scoreKeeper,                                            
            )                                                                    
          ],                                                                     
        );                                                                       
      }                                                                         
    }                                                                           

    実行画面