From 0c0cfbd00935d3852d05389d78db3fe3424d4753 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Mon, 3 May 2021 22:24:08 +0200
Subject: [PATCH] Add score / game stats

---
 android/gradle.properties       |  4 ++--
 lib/provider/data.dart          | 29 ++++++++++++++++++++++++++
 lib/screens/game_pick_word.dart | 37 ++++++++++++++++++++++++++++++---
 3 files changed, 65 insertions(+), 5 deletions(-)

diff --git a/android/gradle.properties b/android/gradle.properties
index ed86f0f..3487476 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,5 +1,5 @@
 org.gradle.jvmargs=-Xmx1536M
 android.useAndroidX=true
 android.enableJetifier=true
-app.versionName=0.0.22
-app.versionCode=22
+app.versionName=0.0.23
+app.versionCode=23
diff --git a/lib/provider/data.dart b/lib/provider/data.dart
index 3d71898..131da8d 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -7,6 +7,11 @@ class Data extends ChangeNotifier {
   List _otherWords = [];
   List _images = [];
 
+  // game data
+  int _questionsCount = 0;
+  int _goodAnswers = 0;
+  int _wrongAnswers = 0;
+
   String get word => _word;
 
   set updateWord(String value) {
@@ -32,6 +37,30 @@ class Data extends ChangeNotifier {
     _word = '';
     _otherWords = [];
     _images = [];
+    _questionsCount = 0;
+    _goodAnswers = 0;
+    _wrongAnswers = 0;
+    notifyListeners();
+  }
+
+  int get questionsCount => _questionsCount;
+
+  set updateQuestionsCount(int value) {
+    _questionsCount = value;
+    notifyListeners();
+  }
+
+  int get goodAnswers => _goodAnswers;
+
+  set updateGoodAnswers(int value) {
+    _goodAnswers = value;
+    notifyListeners();
+  }
+
+  int get wrongAnswers => _wrongAnswers;
+
+  set updateWrongAnswers(int value) {
+    _wrongAnswers = value;
     notifyListeners();
   }
 }
diff --git a/lib/screens/game_pick_word.dart b/lib/screens/game_pick_word.dart
index 297404e..ebafbfd 100644
--- a/lib/screens/game_pick_word.dart
+++ b/lib/screens/game_pick_word.dart
@@ -9,11 +9,15 @@ class GamePickWordPage extends StatelessWidget {
   int _count = 4;
 
   Future<void> startGame(BuildContext context, Data myProvider) async {
-    await pickData(context, myProvider);
+    myProvider.updateQuestionsCount = 0;
+    myProvider.updateGoodAnswers = 0;
+    myProvider.updateWrongAnswers = 0;
+    await nextWord(context, myProvider);
   }
 
   Future<void> nextWord(BuildContext context, Data myProvider) async {
     await pickData(context, myProvider);
+    myProvider.updateQuestionsCount = myProvider.questionsCount + 1;
   }
 
   Future<void> pickData(BuildContext context, Data myProvider) async {
@@ -54,10 +58,35 @@ class GamePickWordPage extends StatelessWidget {
 
   Future<void> checkWord(BuildContext context, Data myProvider, word) async {
     if (myProvider.word == word) {
+      myProvider.updateGoodAnswers = myProvider.goodAnswers + 1;
       nextWord(context, myProvider);
+    } else {
+      myProvider.updateWrongAnswers = myProvider.wrongAnswers + 1;
     }
   }
 
+  Container _buildScoreContainer(BuildContext context, Data myProvider) {
+    String score = ''
+      + '❓ ' + myProvider.questionsCount.toString()
+      + ' - '
+      + '☺️ ' + myProvider.goodAnswers.toString()
+      + ' - '
+      + '😟 ' + myProvider.wrongAnswers.toString()
+      ;
+
+    return Container(
+      padding: EdgeInsets.all(5),
+      child: Text(
+        score,
+        style: TextStyle(
+          fontSize: 20,
+          fontWeight: FontWeight.w400,
+          color: Colors.black,
+        ),
+      ),
+    );
+  }
+
   Container _buildImageContainer(String image, Color color) {
     String imageAsset = 'assets/placeholder.png';
     if (image != null) {
@@ -136,7 +165,7 @@ class GamePickWordPage extends StatelessWidget {
       otherWords.length > 2 ? otherWords[2] : null,
     ];
 
-    words.shuffle();
+    words.sort();
 
     return Column(
       mainAxisSize: MainAxisSize.min,
@@ -205,9 +234,11 @@ class GamePickWordPage extends StatelessWidget {
           mainAxisSize: MainAxisSize.max,
           children: <Widget>[
             _buildImageItemsBlock(_myProvider.images),
+            SizedBox(height: 5),
+            _buildScoreContainer(context, _myProvider),
             ((_myProvider.word == null) || (_myProvider.word == '')) ?
             _buildStartGameButton(context, _myProvider) :
-            SizedBox(height: 15),
+            SizedBox(height: 5),
             _buildTextItemsBlock(context, _myProvider, _myProvider.word, _myProvider.otherWords),
           ],
         ),
-- 
GitLab