diff --git a/android/gradle.properties b/android/gradle.properties
index c83c7376df2e23ee77639e2a8b2851d788a75af0..ba7d9f23b3f554b1b5f7c3ea123f02d705d3bfaa 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=1.2.22
-app.versionCode=28
+app.versionName=1.2.23
+app.versionCode=29
diff --git a/assets/files/categories-fr.json b/assets/files/categories-fr.json
index b26aac7d56074f5211f557bd4a36c1a29c19ef4b..4205a8c64d35933845353eff75494cb607a6f56d 100644
--- a/assets/files/categories-fr.json
+++ b/assets/files/categories-fr.json
@@ -9,7 +9,7 @@
     "Dessin animé",
     "Film",
     "Auteur de littérature",
-    "Acteur ou actice",
+    "Acteur ou actrice",
     "Chanteur ou chanteuse",
     "Chose ou objet",
     "Fruit ou légume",
diff --git a/fastlane/metadata/android/en-US/changelogs/29.txt b/fastlane/metadata/android/en-US/changelogs/29.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cab3781e5833c082f457e29c45e3df13d6c96884
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/29.txt
@@ -0,0 +1 @@
+Upgrade Flutter framework and dependencies
diff --git a/fastlane/metadata/android/fr-FR/changelogs/29.txt b/fastlane/metadata/android/fr-FR/changelogs/29.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a06d237e4151eee30a62720824492fb2898b541e
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/29.txt
@@ -0,0 +1 @@
+Mise à jour du framework Flutter et de ses dépendances
diff --git a/lib/provider/data.dart b/lib/provider/data.dart
index 8f39c4ba5e8f17988950cb3947d35ccf6df4a537..6cec524ab5c858698f6d20ae81bfe98d4e64e31b 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -1,7 +1,6 @@
 import 'package:flutter/foundation.dart';
 
 class Data extends ChangeNotifier {
-
   bool _searchingCategory = false;
   bool _searchingLetter = false;
 
@@ -15,7 +14,6 @@ class Data extends ChangeNotifier {
   List _recentCategories = [];
   List _recentLetters = [];
 
-
   bool get searchingCategory => _searchingCategory;
   void setSearchingCategory(bool value) {
     _searchingCategory = value;
@@ -31,7 +29,7 @@ class Data extends ChangeNotifier {
   String get category => _category;
   void updateCategory(String value) {
     _category = value;
-    if (value != null && value != '') {
+    if (value != '') {
       _recentCategories.insert(0, value);
       _recentCategories = _recentCategories.take(_recentCategoriesCount).toList();
     }
@@ -41,7 +39,7 @@ class Data extends ChangeNotifier {
   String get letter => _letter;
   void updateLetter(String value) {
     _letter = value;
-    if (value != null && value != '') {
+    if (value != '') {
       _recentLetters.insert(0, value);
       _recentLetters = _recentLetters.take(_recentLettersCount).toList();
     }
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index 65e64344be200cffd8e4f5ac3fec5c2cce01945b..a54a0a8903dd9d560cf204e7ea5606c42e3f4096 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -10,7 +10,7 @@ import '../utils/random_pick_letter.dart';
 class Home extends StatelessWidget {
   static const String id = 'home';
 
-  static Timer _timer;
+  static Timer? _timer;
   static int _countdownStart = 10;
 
   Future<void> startMiniGame(Data myProvider) async {
@@ -42,7 +42,7 @@ class Home extends StatelessWidget {
   }
 
   void dispose() {
-    _timer.cancel();
+    _timer?.cancel();
   }
 
   Future<void> pickCategory(Data myProvider) async {
@@ -52,8 +52,7 @@ class Home extends StatelessWidget {
     do {
       randomPickCategory = RandomPickCategory();
       await randomPickCategory.init();
-      if (randomPickCategory.category != null &&
-          !myProvider.isCategoryRecentlyPicked(randomPickCategory.category)) {
+      if (!myProvider.isCategoryRecentlyPicked(randomPickCategory.category)) {
         myProvider.updateCategory(randomPickCategory.category);
         myProvider.setSearchingCategory(false);
         break;
@@ -69,8 +68,7 @@ class Home extends StatelessWidget {
     do {
       randomPickLetter = RandomPickLetter();
       await randomPickLetter.init();
-      if (randomPickLetter.letter != null &&
-          !myProvider.isLetterRecentlyPicked(randomPickLetter.letter)) {
+      if (!myProvider.isLetterRecentlyPicked(randomPickLetter.letter)) {
         myProvider.updateLetter(randomPickLetter.letter);
         myProvider.setSearchingLetter(false);
         break;
diff --git a/lib/utils/random_pick_category.dart b/lib/utils/random_pick_category.dart
index b8d31ed5720d76c6960b7e777a44d14ab1f21007..41b9947e5bbadc351842a0506d125280e2357eec 100644
--- a/lib/utils/random_pick_category.dart
+++ b/lib/utils/random_pick_category.dart
@@ -6,7 +6,7 @@ import 'dart:math' show Random;
 class RandomPickCategory {
   RandomPickCategory();
 
-  String _category;
+  String? _category;
   final random = Random();
 
   init() async {
@@ -19,12 +19,11 @@ class RandomPickCategory {
       jsonString = await rootBundle.loadString('assets/files/categories-fr.json');
       final jsonResponse = await json.decode(jsonString);
       var categoryList = jsonResponse[jsonResponse.keys.toList().join()];
-      String category = categoryList[random.nextInt(categoryList.length)];
-      _category = category ?? 'UNEXPECTED ERROR';
+      _category = categoryList[random.nextInt(categoryList.length)];
     } catch (e) {
       _category = 'UNEXPECTED ERROR';
     }
   }
 
-  String get category => _category;
+  String get category => (_category != null) ? _category.toString() : '';
 }
diff --git a/lib/utils/random_pick_letter.dart b/lib/utils/random_pick_letter.dart
index ea72e7a48e5eae54d1b6def4b2c7a0d1071d0303..32caf82cdb7fa6368cff067cd59be398bad379d6 100644
--- a/lib/utils/random_pick_letter.dart
+++ b/lib/utils/random_pick_letter.dart
@@ -4,7 +4,7 @@ import 'dart:math' show Random;
 class RandomPickLetter {
   RandomPickLetter();
 
-  String _letter;
+  String? _letter;
   final random = Random();
   final String _chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 
@@ -16,5 +16,5 @@ class RandomPickLetter {
     _letter = _chars[random.nextInt(_chars.length)];
   }
 
-  String get letter => _letter;
+  String get letter => (_letter != null) ? _letter.toString() : '';
 }
diff --git a/pubspec.lock b/pubspec.lock
index b923188b673aac1c823c8ee502c6cec579023247..d81b680814ea231784dd42ed324f857b9943290e 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -5,42 +5,48 @@ packages:
     dependency: transitive
     description:
       name: async
-      url: "https://pub.dartlang.org"
+      sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
+      url: "https://pub.dev"
     source: hosted
-    version: "2.9.0"
+    version: "2.10.0"
   boolean_selector:
     dependency: transitive
     description:
       name: boolean_selector
-      url: "https://pub.dartlang.org"
+      sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.1.0"
+    version: "2.1.1"
   characters:
     dependency: transitive
     description:
       name: characters
-      url: "https://pub.dartlang.org"
+      sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
+      url: "https://pub.dev"
     source: hosted
     version: "1.2.1"
   clock:
     dependency: transitive
     description:
       name: clock
-      url: "https://pub.dartlang.org"
+      sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+      url: "https://pub.dev"
     source: hosted
     version: "1.1.1"
   collection:
     dependency: transitive
     description:
       name: collection
-      url: "https://pub.dartlang.org"
+      sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
+      url: "https://pub.dev"
     source: hosted
-    version: "1.16.0"
+    version: "1.17.0"
   fake_async:
     dependency: transitive
     description:
       name: fake_async
-      url: "https://pub.dartlang.org"
+      sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+      url: "https://pub.dev"
     source: hosted
     version: "1.3.1"
   flutter:
@@ -53,48 +59,62 @@ packages:
     description: flutter
     source: sdk
     version: "0.0.0"
+  js:
+    dependency: transitive
+    description:
+      name: js
+      sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.6.5"
   matcher:
     dependency: transitive
     description:
       name: matcher
-      url: "https://pub.dartlang.org"
+      sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
+      url: "https://pub.dev"
     source: hosted
-    version: "0.12.12"
+    version: "0.12.13"
   material_color_utilities:
     dependency: transitive
     description:
       name: material_color_utilities
-      url: "https://pub.dartlang.org"
+      sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
+      url: "https://pub.dev"
     source: hosted
-    version: "0.1.5"
+    version: "0.2.0"
   meta:
     dependency: transitive
     description:
       name: meta
-      url: "https://pub.dartlang.org"
+      sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
+      url: "https://pub.dev"
     source: hosted
     version: "1.8.0"
   nested:
     dependency: transitive
     description:
       name: nested
-      url: "https://pub.dartlang.org"
+      sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
+      url: "https://pub.dev"
     source: hosted
     version: "1.0.0"
   path:
     dependency: transitive
     description:
       name: path
-      url: "https://pub.dartlang.org"
+      sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
+      url: "https://pub.dev"
     source: hosted
     version: "1.8.2"
   provider:
     dependency: "direct main"
     description:
       name: provider
-      url: "https://pub.dartlang.org"
+      sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f
+      url: "https://pub.dev"
     source: hosted
-    version: "6.0.3"
+    version: "6.0.5"
   sky_engine:
     dependency: transitive
     description: flutter
@@ -104,51 +124,58 @@ packages:
     dependency: transitive
     description:
       name: source_span
-      url: "https://pub.dartlang.org"
+      sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
+      url: "https://pub.dev"
     source: hosted
-    version: "1.9.0"
+    version: "1.9.1"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
-      url: "https://pub.dartlang.org"
+      sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
+      url: "https://pub.dev"
     source: hosted
-    version: "1.10.0"
+    version: "1.11.0"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
-      url: "https://pub.dartlang.org"
+      sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.1.0"
+    version: "2.1.1"
   string_scanner:
     dependency: transitive
     description:
       name: string_scanner
-      url: "https://pub.dartlang.org"
+      sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+      url: "https://pub.dev"
     source: hosted
-    version: "1.1.1"
+    version: "1.2.0"
   term_glyph:
     dependency: transitive
     description:
       name: term_glyph
-      url: "https://pub.dartlang.org"
+      sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+      url: "https://pub.dev"
     source: hosted
     version: "1.2.1"
   test_api:
     dependency: transitive
     description:
       name: test_api
-      url: "https://pub.dartlang.org"
+      sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
+      url: "https://pub.dev"
     source: hosted
-    version: "0.4.12"
+    version: "0.4.16"
   vector_math:
     dependency: transitive
     description:
       name: vector_math
-      url: "https://pub.dartlang.org"
+      sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+      url: "https://pub.dev"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.4"
 sdks:
-  dart: ">=2.17.0-0 <3.0.0"
+  dart: ">=2.18.0 <3.0.0"
   flutter: ">=1.16.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index ed87677ab5dda87ae3932c7bda3966216dfad6ad..38718705a2cb1f4930485a78a58e40956f30568d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -4,7 +4,7 @@ publish_to: 'none'
 version: 1.0.0+1
 
 environment:
-  sdk: ">=2.7.0 <3.0.0"
+  sdk: ">=2.16.1 <3.0.0"
 
 dependencies:
   flutter: