Line data Source code
1 : import 'package:amadeus_proto/api/utils/api_base.dart';
2 : import 'package:amadeus_proto/api/models/exercise_info.dart';
3 : import 'package:flutter/material.dart';
4 :
5 : /// A provider that manage exercise state.
6 : ///
7 : /// It provides method to :
8 : /// - [verify] the [_selectedAnswer] to check if it's the right [answer]
9 : /// - [reset] the provider when loading the exercise
10 : /// - Checking if the game is finished with [checkEndGame]
11 : class ExerciseProvider extends ChangeNotifier {
12 : bool? _correctAnswer;
13 : int _progress = 0;
14 : bool _nextQuestion = false;
15 : bool _isReset = false;
16 : bool _displayDialog = false;
17 : bool _isInitialized = false;
18 : int _lives = 3;
19 : dynamic _answer;
20 : dynamic _selectedAnswer;
21 : List<String> _choices = [];
22 : String _question = "";
23 :
24 : ExerciseInfo? exerciseInfo;
25 :
26 : @protected
27 : late ApiBase apiBase;
28 0 : void setApiBase(ApiBase value) {
29 0 : apiBase = value;
30 : }
31 :
32 :
33 0 : dynamic get selectedAnswer => _selectedAnswer;
34 0 : set selectedAnswer(dynamic value) {
35 0 : _selectedAnswer = value;
36 0 : notifyListeners();
37 : }
38 :
39 0 : String get question => _question;
40 0 : set question(String value) {
41 0 : _question = value;
42 0 : notifyListeners();
43 : }
44 :
45 0 : bool? get correctAnswer => _correctAnswer;
46 0 : set correctAnswer(bool? value) {
47 0 : _correctAnswer = value;
48 0 : notifyListeners();
49 : }
50 :
51 0 : bool get isReset => _isReset;
52 0 : set isReset(bool value) {
53 0 : _isReset = value;
54 0 : notifyListeners();
55 : }
56 :
57 0 : int get progress => _progress;
58 0 : set progress(int value) {
59 0 : _progress = value;
60 0 : notifyListeners();
61 : }
62 :
63 0 : bool get nextQuestion => _nextQuestion;
64 0 : set nextQuestion(bool value) {
65 0 : _nextQuestion = value;
66 0 : notifyListeners();
67 : }
68 :
69 0 : bool get displayDialog => _displayDialog;
70 0 : set displayDialog(bool value) {
71 0 : _displayDialog = value;
72 0 : notifyListeners();
73 : }
74 :
75 0 : bool get isInitialized => _isInitialized;
76 0 : set isInitialized(bool value) {
77 0 : _isInitialized = value;
78 0 : notifyListeners();
79 : }
80 :
81 0 : int get lives => _lives;
82 0 : set lives(int value) {
83 0 : _lives = value;
84 0 : notifyListeners();
85 : }
86 :
87 0 : List<String> get choices => _choices;
88 0 : set choices(List<String> choices) {
89 0 : _choices = choices;
90 0 : notifyListeners();
91 : }
92 :
93 0 : dynamic get answer => _answer;
94 0 : set answer(dynamic value) {
95 0 : _answer = value;
96 0 : notifyListeners();
97 : }
98 :
99 0 : bool checkEndGame() {
100 0 : return lives == 0;
101 : }
102 :
103 0 : bool isCorrectAnswer() {
104 0 : return selectedAnswer == answer;
105 : }
106 :
107 0 : void reset() {
108 0 : _lives = 3;
109 0 : _isInitialized = false;
110 0 : _answer = -1;
111 0 : _selectedAnswer = null;
112 0 : _nextQuestion = false;
113 0 : _displayDialog = false;
114 0 : _correctAnswer = null;
115 : }
116 :
117 0 : void resetAnswer() {
118 0 : _selectedAnswer = null;
119 : }
120 :
121 0 : void verify(dynamic data) {
122 0 : selectedAnswer = data;
123 0 : if (selectedAnswer != answer) {
124 0 : _lives--;
125 0 : correctAnswer = false;
126 : }
127 0 : selectedAnswer = null;
128 : }
129 : }
|