Advertisement
johnwiese

Untitled

Jun 5th, 2024
754
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 5.46 KB | None | 0 0
  1. class _LevelOneState extends State<LevelOnePage> {
  2.   late Timer time;
  3.   int tick = 0;
  4.   @override
  5.   void initState() {
  6.     super.initState();
  7.     time = Timer.periodic(const Duration(seconds: 1), updateTick);
  8.   }
  9.  
  10.   void updateTick(Timer timer) {
  11.     setState(() {
  12.       tick++;
  13.       if (tick == 15) {
  14.         time.cancel();
  15.         Navigator.of(context)
  16.             .push(MaterialPageRoute(builder: (BuildContext context) {
  17.           return const StartPage();
  18.         }));
  19.       }
  20.     });
  21.   }
  22.  
  23.   List<String> numberPad = [
  24.     '7',
  25.     '8',
  26.     '9',
  27.     'C',
  28.     '4',
  29.     '5',
  30.     '6',
  31.     'DEL',
  32.     '1',
  33.     '2',
  34.     '3',
  35.     '=',
  36.     '0',
  37.   ];
  38.   // Question
  39.   int numberA = 1;
  40.   int numberB = 1;
  41.   // Answer
  42.   String userAnswer = '';
  43.   // On Button Tapped
  44.   void buttonTapped(String button) {
  45.     setState(
  46.       () {
  47.         if (button == '=') {
  48.           //Check if user is correct
  49.           // TODO: YOU NEED TO HAVE A SYMBOL THAT IS BEING USED SOMEPLACE, DOESN"T LOOK LIKE YOU HAVE ONE, JUST A METHOD TO GET ONE
  50.           checkResult( '+', numberA, numberB, double.parse(userAnswer));
  51.         } else if (button == 'C') {
  52.           // CLears answer input
  53.           userAnswer = '';
  54.         } else if (button == 'DEL') {
  55.           // Deletes the last user input
  56.           if (userAnswer.isNotEmpty) {
  57.             userAnswer = userAnswer.substring(0, userAnswer.length - 1);
  58.           }
  59.           // Caps at 3 Numbers
  60.         } else if (userAnswer.length < 3) {
  61.           userAnswer += button;
  62.         }
  63.       },
  64.     );
  65.   }
  66.  
  67.   bool isAnswerCorrect(String op, int numberA, int numberB, double answer) {
  68.     switch (op) {
  69.       case '+':
  70.         return answer == numberA + numberB;    
  71.       case '-':
  72.         return answer == numberA - numberB;
  73.       case '/':
  74.         return answer == numberA / numberB;
  75.       case '*':
  76.         return answer == numberA * numberB;
  77.       default:
  78.         return false;
  79.     }    
  80.   }
  81.  
  82.   //check if user is right
  83.   void checkResult(String op, int numberA, int numberB, double answer) {
  84.    if(isAnswerCorrect(op, numberA, numberB, answer)) {
  85.       // If correct
  86.       showDialog(
  87.         context: context,
  88.         builder: (context) {
  89.           return  ResultMessage(
  90.             message: 'Correct  ',
  91.             onTap: goToNextQuestion,
  92.             icon: Icons.arrow_forward,
  93.           );
  94.         },
  95.       );
  96.     } else{
  97.       // ignore: avoid_print
  98.       showDialog(
  99.         context: context,
  100.         builder: (context) {
  101.           return  ResultMessage(
  102.               message: 'Sorry Try Again',
  103.               onTap: goBackToQuestion,
  104.               icon: Icons.rotate_left);
  105.         },
  106.       );
  107.     }
  108. }
  109.  
  110. // Create Random Number
  111.   var randomNumber = Random();
  112.   // Create Random Symbol
  113.   String createRandomSymbol() {
  114.     var symbols = ['+', '-', '*', '/'];
  115.     symbols.shuffle();
  116.     return symbols.first;
  117.   }
  118.  
  119.   // GoToNextQuestion
  120.   void goToNextQuestion() {
  121.     //Dimiss
  122.     Navigator.of(context).pop();
  123.     //Value Reset
  124.     setState(() {
  125.       userAnswer = '';
  126.     });
  127.     //New Question
  128.     numberA = randomNumber.nextInt(12);
  129.     numberB = randomNumber.nextInt(12);
  130.   }
  131.  
  132.   //goBackToQuestion
  133.   void goBackToQuestion() {
  134.     Navigator.of(context).pop();
  135.   }
  136.  
  137.   @override
  138.   Widget build(BuildContext context) {
  139.     return Scaffold(
  140.       backgroundColor: Colors.lightGreenAccent,
  141.       body: Column(
  142.         children: <Widget>[
  143.           Expanded(
  144.             child: Container(
  145.               child: Column(
  146.                   mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  147.                   children: <Widget>[
  148.                     Container(
  149.                       padding: const EdgeInsets.all(
  150.                         25,
  151.                       ),
  152.                       alignment: Alignment.centerRight,
  153.                       child: Text(tick.toString(),
  154.                           textAlign: TextAlign.right, style: basicTextStyle),
  155.                     ),
  156.                   ]),
  157.             ),
  158.           ),
  159.           Container(
  160.             padding: const EdgeInsets.all(15),
  161.             alignment: Alignment.bottomCenter,
  162.             child:
  163.                 //Question
  164.                 Text(
  165.               // ignore: prefer_interpolation_to_compose_strings
  166.               numberA.toString() + ' + ' + numberB.toString() + ' = ',
  167.               style: const TextStyle(fontSize: 32, color: Colors.purpleAccent),
  168.             ),
  169.           ),
  170.           Container(
  171.             height: 55,
  172.             width: 110,
  173.             decoration: BoxDecoration(
  174.               color: Colors.deepPurpleAccent,
  175.               borderRadius: BorderRadius.circular(4),
  176.             ),
  177.             child: Center(
  178.               child: Text(userAnswer, style: basicTextStyle),
  179.             ),
  180.           ),
  181.           Expanded(
  182.             flex: 3,
  183.             child: Container(
  184.               child: GridView.builder(
  185.                 itemCount: numberPad.length,
  186.                 physics: const NeverScrollableScrollPhysics(),
  187.                 gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
  188.                     crossAxisCount: 4),
  189.                 itemBuilder: (BuildContext context, int index) {
  190.                   return MyButton(
  191.                     child: numberPad[index],
  192.                     onTap: () => buttonTapped(numberPad[index]),
  193.                   );
  194.                 },
  195.               ),
  196.             ),
  197.           ),
  198.         ],
  199.       ),
  200.     );
  201.   }
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement