From e6b4b08c24c1c2fb6987dcca233a3fee67c50d25 Mon Sep 17 00:00:00 2001
From: Matthew Fosse <matt@fosse.co>
Date: Thu, 18 Apr 2024 10:00:24 -0700
Subject: [PATCH 1/3] version bump to 3.13.9, auth working on mac (#1367)

* version bump to 3.13.9, auth working on mac

* bump flutter version in workflow file

* workflow fix

* test fix

* downgrade flutter version

* test fix

* test fix

* update gradle version

* fixes for updated dart version, localization file updates

* remove accidental inclusion

* missed some unimplemented throws
---
 .github/workflows/pr_test_build.yml           |   2 +-
 android/build.gradle                          |   2 +-
 cw_bitcoin/pubspec.yaml                       |   5 +-
 cw_bitcoin_cash/pubspec.yaml                  |   5 +-
 cw_core/pubspec.yaml                          |   5 +-
 cw_ethereum/pubspec.yaml                      |   6 +-
 cw_evm/pubspec.yaml                           |   5 +-
 cw_haven/pubspec.yaml                         |   5 +-
 cw_monero/pubspec.yaml                        |   5 +-
 cw_nano/pubspec.yaml                          |   5 +-
 cw_polygon/pubspec.yaml                       |   5 +-
 cw_solana/pubspec.yaml                        |   5 +-
 lib/entities/biometric_auth.dart              |  26 +-
 lib/locales/hausa_intl.dart                   |  64 ++
 lib/locales/yoruba_intl.dart                  | 937 ++++++++++--------
 .../settings/security_backup_page.dart        |   4 +-
 lib/src/screens/settings/tor_page.dart        |   4 +-
 .../validable_annotated_editable_text.dart    |  14 +-
 lib/view_model/auth_view_model.dart           |  15 +-
 pubspec_base.yaml                             |   2 +-
 pubspec_description.yaml                      |   2 +-
 21 files changed, 642 insertions(+), 481 deletions(-)

diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml
index dc231df42..bfa378342 100644
--- a/.github/workflows/pr_test_build.yml
+++ b/.github/workflows/pr_test_build.yml
@@ -42,7 +42,7 @@ jobs:
       - name: Flutter action
         uses: subosito/flutter-action@v1
         with:
-          flutter-version: "3.10.x"
+          flutter-version: "3.13.9"
           channel: stable
 
       - name: Install package dependencies
diff --git a/android/build.gradle b/android/build.gradle
index 8286d9cb9..e182e39af 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,5 +1,5 @@
 buildscript {
-    ext.kotlin_version = '1.7.10'
+    ext.kotlin_version = '1.8.10'
     repositories {
         google()
         jcenter()
diff --git a/cw_bitcoin/pubspec.yaml b/cw_bitcoin/pubspec.yaml
index 632a3140a..1ccdb70c9 100644
--- a/cw_bitcoin/pubspec.yaml
+++ b/cw_bitcoin/pubspec.yaml
@@ -39,11 +39,14 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.1.11
+  build_runner: ^2.4.7
   build_resolvers: ^2.0.9
   mobx_codegen: ^2.0.7
   hive_generator: ^1.1.3
 
+dependency_overrides:
+  watcher: ^1.1.0
+
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/cw_bitcoin_cash/pubspec.yaml b/cw_bitcoin_cash/pubspec.yaml
index 37827f1ba..ceef539c3 100644
--- a/cw_bitcoin_cash/pubspec.yaml
+++ b/cw_bitcoin_cash/pubspec.yaml
@@ -39,10 +39,13 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.1.11
+  build_runner: ^2.4.7
   mobx_codegen: ^2.0.7
   hive_generator: ^1.1.3
 
+dependency_overrides:
+  watcher: ^1.1.0
+
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/cw_core/pubspec.yaml b/cw_core/pubspec.yaml
index 04a840d4e..51d671dc7 100644
--- a/cw_core/pubspec.yaml
+++ b/cw_core/pubspec.yaml
@@ -28,11 +28,14 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.1.11
+  build_runner: ^2.4.7
   build_resolvers: ^2.0.9
   mobx_codegen: ^2.0.7
   hive_generator: ^2.0.1
 
+dependency_overrides:
+  watcher: ^1.1.0
+
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/cw_ethereum/pubspec.yaml b/cw_ethereum/pubspec.yaml
index 649ec574b..cbe6644a4 100644
--- a/cw_ethereum/pubspec.yaml
+++ b/cw_ethereum/pubspec.yaml
@@ -22,7 +22,11 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.1.11
+  build_runner: ^2.4.7
+
+dependency_overrides:
+  watcher: ^1.1.0
+
 flutter:
   # assets:
   #   - images/a_dot_burr.jpeg
diff --git a/cw_evm/pubspec.yaml b/cw_evm/pubspec.yaml
index c202cc72a..eaafb8415 100644
--- a/cw_evm/pubspec.yaml
+++ b/cw_evm/pubspec.yaml
@@ -27,11 +27,14 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.1.11
+  build_runner: ^2.4.7
   mobx_codegen: ^2.0.7
   hive_generator: ^1.1.3
   flutter_lints: ^2.0.0
 
+dependency_overrides:
+  watcher: ^1.1.0
+
 flutter:
   # assets:
   #   - images/a_dot_burr.jpeg
diff --git a/cw_haven/pubspec.yaml b/cw_haven/pubspec.yaml
index c215ab779..d868c986d 100644
--- a/cw_haven/pubspec.yaml
+++ b/cw_haven/pubspec.yaml
@@ -24,11 +24,14 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.1.11
+  build_runner: ^2.4.7
   mobx_codegen: ^2.0.7
   build_resolvers: ^2.0.9
   hive_generator: ^1.1.3
 
+dependency_overrides:
+  watcher: ^1.1.0
+
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/cw_monero/pubspec.yaml b/cw_monero/pubspec.yaml
index a6fe7f967..c49a541ab 100644
--- a/cw_monero/pubspec.yaml
+++ b/cw_monero/pubspec.yaml
@@ -26,11 +26,14 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.1.11
+  build_runner: ^2.4.7
   build_resolvers: ^2.0.9
   mobx_codegen: ^2.0.7
   hive_generator: ^1.1.3
 
+dependency_overrides:
+  watcher: ^1.1.0
+
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/cw_nano/pubspec.yaml b/cw_nano/pubspec.yaml
index a4b8732fd..768c1bb4e 100644
--- a/cw_nano/pubspec.yaml
+++ b/cw_nano/pubspec.yaml
@@ -32,10 +32,13 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.1.11
+  build_runner: ^2.4.7
   mobx_codegen: ^2.0.7
   hive_generator: ^1.1.3
 
+dependency_overrides:
+  watcher: ^1.1.0
+
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/cw_polygon/pubspec.yaml b/cw_polygon/pubspec.yaml
index 505838d7c..61a474002 100644
--- a/cw_polygon/pubspec.yaml
+++ b/cw_polygon/pubspec.yaml
@@ -28,7 +28,10 @@ dev_dependencies:
   flutter_test:
     sdk: flutter
   flutter_lints: ^2.0.0
-  build_runner: ^2.1.11
+  build_runner: ^2.4.7
+
+dependency_overrides:
+  watcher: ^1.1.0
 
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
diff --git a/cw_solana/pubspec.yaml b/cw_solana/pubspec.yaml
index 7e24983bf..6b59282b4 100644
--- a/cw_solana/pubspec.yaml
+++ b/cw_solana/pubspec.yaml
@@ -26,10 +26,13 @@ dev_dependencies:
   flutter_test:
     sdk: flutter
   flutter_lints: ^2.0.0
-  build_runner: ^2.1.11
+  build_runner: ^2.4.7
   mobx_codegen: ^2.0.7
   hive_generator: ^1.1.3
 
+dependency_overrides:
+  watcher: ^1.1.0
+
 flutter:
   # assets:
   #   - images/a_dot_burr.jpeg
diff --git a/lib/entities/biometric_auth.dart b/lib/entities/biometric_auth.dart
index febbfa469..463a22775 100644
--- a/lib/entities/biometric_auth.dart
+++ b/lib/entities/biometric_auth.dart
@@ -1,32 +1,28 @@
-import 'package:local_auth/local_auth.dart';
 import 'package:flutter/services.dart';
-import 'package:cake_wallet/generated/i18n.dart';
+import 'package:flutter_local_authentication/flutter_local_authentication.dart';
 
 class BiometricAuth {
-  final _localAuth = LocalAuthentication();
+  final _flutterLocalAuthenticationPlugin = FlutterLocalAuthentication();
 
   Future<bool> isAuthenticated() async {
     try {
-      return await _localAuth.authenticate(
-          localizedReason: S.current.biometric_auth_reason,
-          options: AuthenticationOptions(
-            biometricOnly: true,
-            useErrorDialogs: true,
-            stickyAuth: false));
-    } on PlatformException catch (e) {
+      final authenticated = await _flutterLocalAuthenticationPlugin.authenticate();
+      return authenticated;
+    } catch (e) {
       print(e);
     }
-
     return false;
   }
 
   Future<bool> canCheckBiometrics() async {
+    bool canAuthenticate;
     try {
-      return await _localAuth.canCheckBiometrics;
-    } on PlatformException catch (e) {
-      print(e);
+      canAuthenticate = await _flutterLocalAuthenticationPlugin.canAuthenticate();
+    } catch (error) {
+      print("Exception checking support. $error");
+      canAuthenticate = false;
     }
 
-    return false;
+    return canAuthenticate;
   }
 }
diff --git a/lib/locales/hausa_intl.dart b/lib/locales/hausa_intl.dart
index 749d39a4d..6cf757b60 100644
--- a/lib/locales/hausa_intl.dart
+++ b/lib/locales/hausa_intl.dart
@@ -751,6 +751,50 @@ class HaMaterialLocalizations extends GlobalMaterialLocalizations {
 
   @override
   String get scrimOnTapHintRaw => "Scrip on Tap";
+
+  @override
+  // TODO: implement collapsedHint
+  String get collapsedHint => "collapsedHint";
+
+  @override
+  // TODO: implement expandedHint
+  String get expandedHint => "expandedHint";
+
+  @override
+  // TODO: implement expansionTileCollapsedHint
+  String get expansionTileCollapsedHint => "expansionTileCollapsedHint";
+
+  @override
+  // TODO: implement expansionTileCollapsedTapHint
+  String get expansionTileCollapsedTapHint => "expansionTileCollapsedTapHint";
+
+  @override
+  // TODO: implement expansionTileExpandedHint
+  String get expansionTileExpandedHint => "expansionTileExpandedHint";
+
+  @override
+  // TODO: implement expansionTileExpandedTapHint
+  String get expansionTileExpandedTapHint => "expansionTileExpandedTapHint";
+
+  @override
+  // TODO: implement scanTextButtonLabel
+  String get scanTextButtonLabel => "scanTextButtonLabel";
+
+  @override
+  // TODO: implement lookUpButtonLabel
+  String get lookUpButtonLabel => "lookUpButtonLabel";
+
+  @override
+  // TODO: implement menuDismissLabel
+  String get menuDismissLabel => "menuDismissLabel";
+
+  @override
+  // TODO: implement searchWebButtonLabel
+  String get searchWebButtonLabel => "searchWebButtonLabel";
+
+  @override
+  // TODO: implement shareButtonLabel
+  String get shareButtonLabel => "shareButtonLabel";
 }
 
 /// Cupertino Support
@@ -955,4 +999,24 @@ class HaCupertinoLocalizations extends GlobalCupertinoLocalizations {
 
   @override
   String get noSpellCheckReplacementsLabel => "";
+
+  @override
+  // TODO: implement clearButtonLabel
+  String get clearButtonLabel => "clearButtonLabel";
+
+  @override
+  // TODO: implement lookUpButtonLabel
+  String get lookUpButtonLabel => "lookUpButtonLabel";
+
+  @override
+  // TODO: implement menuDismissLabel
+  String get menuDismissLabel => "menuDismissLabel";
+
+  @override
+  // TODO: implement searchWebButtonLabel
+  String get searchWebButtonLabel => "searchWebButtonLabel";
+
+  @override
+  // TODO: implement shareButtonLabel
+  String get shareButtonLabel => "shareButtonLabel";
 }
diff --git a/lib/locales/yoruba_intl.dart b/lib/locales/yoruba_intl.dart
index 889c21cb7..3c720b80e 100644
--- a/lib/locales/yoruba_intl.dart
+++ b/lib/locales/yoruba_intl.dart
@@ -1,4 +1,3 @@
-
 import 'dart:async';
 
 import 'package:flutter/cupertino.dart';
@@ -164,62 +163,62 @@ const yoDateSymbols = {
     'ọjọ́ Àbámẹ́ta',
   ],
   'STANDALONEWEEKDAYS': <dynamic>[
-'Ọjọ́ Ajé',
-'Ọjọ́ Ìsẹ́gun',
-'Ọjọ́ Ìsẹ́gun-Ẹtì',
-'Ọjọ́ Ìsẹ́gun-Ọ̀rú',
-'Ọjọ́ Àìkú',
-'Ọjọ́ Jímọ̀',
-'Ọjọ́ Àbámẹ́ta',
-],
-'SHORTWEEKDAYS': <dynamic>[
-'Ajé',
-'Ìsẹ́gun',
-'Ìsẹ́gun-Ẹtì',
-'Ìsẹ́gun-Ọ̀rú',
-'Àìkú',
-'Jímọ̀',
-'Àbámẹ́ta',
-],
-'STANDALONESHORTWEEKDAYS': <dynamic>[
-'Ajé',
-'Ìsẹ́gun',
-'Ìsẹ́gun-Ẹtì',
-'Ìsẹ́gun-Ọ̀rú',
-'Àìkú',
-'Jímọ̀',
-'Àbámẹ́ta',
-],
-'NARROWWEEKDAYS': <dynamic>[
-'A',
-'A',
-'Ì',
-'A',
-'À',
-'J',
-'À',
-],
-'STANDALONENARROWWEEKDAYS': <dynamic>[
-'A',
-'A',
-'Ì',
-'A',
-'À',
-'J',
-'À',
-],
-'SHORTQUARTERS': <dynamic>[
-'K1',
-'K2',
-'K3',
-'K4',
-],
-'QUARTERS': <dynamic>[
-'1. kwata',
-'2. kwata',
-'3. kwata',
-'4. kwata',
-],
+    'Ọjọ́ Ajé',
+    'Ọjọ́ Ìsẹ́gun',
+    'Ọjọ́ Ìsẹ́gun-Ẹtì',
+    'Ọjọ́ Ìsẹ́gun-Ọ̀rú',
+    'Ọjọ́ Àìkú',
+    'Ọjọ́ Jímọ̀',
+    'Ọjọ́ Àbámẹ́ta',
+  ],
+  'SHORTWEEKDAYS': <dynamic>[
+    'Ajé',
+    'Ìsẹ́gun',
+    'Ìsẹ́gun-Ẹtì',
+    'Ìsẹ́gun-Ọ̀rú',
+    'Àìkú',
+    'Jímọ̀',
+    'Àbámẹ́ta',
+  ],
+  'STANDALONESHORTWEEKDAYS': <dynamic>[
+    'Ajé',
+    'Ìsẹ́gun',
+    'Ìsẹ́gun-Ẹtì',
+    'Ìsẹ́gun-Ọ̀rú',
+    'Àìkú',
+    'Jímọ̀',
+    'Àbámẹ́ta',
+  ],
+  'NARROWWEEKDAYS': <dynamic>[
+    'A',
+    'A',
+    'Ì',
+    'A',
+    'À',
+    'J',
+    'À',
+  ],
+  'STANDALONENARROWWEEKDAYS': <dynamic>[
+    'A',
+    'A',
+    'Ì',
+    'A',
+    'À',
+    'J',
+    'À',
+  ],
+  'SHORTQUARTERS': <dynamic>[
+    'K1',
+    'K2',
+    'K3',
+    'K4',
+  ],
+  'QUARTERS': <dynamic>[
+    '1. kwata',
+    '2. kwata',
+    '3. kwata',
+    '4. kwata',
+  ],
   'AMPMS': <dynamic>[
     'a.m.',
     'p.m.',
@@ -316,339 +315,339 @@ class YoMaterialLocalizations extends GlobalMaterialLocalizations {
   });
 
 // #docregion Getters
-@override
-String get moreButtonTooltip => r'Kò sí ìròhùn tí ó múni';
+  @override
+  String get moreButtonTooltip => r'Kò sí ìròhùn tí ó múni';
 
-@override
-String get aboutListTileTitleRaw => r'Fun Àpótí àwọn $applicationname';
+  @override
+  String get aboutListTileTitleRaw => r'Fun Àpótí àwọn $applicationname';
 
-@override
-String get alertDialogLabel => r'Ìròhùn Àlàyé';
+  @override
+  String get alertDialogLabel => r'Ìròhùn Àlàyé';
 
 // #enddocregion Getters
 
-@override
-String get anteMeridiemAbbreviation => r'AM';
+  @override
+  String get anteMeridiemAbbreviation => r'AM';
 
-@override
-String get backButtonTooltip => r'Fíran';
+  @override
+  String get backButtonTooltip => r'Fíran';
 
-@override
-String get cancelButtonLabel => r'FAGILE';
+  @override
+  String get cancelButtonLabel => r'FAGILE';
 
-@override
-String get closeButtonLabel => r'KÚ';
+  @override
+  String get closeButtonLabel => r'KÚ';
 
-@override
-String get closeButtonTooltip => r'Kú';
+  @override
+  String get closeButtonTooltip => r'Kú';
 
-@override
-String get collapsedIconTapHint => r'Tá';
+  @override
+  String get collapsedIconTapHint => r'Tá';
 
-@override
-String get continueButtonLabel => r'TÓ WÁ';
+  @override
+  String get continueButtonLabel => r'TÓ WÁ';
 
-@override
-String get copyButtonLabel => r'DÚPLÍKÉTÍ';
+  @override
+  String get copyButtonLabel => r'DÚPLÍKÉTÍ';
 
-@override
-String get cutButtonLabel => r'TÒ';
+  @override
+  String get cutButtonLabel => r'TÒ';
 
-@override
-String get deleteButtonTooltip => r'Máa kú';
+  @override
+  String get deleteButtonTooltip => r'Máa kú';
 
-@override
-String get dialogLabel => r'Ìròhùn';
+  @override
+  String get dialogLabel => r'Ìròhùn';
 
-@override
-String get drawerLabel => r'Àgbèjọ àwọn àpọ̀tí';
+  @override
+  String get drawerLabel => r'Àgbèjọ àwọn àpọ̀tí';
 
-@override
-String get expandedIconTapHint => r'Tá';
+  @override
+  String get expandedIconTapHint => r'Tá';
 
-@override
-String get firstPageTooltip => r'Ojú ewe';
+  @override
+  String get firstPageTooltip => r'Ojú ewe';
 
-@override
-String get hideAccountsLabel => r'Fí èrò àpótí wáyé sílẹ̀';
+  @override
+  String get hideAccountsLabel => r'Fí èrò àpótí wáyé sílẹ̀';
 
-@override
-String get lastPageTooltip => r'Ojú ayé';
+  @override
+  String get lastPageTooltip => r'Ojú ayé';
 
-@override
-String get licensesPageTitle => r'Ìròhùn Ọdún';
+  @override
+  String get licensesPageTitle => r'Ìròhùn Ọdún';
 
-@override
-String get modalBarrierDismissLabel => r'Sọ';
+  @override
+  String get modalBarrierDismissLabel => r'Sọ';
 
-@override
-String get nextMonthTooltip => r'Oṣù kọja';
+  @override
+  String get nextMonthTooltip => r'Oṣù kọja';
 
-@override
-String get nextPageTooltip => r'Ojú ọjọ́ kẹta';
+  @override
+  String get nextPageTooltip => r'Ojú ọjọ́ kẹta';
 
-@override
-String get okButtonLabel => r'Ò daájú';
-@override
+  @override
+  String get okButtonLabel => r'Ò daájú';
+  @override
 // A custom drawer tooltip message.
-String get openAppDrawerTooltip => r'Aya ntọju Iwe Awọn Aka';
+  String get openAppDrawerTooltip => r'Aya ntọju Iwe Awọn Aka';
 
 // #docregion Raw
-@override
-String get pageRowsInfoTitleRaw => r'$firstRow–$lastRow lati $rowCount';
+  @override
+  String get pageRowsInfoTitleRaw => r'$firstRow–$lastRow lati $rowCount';
 
-@override
-String get pageRowsInfoTitleApproximateRaw => r'$firstRow–$lastRow lati kiakia $rowCount';
+  @override
+  String get pageRowsInfoTitleApproximateRaw => r'$firstRow–$lastRow lati kiakia $rowCount';
 // #enddocregion Raw
 
-@override
-String get pasteButtonLabel => r'TÌ';
-
-@override
-String get popupMenuLabel => r'Meniu Pop-up';
-
-@override
-String get menuBarMenuLabel => r'Meniu Akọkọ';
-
-@override
-String get postMeridiemAbbreviation => r'PM';
-
-@override
-String get previousMonthTooltip => r'Oṣu Kanakana';
-
-@override
-String get previousPageTooltip => r'Ojú ewé akọkọ kan';
-
-@override
-String get refreshIndicatorSemanticLabel => r'Gbiyanju';
-
-@override
-String? get remainingTextFieldCharacterCountFew => null;
-
-@override
-String? get remainingTextFieldCharacterCountMany => null;
-
-@override
-String get remainingTextFieldCharacterCountOne => r'1 àmì báálẹ̀';
-
-@override
-String get remainingTextFieldCharacterCountOther => r'$remainingCount àmì báálẹ̀';
-
-@override
-String? get remainingTextFieldCharacterCountTwo => null;
-
-@override
-String get remainingTextFieldCharacterCountZero => r'Kò sí ìwọlé létà láti ń ṣe';
-
-@override
-String get reorderItemDown => r'Jù sí ilẹ';
-
-@override
-String get reorderItemLeft => r'Jù sí àrà';
-
-@override
-String get reorderItemRight => r'Jù sí òtútù';
-
-@override
-String get reorderItemToEnd => r'Jù sí ìbẹ̀jì';
-
-@override
-String get reorderItemToStart => r'Jù sí àkọ́kọ́';
-
-@override
-String get reorderItemUp => r'Jù sí ọ̀rùn';
-
-@override
-String get rowsPerPageTitle => r'Ìlò Fún àwọn Ìtọ́kasíwájú:';
-
-@override
-ScriptCategory get scriptCategory => ScriptCategory.englishLike;
-
-@override
-String get searchFieldLabel => 'Ṣẹda';
-
-@override
-String get selectAllButtonLabel => 'FADỌHỌN DỌFÚN GBÁJÚMỌ̀';
-
-@override
-String? get selectedRowCountTitleFew => null;
-
-@override
-String? get selectedRowCountTitleMany => null;
-
-@override
-String get selectedRowCountTitleOne => '1 káyé';
-
-@override
-String get selectedRowCountTitleOther => r'$selectedRowCount káyé';
-
-@override
-String? get selectedRowCountTitleTwo => null;
-
-@override
-String get selectedRowCountTitleZero => 'Kò sí káyé ti o wọlé';
-
-@override
-String get showAccountsLabel => 'Fi iyipada mu kọ';
-
-@override
-String get showMenuTooltip => 'Fi Meniu mu kọ';
-
-@override
-String get signedInLabel => 'Ọ̀nà';
-
-@override
-String get tabLabelRaw => r'Àwọn tabin $tabIndex lati $tabCount';
-  
   @override
-TimeOfDayFormat get timeOfDayFormatRaw => TimeOfDayFormat.h_colon_mm_space_a;
-
-@override
-String get timePickerHourModeAnnouncement => 'Tuntun waqtu lọ';
-
-@override
-String get timePickerMinuteModeAnnouncement => 'Tuntun daɗi minti';
-
-@override
-String get viewLicensesButtonLabel => 'WO NIKI';
-
-@override
-List<String> get narrowWeekdays => const <String>['L', 'L', 'A', 'O', 'Ọ', 'Ẹ', 'Ẹ'];
-
-@override
-int get firstDayOfWeekIndex => 0;
-
-static const LocalizationsDelegate<MaterialLocalizations> delegate =
-_YoMaterialLocalizationsDelegate();
-
-@override
-String get calendarModeButtonLabel => 'Tọ́rọ̀ kálẹ̀ndà';
-
-@override
-String get dateHelpText => 'mm/dd/yyyy';
-
-@override
-String get dateInputLabel => 'Firanṣẹ̀ Ọjọ́';
-
-@override
-String get dateOutOfRangeLabel => 'Nínú iwọ̀ lọ́wọ́';
-
-@override
-String get datePickerHelpText => 'WÁSÍ';
-
-@override
-String get dateRangeEndDateSemanticLabelRaw => r'Ọjọ́ tuntun to ṣà';
-
-@override
-String get dateRangeEndLabel => 'Ọjọ́ tuntun to ṣà';
-
-@override
-String get dateRangePickerHelpText => 'WÁSÍ ÌGBÀ';
-
-@override
-String get dateRangeStartDateSemanticLabelRaw => 'Ọjọ́ tuntun ti dá';
-
-@override
-String get dateRangeStartLabel => 'Ọjọ́ tuntun ti dá';
-
-@override
-String get dateSeparator => '/';
-
-@override
-String get dialModeButtonLabel => 'Tọ́rọ̀ wakati';
-
-@override
-String get inputDateModeButtonLabel => 'Tọ́rọ̀ firanṣẹ̀ ọjọ́';
-
-@override
-String get inputTimeModeButtonLabel => 'Tọ́rọ̀ wakati bayi lọ́wọ́';
-
-@override
-String get invalidDateFormatLabel => 'Akọ́kọ́tọ́ tó jẹ́kúnrin';
-
-@override
-String get invalidDateRangeLabel => 'Àmì jẹ́ káàkiri lẹ́yìn ilé';
-
-@override
-String get invalidTimeLabel => 'Akọ́kọ́tọ́ àkójọ ìwádìí';
-
-@override
-String get licensesPackageDetailTextOther => r'$licenseCount àwọn níkí';
-
-@override
-String get saveButtonLabel => 'TÙN DÁRA';
-
-@override
-String get selectYearSemanticsLabel => 'Fọ́ọ̀ shẹ́kàrà';
-
-@override
-String get timePickerDialHelpText => 'WÁSÍ WÁKÀTÌ';
-
-@override
-String get timePickerHourLabel => 'Wákàtì àṣà';
-
-@override
-String get timePickerInputHelpText => 'Shìgárà wákàtì';
-
-@override
-String get timePickerMinuteLabel => 'Mìntì';
-
-@override
-String get unspecifiedDate => 'Ọjọ̀kúnrin';
-
-@override
-String get unspecifiedDateRange => 'Ọjọ̀kúnrin àdáyọ̀';
-
-@override
-String get keyboardKeyAlt => 'Alt';
-
-@override
-String get keyboardKeyAltGraph => 'AltGraph';
-
-@override
-String get keyboardKeyBackspace => 'Báckspàcè';
-
-@override
-String get keyboardKeyCapsLock => 'Caps Lock';
-
-@override
-String get keyboardKeyChannelDown => 'Báyàkàmmàlàsàké';
-
-@override
-String get keyboardKeyChannelUp => 'Yíkàmmàlàsàké';
-
-@override
-String get keyboardKeyControl => 'Kọ́ntírọ̀l';
-
-@override
-String get keyboardKeyDelete => 'Shápè';
-
-@override
-String get keyboardKeyEject => 'Èjẹ̀tì';
-
-@override
-String get keyboardKeyEnd => 'Tàbí';
-
-@override
-String get keyboardKeyEscape => 'Tòkè';
+  String get pasteButtonLabel => r'TÌ';
 
   @override
-String get keyboardKeyFn => 'Fn';
+  String get popupMenuLabel => r'Meniu Pop-up';
 
-@override
-String get keyboardKeyHome => 'Ile';
+  @override
+  String get menuBarMenuLabel => r'Meniu Akọkọ';
 
-@override
-String get keyboardKeyInsert => 'Fi sori';
+  @override
+  String get postMeridiemAbbreviation => r'PM';
 
-@override
-String get keyboardKeyMeta => 'Meta';
+  @override
+  String get previousMonthTooltip => r'Oṣu Kanakana';
 
-@override
-String get keyboardKeyMetaMacOs => 'Amfani pẹlu Command';
+  @override
+  String get previousPageTooltip => r'Ojú ewé akọkọ kan';
 
-@override
-String get keyboardKeyMetaWindows => 'Windows';
+  @override
+  String get refreshIndicatorSemanticLabel => r'Gbiyanju';
+
+  @override
+  String? get remainingTextFieldCharacterCountFew => null;
+
+  @override
+  String? get remainingTextFieldCharacterCountMany => null;
+
+  @override
+  String get remainingTextFieldCharacterCountOne => r'1 àmì báálẹ̀';
+
+  @override
+  String get remainingTextFieldCharacterCountOther => r'$remainingCount àmì báálẹ̀';
+
+  @override
+  String? get remainingTextFieldCharacterCountTwo => null;
+
+  @override
+  String get remainingTextFieldCharacterCountZero => r'Kò sí ìwọlé létà láti ń ṣe';
+
+  @override
+  String get reorderItemDown => r'Jù sí ilẹ';
+
+  @override
+  String get reorderItemLeft => r'Jù sí àrà';
+
+  @override
+  String get reorderItemRight => r'Jù sí òtútù';
+
+  @override
+  String get reorderItemToEnd => r'Jù sí ìbẹ̀jì';
+
+  @override
+  String get reorderItemToStart => r'Jù sí àkọ́kọ́';
+
+  @override
+  String get reorderItemUp => r'Jù sí ọ̀rùn';
+
+  @override
+  String get rowsPerPageTitle => r'Ìlò Fún àwọn Ìtọ́kasíwájú:';
+
+  @override
+  ScriptCategory get scriptCategory => ScriptCategory.englishLike;
+
+  @override
+  String get searchFieldLabel => 'Ṣẹda';
+
+  @override
+  String get selectAllButtonLabel => 'FADỌHỌN DỌFÚN GBÁJÚMỌ̀';
+
+  @override
+  String? get selectedRowCountTitleFew => null;
+
+  @override
+  String? get selectedRowCountTitleMany => null;
+
+  @override
+  String get selectedRowCountTitleOne => '1 káyé';
+
+  @override
+  String get selectedRowCountTitleOther => r'$selectedRowCount káyé';
+
+  @override
+  String? get selectedRowCountTitleTwo => null;
+
+  @override
+  String get selectedRowCountTitleZero => 'Kò sí káyé ti o wọlé';
+
+  @override
+  String get showAccountsLabel => 'Fi iyipada mu kọ';
+
+  @override
+  String get showMenuTooltip => 'Fi Meniu mu kọ';
+
+  @override
+  String get signedInLabel => 'Ọ̀nà';
+
+  @override
+  String get tabLabelRaw => r'Àwọn tabin $tabIndex lati $tabCount';
+
+  @override
+  TimeOfDayFormat get timeOfDayFormatRaw => TimeOfDayFormat.h_colon_mm_space_a;
+
+  @override
+  String get timePickerHourModeAnnouncement => 'Tuntun waqtu lọ';
+
+  @override
+  String get timePickerMinuteModeAnnouncement => 'Tuntun daɗi minti';
+
+  @override
+  String get viewLicensesButtonLabel => 'WO NIKI';
+
+  @override
+  List<String> get narrowWeekdays => const <String>['L', 'L', 'A', 'O', 'Ọ', 'Ẹ', 'Ẹ'];
+
+  @override
+  int get firstDayOfWeekIndex => 0;
+
+  static const LocalizationsDelegate<MaterialLocalizations> delegate =
+      _YoMaterialLocalizationsDelegate();
+
+  @override
+  String get calendarModeButtonLabel => 'Tọ́rọ̀ kálẹ̀ndà';
+
+  @override
+  String get dateHelpText => 'mm/dd/yyyy';
+
+  @override
+  String get dateInputLabel => 'Firanṣẹ̀ Ọjọ́';
+
+  @override
+  String get dateOutOfRangeLabel => 'Nínú iwọ̀ lọ́wọ́';
+
+  @override
+  String get datePickerHelpText => 'WÁSÍ';
+
+  @override
+  String get dateRangeEndDateSemanticLabelRaw => r'Ọjọ́ tuntun to ṣà';
+
+  @override
+  String get dateRangeEndLabel => 'Ọjọ́ tuntun to ṣà';
+
+  @override
+  String get dateRangePickerHelpText => 'WÁSÍ ÌGBÀ';
+
+  @override
+  String get dateRangeStartDateSemanticLabelRaw => 'Ọjọ́ tuntun ti dá';
+
+  @override
+  String get dateRangeStartLabel => 'Ọjọ́ tuntun ti dá';
+
+  @override
+  String get dateSeparator => '/';
+
+  @override
+  String get dialModeButtonLabel => 'Tọ́rọ̀ wakati';
+
+  @override
+  String get inputDateModeButtonLabel => 'Tọ́rọ̀ firanṣẹ̀ ọjọ́';
+
+  @override
+  String get inputTimeModeButtonLabel => 'Tọ́rọ̀ wakati bayi lọ́wọ́';
+
+  @override
+  String get invalidDateFormatLabel => 'Akọ́kọ́tọ́ tó jẹ́kúnrin';
+
+  @override
+  String get invalidDateRangeLabel => 'Àmì jẹ́ káàkiri lẹ́yìn ilé';
+
+  @override
+  String get invalidTimeLabel => 'Akọ́kọ́tọ́ àkójọ ìwádìí';
+
+  @override
+  String get licensesPackageDetailTextOther => r'$licenseCount àwọn níkí';
+
+  @override
+  String get saveButtonLabel => 'TÙN DÁRA';
+
+  @override
+  String get selectYearSemanticsLabel => 'Fọ́ọ̀ shẹ́kàrà';
+
+  @override
+  String get timePickerDialHelpText => 'WÁSÍ WÁKÀTÌ';
+
+  @override
+  String get timePickerHourLabel => 'Wákàtì àṣà';
+
+  @override
+  String get timePickerInputHelpText => 'Shìgárà wákàtì';
+
+  @override
+  String get timePickerMinuteLabel => 'Mìntì';
+
+  @override
+  String get unspecifiedDate => 'Ọjọ̀kúnrin';
+
+  @override
+  String get unspecifiedDateRange => 'Ọjọ̀kúnrin àdáyọ̀';
+
+  @override
+  String get keyboardKeyAlt => 'Alt';
+
+  @override
+  String get keyboardKeyAltGraph => 'AltGraph';
+
+  @override
+  String get keyboardKeyBackspace => 'Báckspàcè';
+
+  @override
+  String get keyboardKeyCapsLock => 'Caps Lock';
+
+  @override
+  String get keyboardKeyChannelDown => 'Báyàkàmmàlàsàké';
+
+  @override
+  String get keyboardKeyChannelUp => 'Yíkàmmàlàsàké';
+
+  @override
+  String get keyboardKeyControl => 'Kọ́ntírọ̀l';
+
+  @override
+  String get keyboardKeyDelete => 'Shápè';
+
+  @override
+  String get keyboardKeyEject => 'Èjẹ̀tì';
+
+  @override
+  String get keyboardKeyEnd => 'Tàbí';
+
+  @override
+  String get keyboardKeyEscape => 'Tòkè';
+
+  @override
+  String get keyboardKeyFn => 'Fn';
+
+  @override
+  String get keyboardKeyHome => 'Ile';
+
+  @override
+  String get keyboardKeyInsert => 'Fi sori';
+
+  @override
+  String get keyboardKeyMeta => 'Meta';
+
+  @override
+  String get keyboardKeyMetaMacOs => 'Amfani pẹlu Command';
+
+  @override
+  String get keyboardKeyMetaWindows => 'Windows';
 
   @override
   String get keyboardKeyNumLock => 'Num Lock';
@@ -751,6 +750,50 @@ String get keyboardKeyMetaWindows => 'Windows';
 
   @override
   String get scrimOnTapHintRaw => "Scrip on Tap";
+
+  @override
+  // TODO: implement collapsedHint
+  String get collapsedHint => "collapsedHint";
+
+  @override
+  // TODO: implement expandedHint
+  String get expandedHint => "expandedHint";
+
+  @override
+  // TODO: implement expansionTileCollapsedHint
+  String get expansionTileCollapsedHint => "expansionTileCollapsedHint";
+
+  @override
+  // TODO: implement expansionTileCollapsedTapHint
+  String get expansionTileCollapsedTapHint => "expansionTileCollapsedTapHint";
+
+  @override
+  // TODO: implement expansionTileExpandedHint
+  String get expansionTileExpandedHint => "expansionTileExpandedHint";
+
+  @override
+  // TODO: implement expansionTileExpandedTapHint
+  String get expansionTileExpandedTapHint => "expansionTileExpandedTapHint";
+
+  @override
+  // TODO: implement scanTextButtonLabel
+  String get scanTextButtonLabel => "scanTextButtonLabel";
+
+  @override
+  // TODO: implement lookUpButtonLabel
+  String get lookUpButtonLabel => "lookUpButtonLabel";
+
+  @override
+  // TODO: implement menuDismissLabel
+  String get menuDismissLabel => "menuDismissLabel";
+
+  @override
+  // TODO: implement searchWebButtonLabel
+  String get searchWebButtonLabel => "searchWebButtonLabel";
+
+  @override
+  // TODO: implement shareButtonLabel
+  String get shareButtonLabel => "shareButtonLabel";
 }
 
 /// Cupertino Support
@@ -821,138 +864,158 @@ class YoCupertinoLocalizations extends GlobalCupertinoLocalizations {
     required super.singleDigitSecondFormat,
   });
 
-@override
-String get alertDialogLabel => 'Àdàkárò';
+  @override
+  String get alertDialogLabel => 'Àdàkárò';
 
-@override
-String get anteMeridiemAbbreviation => 'AM';
+  @override
+  String get anteMeridiemAbbreviation => 'AM';
 
-@override
-String get copyButtonLabel => 'Kòpy';
+  @override
+  String get copyButtonLabel => 'Kòpy';
 
-@override
-String get cutButtonLabel => 'Kọ́t';
+  @override
+  String get cutButtonLabel => 'Kọ́t';
 
-@override
-String get datePickerDateOrderString => 'mdy';
+  @override
+  String get datePickerDateOrderString => 'mdy';
 
-@override
-String get datePickerDateTimeOrderString => 'date_time_dayPeriod';
+  @override
+  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';
 
-@override
-String? get datePickerHourSemanticsLabelFew => null;
+  @override
+  String? get datePickerHourSemanticsLabelFew => null;
 
-@override
-String? get datePickerHourSemanticsLabelMany => null;
+  @override
+  String? get datePickerHourSemanticsLabelMany => null;
 
-@override
-String? get datePickerHourSemanticsLabelOne => r"$hour o'clock";
+  @override
+  String? get datePickerHourSemanticsLabelOne => r"$hour o'clock";
 
-@override
-String get datePickerHourSemanticsLabelOther => r"$hour o'clock";
+  @override
+  String get datePickerHourSemanticsLabelOther => r"$hour o'clock";
 
-@override
-String? get datePickerHourSemanticsLabelTwo => null;
+  @override
+  String? get datePickerHourSemanticsLabelTwo => null;
 
-@override
-String? get datePickerHourSemanticsLabelZero => null;
+  @override
+  String? get datePickerHourSemanticsLabelZero => null;
 
-@override
-String? get datePickerMinuteSemanticsLabelFew => null;
+  @override
+  String? get datePickerMinuteSemanticsLabelFew => null;
 
-@override
-String? get datePickerMinuteSemanticsLabelMany => null;
+  @override
+  String? get datePickerMinuteSemanticsLabelMany => null;
 
-@override
-String? get datePickerMinuteSemanticsLabelOne => '1 wakati';
+  @override
+  String? get datePickerMinuteSemanticsLabelOne => '1 wakati';
 
-@override
-String get datePickerMinuteSemanticsLabelOther => r'$minute wakati';
+  @override
+  String get datePickerMinuteSemanticsLabelOther => r'$minute wakati';
 
-@override
-String? get datePickerMinuteSemanticsLabelTwo => null;
+  @override
+  String? get datePickerMinuteSemanticsLabelTwo => null;
 
-@override
-String? get datePickerMinuteSemanticsLabelZero => null;
+  @override
+  String? get datePickerMinuteSemanticsLabelZero => null;
 
-@override
-String get modalBarrierDismissLabel => 'Búta';
+  @override
+  String get modalBarrierDismissLabel => 'Búta';
 
-@override
-String get pasteButtonLabel => 'Tẹ́ẹ́';
+  @override
+  String get pasteButtonLabel => 'Tẹ́ẹ́';
 
-@override
-String get postMeridiemAbbreviation => 'PM';
+  @override
+  String get postMeridiemAbbreviation => 'PM';
 
-@override
-String get searchTextFieldPlaceholderLabel => 'Wúró àtúntà';
+  @override
+  String get searchTextFieldPlaceholderLabel => 'Wúró àtúntà';
 
-@override
-String get selectAllButtonLabel => 'Fírànsé gbógbo';
+  @override
+  String get selectAllButtonLabel => 'Fírànsé gbógbo';
 
-@override
-String get tabSemanticsLabelRaw => r'Tab $tabIndex nínú $tabCount';
+  @override
+  String get tabSemanticsLabelRaw => r'Tab $tabIndex nínú $tabCount';
 
-@override
-String? get timerPickerHourLabelFew => null;
+  @override
+  String? get timerPickerHourLabelFew => null;
 
-@override
-String? get timerPickerHourLabelMany => null;
+  @override
+  String? get timerPickerHourLabelMany => null;
 
-@override
-String? get timerPickerHourLabelOne => 'òǹdì';
+  @override
+  String? get timerPickerHourLabelOne => 'òǹdì';
 
-@override
-String get timerPickerHourLabelOther => 'òǹdì';
+  @override
+  String get timerPickerHourLabelOther => 'òǹdì';
 
-@override
-String? get timerPickerHourLabelTwo => null;
+  @override
+  String? get timerPickerHourLabelTwo => null;
 
-@override
-String? get timerPickerHourLabelZero => null;
+  @override
+  String? get timerPickerHourLabelZero => null;
 
-@override
-String? get timerPickerMinuteLabelFew => null;
+  @override
+  String? get timerPickerMinuteLabelFew => null;
 
-@override
-String? get timerPickerMinuteLabelMany => null;
+  @override
+  String? get timerPickerMinuteLabelMany => null;
 
-@override
-String? get timerPickerMinuteLabelOne => 'wakati.';
+  @override
+  String? get timerPickerMinuteLabelOne => 'wakati.';
 
-@override
-String get timerPickerMinuteLabelOther => 'wakati.';
+  @override
+  String get timerPickerMinuteLabelOther => 'wakati.';
 
-@override
-String? get timerPickerMinuteLabelTwo => null;
+  @override
+  String? get timerPickerMinuteLabelTwo => null;
 
-@override
-String? get timerPickerMinuteLabelZero => null;
+  @override
+  String? get timerPickerMinuteLabelZero => null;
 
-@override
-String? get timerPickerSecondLabelFew => null;
+  @override
+  String? get timerPickerSecondLabelFew => null;
 
-@override
-String? get timerPickerSecondLabelMany => null;
+  @override
+  String? get timerPickerSecondLabelMany => null;
 
-@override
-String? get timerPickerSecondLabelOne => 'dákìkà.';
+  @override
+  String? get timerPickerSecondLabelOne => 'dákìkà.';
 
-@override
-String get timerPickerSecondLabelOther => 'dákìkà.';
+  @override
+  String get timerPickerSecondLabelOther => 'dákìkà.';
 
-@override
-String? get timerPickerSecondLabelTwo => null;
+  @override
+  String? get timerPickerSecondLabelTwo => null;
 
-@override
-String? get timerPickerSecondLabelZero => null;
+  @override
+  String? get timerPickerSecondLabelZero => null;
 
-@override
-String get todayLabel => 'Oyọ';
+  @override
+  String get todayLabel => 'Oyọ';
 
   static const LocalizationsDelegate<CupertinoLocalizations> delegate =
       _YoCupertinoLocalizationsDelegate();
 
   @override
   String get noSpellCheckReplacementsLabel => "";
+
+  @override
+  // TODO: implement clearButtonLabel
+  String get clearButtonLabel => "clearButtonLabel";
+
+  @override
+  // TODO: implement lookUpButtonLabel
+  String get lookUpButtonLabel => "lookUpButtonLabel";
+
+  @override
+  // TODO: implement menuDismissLabel
+  String get menuDismissLabel => "menuDismissLabel";
+
+  @override
+  // TODO: implement searchWebButtonLabel
+  String get searchWebButtonLabel => "searchWebButtonLabel";
+
+  @override
+  // TODO: implement shareButtonLabel
+  String get shareButtonLabel => "shareButtonLabel";
 }
diff --git a/lib/src/screens/settings/security_backup_page.dart b/lib/src/screens/settings/security_backup_page.dart
index e559e9b15..1f0f58ad4 100644
--- a/lib/src/screens/settings/security_backup_page.dart
+++ b/lib/src/screens/settings/security_backup_page.dart
@@ -1,3 +1,5 @@
+import 'dart:io';
+
 import 'package:cake_wallet/core/auth_service.dart';
 import 'package:cake_wallet/entities/pin_code_required_duration.dart';
 import 'package:cake_wallet/routes.dart';
@@ -58,7 +60,7 @@ class SecurityBackupPage extends BasePage {
                   .shouldRequireTOTP2FAForAllSecurityAndBackupSettings,
             ),
           ),
-          if (DeviceInfo.instance.isMobile)
+          if (DeviceInfo.instance.isMobile || Platform.isMacOS || Platform.isLinux)
             Observer(builder: (_) {
               return SettingsSwitcherCell(
                   title: S.current.settings_allow_biometrical_authentication,
diff --git a/lib/src/screens/settings/tor_page.dart b/lib/src/screens/settings/tor_page.dart
index ae1ef1677..2f544be35 100644
--- a/lib/src/screens/settings/tor_page.dart
+++ b/lib/src/screens/settings/tor_page.dart
@@ -146,7 +146,7 @@ class ConnectScreen extends StatelessWidget {
           ElevatedButton(
             onPressed: connect,
             style: ElevatedButton.styleFrom(
-              primary: Colors.blue,
+              // primary: Colors.blue,
               padding: EdgeInsets.symmetric(horizontal: 40, vertical: 15),
               shape: RoundedRectangleBorder(
                 borderRadius: BorderRadius.circular(30),
@@ -211,7 +211,7 @@ class DisconnectScreen extends StatelessWidget {
           ElevatedButton(
             onPressed: disconnect,
             style: ElevatedButton.styleFrom(
-              primary: Colors.red,
+              // primary: Colors.red,
               padding: EdgeInsets.symmetric(horizontal: 40, vertical: 15),
               shape: RoundedRectangleBorder(
                 borderRadius: BorderRadius.circular(30),
diff --git a/lib/src/widgets/validable_annotated_editable_text.dart b/lib/src/widgets/validable_annotated_editable_text.dart
index 6c3fc4f16..7ea928d8a 100644
--- a/lib/src/widgets/validable_annotated_editable_text.dart
+++ b/lib/src/widgets/validable_annotated_editable_text.dart
@@ -1,8 +1,14 @@
-import 'package:cake_wallet/core/seed_validator.dart';
-import 'package:cw_core/wallet_type.dart';
 import 'package:flutter/material.dart';
 
-class Annotation extends Comparable<Annotation> {
+
+extension Compare<T> on Comparable<T> {
+  bool operator <=(T other) => compareTo(other) <= 0;
+  bool operator >=(T other) => compareTo(other) >= 0;
+  bool operator <(T other) => compareTo(other) < 0;
+  bool operator >(T other) => compareTo(other) > 0;
+}
+
+class Annotation implements Comparable<Annotation> {
   Annotation({required this.range, required this.style});
 
   final TextRange range;
@@ -12,7 +18,7 @@ class Annotation extends Comparable<Annotation> {
   int compareTo(Annotation other) => range.start.compareTo(other.range.start);
 }
 
-class TextAnnotation extends Comparable<TextAnnotation> {
+class TextAnnotation implements Comparable<TextAnnotation> {
   TextAnnotation({required this.text, required this.style});
 
   final TextStyle style;
diff --git a/lib/view_model/auth_view_model.dart b/lib/view_model/auth_view_model.dart
index e50f4db0c..0e6590845 100644
--- a/lib/view_model/auth_view_model.dart
+++ b/lib/view_model/auth_view_model.dart
@@ -1,5 +1,6 @@
 import 'dart:async';
 import 'package:flutter/material.dart';
+import 'package:flutter_local_authentication/flutter_local_authentication.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 import 'package:mobx/mobx.dart';
 import 'package:cake_wallet/view_model/auth_state.dart';
@@ -105,16 +106,14 @@ abstract class AuthViewModelBase with Store {
 
   @action
   Future<void> biometricAuth() async {
+    final _flutterLocalAuthenticationPlugin = FlutterLocalAuthentication();
+
     try {
-      final canBiometricAuth = await _biometricAuth.canCheckBiometrics();
-
-      if (canBiometricAuth) {
-        final isAuthenticated = await _biometricAuth.isAuthenticated();
-
-        if (isAuthenticated) {
-          state = ExecutedSuccessfullyState();
-        }
+      final authenticated = await _flutterLocalAuthenticationPlugin.authenticate();
+      if (!authenticated) {
+        throw Exception('Biometric authentication failed');
       }
+      state = ExecutedSuccessfullyState();
     } catch (e) {
       state = FailureState(e.toString());
     }
diff --git a/pubspec_base.yaml b/pubspec_base.yaml
index 3ec3e7978..e1022864c 100644
--- a/pubspec_base.yaml
+++ b/pubspec_base.yaml
@@ -33,8 +33,8 @@ dependencies:
   dio: ^4.0.6
   hive: ^2.2.3
   hive_flutter: ^1.1.0
-  local_auth: ^2.1.0
   local_auth_android: 1.0.21
+  flutter_local_authentication: ^1.2.0
   package_info: ^2.0.0
   #package_info_plus: ^1.4.2
   devicelocale:
diff --git a/pubspec_description.yaml b/pubspec_description.yaml
index ebb6bf001..b51fe96d6 100644
--- a/pubspec_description.yaml
+++ b/pubspec_description.yaml
@@ -4,4 +4,4 @@ version: 0.0.0
 publish_to: none
 
 environment:
-  sdk: ">=2.17.5 <3.0.0"
\ No newline at end of file
+  sdk: ">=3.1.0 <4.0.0"
\ No newline at end of file

From e48962361a71888cb1c25d75204359ab2a660686 Mon Sep 17 00:00:00 2001
From: Matthew Fosse <matt@fosse.co>
Date: Thu, 18 Apr 2024 11:10:32 -0700
Subject: [PATCH 2/3] script updates and new run-android script (#1396)

---
 configure_cake_wallet.sh | 12 +-----------
 run-android.sh           | 30 ++++++++++++++++++++++++++++++
 2 files changed, 31 insertions(+), 11 deletions(-)
 create mode 100755 run-android.sh

diff --git a/configure_cake_wallet.sh b/configure_cake_wallet.sh
index cc55e8fcc..837a002e9 100755
--- a/configure_cake_wallet.sh
+++ b/configure_cake_wallet.sh
@@ -23,14 +23,4 @@ source ./app_env.sh cakewallet
 ./app_config.sh
 cd ../.. && flutter pub get
 flutter packages pub run tool/generate_localization.dart
-cd cw_core && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd ..
-cd cw_evm && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd ..
-cd cw_monero && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd ..
-cd cw_bitcoin && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd ..
-cd cw_haven && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd ..
-cd cw_nano && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd ..
-cd cw_bitcoin_cash && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd ..
-cd cw_solana && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs && cd ..
-cd cw_ethereum && flutter pub get && cd ..
-cd cw_polygon && flutter pub get && cd ..
-flutter packages pub run build_runner build --delete-conflicting-outputs
+./model_generator.sh
diff --git a/run-android.sh b/run-android.sh
new file mode 100755
index 000000000..dd694267a
--- /dev/null
+++ b/run-android.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+# Get the current git branch
+get_current_branch() {
+    if git rev-parse --git-dir > /dev/null 2>&1; then
+        branch=$(git rev-parse --abbrev-ref HEAD)
+        echo "$branch"
+    else
+        echo "Error: Not a git repository."
+        return 1
+    fi
+}
+
+# Update the app.properties file
+update_app_properties() {
+    local branch=$1
+    local file_path="./android/app.properties"
+    
+    sed -i "s/^id=.*/id=com.cakewallet.$branch/" "$file_path"
+    sed -i "s/^name=.*/name=$branch-Cake Wallet/" "$file_path"
+}
+
+# only update app.properties if getting the current branch was successful
+current_branch=$(get_current_branch)
+if [[ $? -eq 0 ]]; then
+    update_app_properties "$current_branch"
+fi
+
+# run the app
+flutter run
\ No newline at end of file

From 4ed4659f9edfe60cbf063b6c10d0a1dc304d81e8 Mon Sep 17 00:00:00 2001
From: Omar Hatem <omarh.ismail1@gmail.com>
Date: Thu, 18 Apr 2024 20:10:58 +0200
Subject: [PATCH 3/3] Revert "version bump to 3.13.9, auth working on mac
 (#1367)" (#1397)

This reverts commit e6b4b08c24c1c2fb6987dcca233a3fee67c50d25.
---
 .github/workflows/pr_test_build.yml           |   2 +-
 android/build.gradle                          |   2 +-
 cw_bitcoin/pubspec.yaml                       |   5 +-
 cw_bitcoin_cash/pubspec.yaml                  |   5 +-
 cw_core/pubspec.yaml                          |   5 +-
 cw_ethereum/pubspec.yaml                      |   6 +-
 cw_evm/pubspec.yaml                           |   5 +-
 cw_haven/pubspec.yaml                         |   5 +-
 cw_monero/pubspec.yaml                        |   5 +-
 cw_nano/pubspec.yaml                          |   5 +-
 cw_polygon/pubspec.yaml                       |   5 +-
 cw_solana/pubspec.yaml                        |   5 +-
 lib/entities/biometric_auth.dart              |  26 +-
 lib/locales/hausa_intl.dart                   |  64 --
 lib/locales/yoruba_intl.dart                  | 787 ++++++++----------
 .../settings/security_backup_page.dart        |   4 +-
 lib/src/screens/settings/tor_page.dart        |   4 +-
 .../validable_annotated_editable_text.dart    |  14 +-
 lib/view_model/auth_view_model.dart           |  15 +-
 pubspec_base.yaml                             |   2 +-
 pubspec_description.yaml                      |   2 +-
 21 files changed, 406 insertions(+), 567 deletions(-)

diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml
index bfa378342..dc231df42 100644
--- a/.github/workflows/pr_test_build.yml
+++ b/.github/workflows/pr_test_build.yml
@@ -42,7 +42,7 @@ jobs:
       - name: Flutter action
         uses: subosito/flutter-action@v1
         with:
-          flutter-version: "3.13.9"
+          flutter-version: "3.10.x"
           channel: stable
 
       - name: Install package dependencies
diff --git a/android/build.gradle b/android/build.gradle
index e182e39af..8286d9cb9 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,5 +1,5 @@
 buildscript {
-    ext.kotlin_version = '1.8.10'
+    ext.kotlin_version = '1.7.10'
     repositories {
         google()
         jcenter()
diff --git a/cw_bitcoin/pubspec.yaml b/cw_bitcoin/pubspec.yaml
index 1ccdb70c9..632a3140a 100644
--- a/cw_bitcoin/pubspec.yaml
+++ b/cw_bitcoin/pubspec.yaml
@@ -39,14 +39,11 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.4.7
+  build_runner: ^2.1.11
   build_resolvers: ^2.0.9
   mobx_codegen: ^2.0.7
   hive_generator: ^1.1.3
 
-dependency_overrides:
-  watcher: ^1.1.0
-
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/cw_bitcoin_cash/pubspec.yaml b/cw_bitcoin_cash/pubspec.yaml
index ceef539c3..37827f1ba 100644
--- a/cw_bitcoin_cash/pubspec.yaml
+++ b/cw_bitcoin_cash/pubspec.yaml
@@ -39,13 +39,10 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.4.7
+  build_runner: ^2.1.11
   mobx_codegen: ^2.0.7
   hive_generator: ^1.1.3
 
-dependency_overrides:
-  watcher: ^1.1.0
-
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/cw_core/pubspec.yaml b/cw_core/pubspec.yaml
index 51d671dc7..04a840d4e 100644
--- a/cw_core/pubspec.yaml
+++ b/cw_core/pubspec.yaml
@@ -28,14 +28,11 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.4.7
+  build_runner: ^2.1.11
   build_resolvers: ^2.0.9
   mobx_codegen: ^2.0.7
   hive_generator: ^2.0.1
 
-dependency_overrides:
-  watcher: ^1.1.0
-
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/cw_ethereum/pubspec.yaml b/cw_ethereum/pubspec.yaml
index cbe6644a4..649ec574b 100644
--- a/cw_ethereum/pubspec.yaml
+++ b/cw_ethereum/pubspec.yaml
@@ -22,11 +22,7 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.4.7
-
-dependency_overrides:
-  watcher: ^1.1.0
-
+  build_runner: ^2.1.11
 flutter:
   # assets:
   #   - images/a_dot_burr.jpeg
diff --git a/cw_evm/pubspec.yaml b/cw_evm/pubspec.yaml
index eaafb8415..c202cc72a 100644
--- a/cw_evm/pubspec.yaml
+++ b/cw_evm/pubspec.yaml
@@ -27,14 +27,11 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.4.7
+  build_runner: ^2.1.11
   mobx_codegen: ^2.0.7
   hive_generator: ^1.1.3
   flutter_lints: ^2.0.0
 
-dependency_overrides:
-  watcher: ^1.1.0
-
 flutter:
   # assets:
   #   - images/a_dot_burr.jpeg
diff --git a/cw_haven/pubspec.yaml b/cw_haven/pubspec.yaml
index d868c986d..c215ab779 100644
--- a/cw_haven/pubspec.yaml
+++ b/cw_haven/pubspec.yaml
@@ -24,14 +24,11 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.4.7
+  build_runner: ^2.1.11
   mobx_codegen: ^2.0.7
   build_resolvers: ^2.0.9
   hive_generator: ^1.1.3
 
-dependency_overrides:
-  watcher: ^1.1.0
-
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/cw_monero/pubspec.yaml b/cw_monero/pubspec.yaml
index c49a541ab..a6fe7f967 100644
--- a/cw_monero/pubspec.yaml
+++ b/cw_monero/pubspec.yaml
@@ -26,14 +26,11 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.4.7
+  build_runner: ^2.1.11
   build_resolvers: ^2.0.9
   mobx_codegen: ^2.0.7
   hive_generator: ^1.1.3
 
-dependency_overrides:
-  watcher: ^1.1.0
-
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/cw_nano/pubspec.yaml b/cw_nano/pubspec.yaml
index 768c1bb4e..a4b8732fd 100644
--- a/cw_nano/pubspec.yaml
+++ b/cw_nano/pubspec.yaml
@@ -32,13 +32,10 @@ dependencies:
 dev_dependencies:
   flutter_test:
     sdk: flutter
-  build_runner: ^2.4.7
+  build_runner: ^2.1.11
   mobx_codegen: ^2.0.7
   hive_generator: ^1.1.3
 
-dependency_overrides:
-  watcher: ^1.1.0
-
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
 
diff --git a/cw_polygon/pubspec.yaml b/cw_polygon/pubspec.yaml
index 61a474002..505838d7c 100644
--- a/cw_polygon/pubspec.yaml
+++ b/cw_polygon/pubspec.yaml
@@ -28,10 +28,7 @@ dev_dependencies:
   flutter_test:
     sdk: flutter
   flutter_lints: ^2.0.0
-  build_runner: ^2.4.7
-
-dependency_overrides:
-  watcher: ^1.1.0
+  build_runner: ^2.1.11
 
 # For information on the generic Dart part of this file, see the
 # following page: https://dart.dev/tools/pub/pubspec
diff --git a/cw_solana/pubspec.yaml b/cw_solana/pubspec.yaml
index 6b59282b4..7e24983bf 100644
--- a/cw_solana/pubspec.yaml
+++ b/cw_solana/pubspec.yaml
@@ -26,13 +26,10 @@ dev_dependencies:
   flutter_test:
     sdk: flutter
   flutter_lints: ^2.0.0
-  build_runner: ^2.4.7
+  build_runner: ^2.1.11
   mobx_codegen: ^2.0.7
   hive_generator: ^1.1.3
 
-dependency_overrides:
-  watcher: ^1.1.0
-
 flutter:
   # assets:
   #   - images/a_dot_burr.jpeg
diff --git a/lib/entities/biometric_auth.dart b/lib/entities/biometric_auth.dart
index 463a22775..febbfa469 100644
--- a/lib/entities/biometric_auth.dart
+++ b/lib/entities/biometric_auth.dart
@@ -1,28 +1,32 @@
+import 'package:local_auth/local_auth.dart';
 import 'package:flutter/services.dart';
-import 'package:flutter_local_authentication/flutter_local_authentication.dart';
+import 'package:cake_wallet/generated/i18n.dart';
 
 class BiometricAuth {
-  final _flutterLocalAuthenticationPlugin = FlutterLocalAuthentication();
+  final _localAuth = LocalAuthentication();
 
   Future<bool> isAuthenticated() async {
     try {
-      final authenticated = await _flutterLocalAuthenticationPlugin.authenticate();
-      return authenticated;
-    } catch (e) {
+      return await _localAuth.authenticate(
+          localizedReason: S.current.biometric_auth_reason,
+          options: AuthenticationOptions(
+            biometricOnly: true,
+            useErrorDialogs: true,
+            stickyAuth: false));
+    } on PlatformException catch (e) {
       print(e);
     }
+
     return false;
   }
 
   Future<bool> canCheckBiometrics() async {
-    bool canAuthenticate;
     try {
-      canAuthenticate = await _flutterLocalAuthenticationPlugin.canAuthenticate();
-    } catch (error) {
-      print("Exception checking support. $error");
-      canAuthenticate = false;
+      return await _localAuth.canCheckBiometrics;
+    } on PlatformException catch (e) {
+      print(e);
     }
 
-    return canAuthenticate;
+    return false;
   }
 }
diff --git a/lib/locales/hausa_intl.dart b/lib/locales/hausa_intl.dart
index 6cf757b60..749d39a4d 100644
--- a/lib/locales/hausa_intl.dart
+++ b/lib/locales/hausa_intl.dart
@@ -751,50 +751,6 @@ class HaMaterialLocalizations extends GlobalMaterialLocalizations {
 
   @override
   String get scrimOnTapHintRaw => "Scrip on Tap";
-
-  @override
-  // TODO: implement collapsedHint
-  String get collapsedHint => "collapsedHint";
-
-  @override
-  // TODO: implement expandedHint
-  String get expandedHint => "expandedHint";
-
-  @override
-  // TODO: implement expansionTileCollapsedHint
-  String get expansionTileCollapsedHint => "expansionTileCollapsedHint";
-
-  @override
-  // TODO: implement expansionTileCollapsedTapHint
-  String get expansionTileCollapsedTapHint => "expansionTileCollapsedTapHint";
-
-  @override
-  // TODO: implement expansionTileExpandedHint
-  String get expansionTileExpandedHint => "expansionTileExpandedHint";
-
-  @override
-  // TODO: implement expansionTileExpandedTapHint
-  String get expansionTileExpandedTapHint => "expansionTileExpandedTapHint";
-
-  @override
-  // TODO: implement scanTextButtonLabel
-  String get scanTextButtonLabel => "scanTextButtonLabel";
-
-  @override
-  // TODO: implement lookUpButtonLabel
-  String get lookUpButtonLabel => "lookUpButtonLabel";
-
-  @override
-  // TODO: implement menuDismissLabel
-  String get menuDismissLabel => "menuDismissLabel";
-
-  @override
-  // TODO: implement searchWebButtonLabel
-  String get searchWebButtonLabel => "searchWebButtonLabel";
-
-  @override
-  // TODO: implement shareButtonLabel
-  String get shareButtonLabel => "shareButtonLabel";
 }
 
 /// Cupertino Support
@@ -999,24 +955,4 @@ class HaCupertinoLocalizations extends GlobalCupertinoLocalizations {
 
   @override
   String get noSpellCheckReplacementsLabel => "";
-
-  @override
-  // TODO: implement clearButtonLabel
-  String get clearButtonLabel => "clearButtonLabel";
-
-  @override
-  // TODO: implement lookUpButtonLabel
-  String get lookUpButtonLabel => "lookUpButtonLabel";
-
-  @override
-  // TODO: implement menuDismissLabel
-  String get menuDismissLabel => "menuDismissLabel";
-
-  @override
-  // TODO: implement searchWebButtonLabel
-  String get searchWebButtonLabel => "searchWebButtonLabel";
-
-  @override
-  // TODO: implement shareButtonLabel
-  String get shareButtonLabel => "shareButtonLabel";
 }
diff --git a/lib/locales/yoruba_intl.dart b/lib/locales/yoruba_intl.dart
index 3c720b80e..889c21cb7 100644
--- a/lib/locales/yoruba_intl.dart
+++ b/lib/locales/yoruba_intl.dart
@@ -1,3 +1,4 @@
+
 import 'dart:async';
 
 import 'package:flutter/cupertino.dart';
@@ -163,62 +164,62 @@ const yoDateSymbols = {
     'ọjọ́ Àbámẹ́ta',
   ],
   'STANDALONEWEEKDAYS': <dynamic>[
-    'Ọjọ́ Ajé',
-    'Ọjọ́ Ìsẹ́gun',
-    'Ọjọ́ Ìsẹ́gun-Ẹtì',
-    'Ọjọ́ Ìsẹ́gun-Ọ̀rú',
-    'Ọjọ́ Àìkú',
-    'Ọjọ́ Jímọ̀',
-    'Ọjọ́ Àbámẹ́ta',
-  ],
-  'SHORTWEEKDAYS': <dynamic>[
-    'Ajé',
-    'Ìsẹ́gun',
-    'Ìsẹ́gun-Ẹtì',
-    'Ìsẹ́gun-Ọ̀rú',
-    'Àìkú',
-    'Jímọ̀',
-    'Àbámẹ́ta',
-  ],
-  'STANDALONESHORTWEEKDAYS': <dynamic>[
-    'Ajé',
-    'Ìsẹ́gun',
-    'Ìsẹ́gun-Ẹtì',
-    'Ìsẹ́gun-Ọ̀rú',
-    'Àìkú',
-    'Jímọ̀',
-    'Àbámẹ́ta',
-  ],
-  'NARROWWEEKDAYS': <dynamic>[
-    'A',
-    'A',
-    'Ì',
-    'A',
-    'À',
-    'J',
-    'À',
-  ],
-  'STANDALONENARROWWEEKDAYS': <dynamic>[
-    'A',
-    'A',
-    'Ì',
-    'A',
-    'À',
-    'J',
-    'À',
-  ],
-  'SHORTQUARTERS': <dynamic>[
-    'K1',
-    'K2',
-    'K3',
-    'K4',
-  ],
-  'QUARTERS': <dynamic>[
-    '1. kwata',
-    '2. kwata',
-    '3. kwata',
-    '4. kwata',
-  ],
+'Ọjọ́ Ajé',
+'Ọjọ́ Ìsẹ́gun',
+'Ọjọ́ Ìsẹ́gun-Ẹtì',
+'Ọjọ́ Ìsẹ́gun-Ọ̀rú',
+'Ọjọ́ Àìkú',
+'Ọjọ́ Jímọ̀',
+'Ọjọ́ Àbámẹ́ta',
+],
+'SHORTWEEKDAYS': <dynamic>[
+'Ajé',
+'Ìsẹ́gun',
+'Ìsẹ́gun-Ẹtì',
+'Ìsẹ́gun-Ọ̀rú',
+'Àìkú',
+'Jímọ̀',
+'Àbámẹ́ta',
+],
+'STANDALONESHORTWEEKDAYS': <dynamic>[
+'Ajé',
+'Ìsẹ́gun',
+'Ìsẹ́gun-Ẹtì',
+'Ìsẹ́gun-Ọ̀rú',
+'Àìkú',
+'Jímọ̀',
+'Àbámẹ́ta',
+],
+'NARROWWEEKDAYS': <dynamic>[
+'A',
+'A',
+'Ì',
+'A',
+'À',
+'J',
+'À',
+],
+'STANDALONENARROWWEEKDAYS': <dynamic>[
+'A',
+'A',
+'Ì',
+'A',
+'À',
+'J',
+'À',
+],
+'SHORTQUARTERS': <dynamic>[
+'K1',
+'K2',
+'K3',
+'K4',
+],
+'QUARTERS': <dynamic>[
+'1. kwata',
+'2. kwata',
+'3. kwata',
+'4. kwata',
+],
   'AMPMS': <dynamic>[
     'a.m.',
     'p.m.',
@@ -315,339 +316,339 @@ class YoMaterialLocalizations extends GlobalMaterialLocalizations {
   });
 
 // #docregion Getters
-  @override
-  String get moreButtonTooltip => r'Kò sí ìròhùn tí ó múni';
+@override
+String get moreButtonTooltip => r'Kò sí ìròhùn tí ó múni';
 
-  @override
-  String get aboutListTileTitleRaw => r'Fun Àpótí àwọn $applicationname';
+@override
+String get aboutListTileTitleRaw => r'Fun Àpótí àwọn $applicationname';
 
-  @override
-  String get alertDialogLabel => r'Ìròhùn Àlàyé';
+@override
+String get alertDialogLabel => r'Ìròhùn Àlàyé';
 
 // #enddocregion Getters
 
-  @override
-  String get anteMeridiemAbbreviation => r'AM';
+@override
+String get anteMeridiemAbbreviation => r'AM';
 
-  @override
-  String get backButtonTooltip => r'Fíran';
+@override
+String get backButtonTooltip => r'Fíran';
 
-  @override
-  String get cancelButtonLabel => r'FAGILE';
+@override
+String get cancelButtonLabel => r'FAGILE';
 
-  @override
-  String get closeButtonLabel => r'KÚ';
+@override
+String get closeButtonLabel => r'KÚ';
 
-  @override
-  String get closeButtonTooltip => r'Kú';
+@override
+String get closeButtonTooltip => r'Kú';
 
-  @override
-  String get collapsedIconTapHint => r'Tá';
+@override
+String get collapsedIconTapHint => r'Tá';
 
-  @override
-  String get continueButtonLabel => r'TÓ WÁ';
+@override
+String get continueButtonLabel => r'TÓ WÁ';
 
-  @override
-  String get copyButtonLabel => r'DÚPLÍKÉTÍ';
+@override
+String get copyButtonLabel => r'DÚPLÍKÉTÍ';
 
-  @override
-  String get cutButtonLabel => r'TÒ';
+@override
+String get cutButtonLabel => r'TÒ';
 
-  @override
-  String get deleteButtonTooltip => r'Máa kú';
+@override
+String get deleteButtonTooltip => r'Máa kú';
 
-  @override
-  String get dialogLabel => r'Ìròhùn';
+@override
+String get dialogLabel => r'Ìròhùn';
 
-  @override
-  String get drawerLabel => r'Àgbèjọ àwọn àpọ̀tí';
+@override
+String get drawerLabel => r'Àgbèjọ àwọn àpọ̀tí';
 
-  @override
-  String get expandedIconTapHint => r'Tá';
+@override
+String get expandedIconTapHint => r'Tá';
 
-  @override
-  String get firstPageTooltip => r'Ojú ewe';
+@override
+String get firstPageTooltip => r'Ojú ewe';
 
-  @override
-  String get hideAccountsLabel => r'Fí èrò àpótí wáyé sílẹ̀';
+@override
+String get hideAccountsLabel => r'Fí èrò àpótí wáyé sílẹ̀';
 
-  @override
-  String get lastPageTooltip => r'Ojú ayé';
+@override
+String get lastPageTooltip => r'Ojú ayé';
 
-  @override
-  String get licensesPageTitle => r'Ìròhùn Ọdún';
+@override
+String get licensesPageTitle => r'Ìròhùn Ọdún';
 
-  @override
-  String get modalBarrierDismissLabel => r'Sọ';
+@override
+String get modalBarrierDismissLabel => r'Sọ';
 
-  @override
-  String get nextMonthTooltip => r'Oṣù kọja';
+@override
+String get nextMonthTooltip => r'Oṣù kọja';
 
-  @override
-  String get nextPageTooltip => r'Ojú ọjọ́ kẹta';
+@override
+String get nextPageTooltip => r'Ojú ọjọ́ kẹta';
 
-  @override
-  String get okButtonLabel => r'Ò daájú';
-  @override
+@override
+String get okButtonLabel => r'Ò daájú';
+@override
 // A custom drawer tooltip message.
-  String get openAppDrawerTooltip => r'Aya ntọju Iwe Awọn Aka';
+String get openAppDrawerTooltip => r'Aya ntọju Iwe Awọn Aka';
 
 // #docregion Raw
-  @override
-  String get pageRowsInfoTitleRaw => r'$firstRow–$lastRow lati $rowCount';
+@override
+String get pageRowsInfoTitleRaw => r'$firstRow–$lastRow lati $rowCount';
 
-  @override
-  String get pageRowsInfoTitleApproximateRaw => r'$firstRow–$lastRow lati kiakia $rowCount';
+@override
+String get pageRowsInfoTitleApproximateRaw => r'$firstRow–$lastRow lati kiakia $rowCount';
 // #enddocregion Raw
 
-  @override
-  String get pasteButtonLabel => r'TÌ';
+@override
+String get pasteButtonLabel => r'TÌ';
 
-  @override
-  String get popupMenuLabel => r'Meniu Pop-up';
+@override
+String get popupMenuLabel => r'Meniu Pop-up';
 
-  @override
-  String get menuBarMenuLabel => r'Meniu Akọkọ';
+@override
+String get menuBarMenuLabel => r'Meniu Akọkọ';
 
-  @override
-  String get postMeridiemAbbreviation => r'PM';
+@override
+String get postMeridiemAbbreviation => r'PM';
 
-  @override
-  String get previousMonthTooltip => r'Oṣu Kanakana';
+@override
+String get previousMonthTooltip => r'Oṣu Kanakana';
 
-  @override
-  String get previousPageTooltip => r'Ojú ewé akọkọ kan';
+@override
+String get previousPageTooltip => r'Ojú ewé akọkọ kan';
 
-  @override
-  String get refreshIndicatorSemanticLabel => r'Gbiyanju';
+@override
+String get refreshIndicatorSemanticLabel => r'Gbiyanju';
 
-  @override
-  String? get remainingTextFieldCharacterCountFew => null;
+@override
+String? get remainingTextFieldCharacterCountFew => null;
 
-  @override
-  String? get remainingTextFieldCharacterCountMany => null;
+@override
+String? get remainingTextFieldCharacterCountMany => null;
 
-  @override
-  String get remainingTextFieldCharacterCountOne => r'1 àmì báálẹ̀';
+@override
+String get remainingTextFieldCharacterCountOne => r'1 àmì báálẹ̀';
 
-  @override
-  String get remainingTextFieldCharacterCountOther => r'$remainingCount àmì báálẹ̀';
+@override
+String get remainingTextFieldCharacterCountOther => r'$remainingCount àmì báálẹ̀';
 
-  @override
-  String? get remainingTextFieldCharacterCountTwo => null;
+@override
+String? get remainingTextFieldCharacterCountTwo => null;
 
-  @override
-  String get remainingTextFieldCharacterCountZero => r'Kò sí ìwọlé létà láti ń ṣe';
+@override
+String get remainingTextFieldCharacterCountZero => r'Kò sí ìwọlé létà láti ń ṣe';
 
-  @override
-  String get reorderItemDown => r'Jù sí ilẹ';
+@override
+String get reorderItemDown => r'Jù sí ilẹ';
 
-  @override
-  String get reorderItemLeft => r'Jù sí àrà';
+@override
+String get reorderItemLeft => r'Jù sí àrà';
 
-  @override
-  String get reorderItemRight => r'Jù sí òtútù';
+@override
+String get reorderItemRight => r'Jù sí òtútù';
 
-  @override
-  String get reorderItemToEnd => r'Jù sí ìbẹ̀jì';
+@override
+String get reorderItemToEnd => r'Jù sí ìbẹ̀jì';
 
-  @override
-  String get reorderItemToStart => r'Jù sí àkọ́kọ́';
+@override
+String get reorderItemToStart => r'Jù sí àkọ́kọ́';
 
-  @override
-  String get reorderItemUp => r'Jù sí ọ̀rùn';
+@override
+String get reorderItemUp => r'Jù sí ọ̀rùn';
 
-  @override
-  String get rowsPerPageTitle => r'Ìlò Fún àwọn Ìtọ́kasíwájú:';
+@override
+String get rowsPerPageTitle => r'Ìlò Fún àwọn Ìtọ́kasíwájú:';
 
-  @override
-  ScriptCategory get scriptCategory => ScriptCategory.englishLike;
+@override
+ScriptCategory get scriptCategory => ScriptCategory.englishLike;
 
-  @override
-  String get searchFieldLabel => 'Ṣẹda';
+@override
+String get searchFieldLabel => 'Ṣẹda';
 
-  @override
-  String get selectAllButtonLabel => 'FADỌHỌN DỌFÚN GBÁJÚMỌ̀';
+@override
+String get selectAllButtonLabel => 'FADỌHỌN DỌFÚN GBÁJÚMỌ̀';
 
-  @override
-  String? get selectedRowCountTitleFew => null;
+@override
+String? get selectedRowCountTitleFew => null;
 
-  @override
-  String? get selectedRowCountTitleMany => null;
+@override
+String? get selectedRowCountTitleMany => null;
 
-  @override
-  String get selectedRowCountTitleOne => '1 káyé';
+@override
+String get selectedRowCountTitleOne => '1 káyé';
 
-  @override
-  String get selectedRowCountTitleOther => r'$selectedRowCount káyé';
+@override
+String get selectedRowCountTitleOther => r'$selectedRowCount káyé';
 
-  @override
-  String? get selectedRowCountTitleTwo => null;
+@override
+String? get selectedRowCountTitleTwo => null;
 
-  @override
-  String get selectedRowCountTitleZero => 'Kò sí káyé ti o wọlé';
+@override
+String get selectedRowCountTitleZero => 'Kò sí káyé ti o wọlé';
 
-  @override
-  String get showAccountsLabel => 'Fi iyipada mu kọ';
+@override
+String get showAccountsLabel => 'Fi iyipada mu kọ';
 
-  @override
-  String get showMenuTooltip => 'Fi Meniu mu kọ';
+@override
+String get showMenuTooltip => 'Fi Meniu mu kọ';
 
-  @override
-  String get signedInLabel => 'Ọ̀nà';
+@override
+String get signedInLabel => 'Ọ̀nà';
 
+@override
+String get tabLabelRaw => r'Àwọn tabin $tabIndex lati $tabCount';
+  
   @override
-  String get tabLabelRaw => r'Àwọn tabin $tabIndex lati $tabCount';
+TimeOfDayFormat get timeOfDayFormatRaw => TimeOfDayFormat.h_colon_mm_space_a;
 
-  @override
-  TimeOfDayFormat get timeOfDayFormatRaw => TimeOfDayFormat.h_colon_mm_space_a;
+@override
+String get timePickerHourModeAnnouncement => 'Tuntun waqtu lọ';
 
-  @override
-  String get timePickerHourModeAnnouncement => 'Tuntun waqtu lọ';
+@override
+String get timePickerMinuteModeAnnouncement => 'Tuntun daɗi minti';
 
-  @override
-  String get timePickerMinuteModeAnnouncement => 'Tuntun daɗi minti';
+@override
+String get viewLicensesButtonLabel => 'WO NIKI';
 
-  @override
-  String get viewLicensesButtonLabel => 'WO NIKI';
+@override
+List<String> get narrowWeekdays => const <String>['L', 'L', 'A', 'O', 'Ọ', 'Ẹ', 'Ẹ'];
 
-  @override
-  List<String> get narrowWeekdays => const <String>['L', 'L', 'A', 'O', 'Ọ', 'Ẹ', 'Ẹ'];
+@override
+int get firstDayOfWeekIndex => 0;
 
-  @override
-  int get firstDayOfWeekIndex => 0;
+static const LocalizationsDelegate<MaterialLocalizations> delegate =
+_YoMaterialLocalizationsDelegate();
 
-  static const LocalizationsDelegate<MaterialLocalizations> delegate =
-      _YoMaterialLocalizationsDelegate();
+@override
+String get calendarModeButtonLabel => 'Tọ́rọ̀ kálẹ̀ndà';
 
-  @override
-  String get calendarModeButtonLabel => 'Tọ́rọ̀ kálẹ̀ndà';
+@override
+String get dateHelpText => 'mm/dd/yyyy';
 
-  @override
-  String get dateHelpText => 'mm/dd/yyyy';
+@override
+String get dateInputLabel => 'Firanṣẹ̀ Ọjọ́';
 
-  @override
-  String get dateInputLabel => 'Firanṣẹ̀ Ọjọ́';
+@override
+String get dateOutOfRangeLabel => 'Nínú iwọ̀ lọ́wọ́';
 
-  @override
-  String get dateOutOfRangeLabel => 'Nínú iwọ̀ lọ́wọ́';
+@override
+String get datePickerHelpText => 'WÁSÍ';
 
-  @override
-  String get datePickerHelpText => 'WÁSÍ';
+@override
+String get dateRangeEndDateSemanticLabelRaw => r'Ọjọ́ tuntun to ṣà';
 
-  @override
-  String get dateRangeEndDateSemanticLabelRaw => r'Ọjọ́ tuntun to ṣà';
-
-  @override
-  String get dateRangeEndLabel => 'Ọjọ́ tuntun to ṣà';
+@override
+String get dateRangeEndLabel => 'Ọjọ́ tuntun to ṣà';
 
-  @override
-  String get dateRangePickerHelpText => 'WÁSÍ ÌGBÀ';
+@override
+String get dateRangePickerHelpText => 'WÁSÍ ÌGBÀ';
 
-  @override
-  String get dateRangeStartDateSemanticLabelRaw => 'Ọjọ́ tuntun ti dá';
+@override
+String get dateRangeStartDateSemanticLabelRaw => 'Ọjọ́ tuntun ti dá';
 
-  @override
-  String get dateRangeStartLabel => 'Ọjọ́ tuntun ti dá';
+@override
+String get dateRangeStartLabel => 'Ọjọ́ tuntun ti dá';
 
-  @override
-  String get dateSeparator => '/';
+@override
+String get dateSeparator => '/';
 
-  @override
-  String get dialModeButtonLabel => 'Tọ́rọ̀ wakati';
+@override
+String get dialModeButtonLabel => 'Tọ́rọ̀ wakati';
 
-  @override
-  String get inputDateModeButtonLabel => 'Tọ́rọ̀ firanṣẹ̀ ọjọ́';
+@override
+String get inputDateModeButtonLabel => 'Tọ́rọ̀ firanṣẹ̀ ọjọ́';
 
-  @override
-  String get inputTimeModeButtonLabel => 'Tọ́rọ̀ wakati bayi lọ́wọ́';
+@override
+String get inputTimeModeButtonLabel => 'Tọ́rọ̀ wakati bayi lọ́wọ́';
 
-  @override
-  String get invalidDateFormatLabel => 'Akọ́kọ́tọ́ tó jẹ́kúnrin';
+@override
+String get invalidDateFormatLabel => 'Akọ́kọ́tọ́ tó jẹ́kúnrin';
 
-  @override
-  String get invalidDateRangeLabel => 'Àmì jẹ́ káàkiri lẹ́yìn ilé';
+@override
+String get invalidDateRangeLabel => 'Àmì jẹ́ káàkiri lẹ́yìn ilé';
 
-  @override
-  String get invalidTimeLabel => 'Akọ́kọ́tọ́ àkójọ ìwádìí';
+@override
+String get invalidTimeLabel => 'Akọ́kọ́tọ́ àkójọ ìwádìí';
 
-  @override
-  String get licensesPackageDetailTextOther => r'$licenseCount àwọn níkí';
+@override
+String get licensesPackageDetailTextOther => r'$licenseCount àwọn níkí';
 
-  @override
-  String get saveButtonLabel => 'TÙN DÁRA';
+@override
+String get saveButtonLabel => 'TÙN DÁRA';
 
-  @override
-  String get selectYearSemanticsLabel => 'Fọ́ọ̀ shẹ́kàrà';
+@override
+String get selectYearSemanticsLabel => 'Fọ́ọ̀ shẹ́kàrà';
 
-  @override
-  String get timePickerDialHelpText => 'WÁSÍ WÁKÀTÌ';
+@override
+String get timePickerDialHelpText => 'WÁSÍ WÁKÀTÌ';
 
-  @override
-  String get timePickerHourLabel => 'Wákàtì àṣà';
+@override
+String get timePickerHourLabel => 'Wákàtì àṣà';
 
-  @override
-  String get timePickerInputHelpText => 'Shìgárà wákàtì';
+@override
+String get timePickerInputHelpText => 'Shìgárà wákàtì';
 
-  @override
-  String get timePickerMinuteLabel => 'Mìntì';
+@override
+String get timePickerMinuteLabel => 'Mìntì';
 
-  @override
-  String get unspecifiedDate => 'Ọjọ̀kúnrin';
+@override
+String get unspecifiedDate => 'Ọjọ̀kúnrin';
 
-  @override
-  String get unspecifiedDateRange => 'Ọjọ̀kúnrin àdáyọ̀';
+@override
+String get unspecifiedDateRange => 'Ọjọ̀kúnrin àdáyọ̀';
 
-  @override
-  String get keyboardKeyAlt => 'Alt';
+@override
+String get keyboardKeyAlt => 'Alt';
 
-  @override
-  String get keyboardKeyAltGraph => 'AltGraph';
+@override
+String get keyboardKeyAltGraph => 'AltGraph';
 
-  @override
-  String get keyboardKeyBackspace => 'Báckspàcè';
+@override
+String get keyboardKeyBackspace => 'Báckspàcè';
 
-  @override
-  String get keyboardKeyCapsLock => 'Caps Lock';
+@override
+String get keyboardKeyCapsLock => 'Caps Lock';
 
-  @override
-  String get keyboardKeyChannelDown => 'Báyàkàmmàlàsàké';
+@override
+String get keyboardKeyChannelDown => 'Báyàkàmmàlàsàké';
 
-  @override
-  String get keyboardKeyChannelUp => 'Yíkàmmàlàsàké';
+@override
+String get keyboardKeyChannelUp => 'Yíkàmmàlàsàké';
 
-  @override
-  String get keyboardKeyControl => 'Kọ́ntírọ̀l';
+@override
+String get keyboardKeyControl => 'Kọ́ntírọ̀l';
 
-  @override
-  String get keyboardKeyDelete => 'Shápè';
+@override
+String get keyboardKeyDelete => 'Shápè';
 
-  @override
-  String get keyboardKeyEject => 'Èjẹ̀tì';
+@override
+String get keyboardKeyEject => 'Èjẹ̀tì';
 
-  @override
-  String get keyboardKeyEnd => 'Tàbí';
+@override
+String get keyboardKeyEnd => 'Tàbí';
 
-  @override
-  String get keyboardKeyEscape => 'Tòkè';
+@override
+String get keyboardKeyEscape => 'Tòkè';
 
   @override
-  String get keyboardKeyFn => 'Fn';
+String get keyboardKeyFn => 'Fn';
 
-  @override
-  String get keyboardKeyHome => 'Ile';
+@override
+String get keyboardKeyHome => 'Ile';
 
-  @override
-  String get keyboardKeyInsert => 'Fi sori';
+@override
+String get keyboardKeyInsert => 'Fi sori';
 
-  @override
-  String get keyboardKeyMeta => 'Meta';
+@override
+String get keyboardKeyMeta => 'Meta';
 
-  @override
-  String get keyboardKeyMetaMacOs => 'Amfani pẹlu Command';
+@override
+String get keyboardKeyMetaMacOs => 'Amfani pẹlu Command';
 
-  @override
-  String get keyboardKeyMetaWindows => 'Windows';
+@override
+String get keyboardKeyMetaWindows => 'Windows';
 
   @override
   String get keyboardKeyNumLock => 'Num Lock';
@@ -750,50 +751,6 @@ class YoMaterialLocalizations extends GlobalMaterialLocalizations {
 
   @override
   String get scrimOnTapHintRaw => "Scrip on Tap";
-
-  @override
-  // TODO: implement collapsedHint
-  String get collapsedHint => "collapsedHint";
-
-  @override
-  // TODO: implement expandedHint
-  String get expandedHint => "expandedHint";
-
-  @override
-  // TODO: implement expansionTileCollapsedHint
-  String get expansionTileCollapsedHint => "expansionTileCollapsedHint";
-
-  @override
-  // TODO: implement expansionTileCollapsedTapHint
-  String get expansionTileCollapsedTapHint => "expansionTileCollapsedTapHint";
-
-  @override
-  // TODO: implement expansionTileExpandedHint
-  String get expansionTileExpandedHint => "expansionTileExpandedHint";
-
-  @override
-  // TODO: implement expansionTileExpandedTapHint
-  String get expansionTileExpandedTapHint => "expansionTileExpandedTapHint";
-
-  @override
-  // TODO: implement scanTextButtonLabel
-  String get scanTextButtonLabel => "scanTextButtonLabel";
-
-  @override
-  // TODO: implement lookUpButtonLabel
-  String get lookUpButtonLabel => "lookUpButtonLabel";
-
-  @override
-  // TODO: implement menuDismissLabel
-  String get menuDismissLabel => "menuDismissLabel";
-
-  @override
-  // TODO: implement searchWebButtonLabel
-  String get searchWebButtonLabel => "searchWebButtonLabel";
-
-  @override
-  // TODO: implement shareButtonLabel
-  String get shareButtonLabel => "shareButtonLabel";
 }
 
 /// Cupertino Support
@@ -864,158 +821,138 @@ class YoCupertinoLocalizations extends GlobalCupertinoLocalizations {
     required super.singleDigitSecondFormat,
   });
 
-  @override
-  String get alertDialogLabel => 'Àdàkárò';
+@override
+String get alertDialogLabel => 'Àdàkárò';
 
-  @override
-  String get anteMeridiemAbbreviation => 'AM';
+@override
+String get anteMeridiemAbbreviation => 'AM';
 
-  @override
-  String get copyButtonLabel => 'Kòpy';
+@override
+String get copyButtonLabel => 'Kòpy';
 
-  @override
-  String get cutButtonLabel => 'Kọ́t';
+@override
+String get cutButtonLabel => 'Kọ́t';
 
-  @override
-  String get datePickerDateOrderString => 'mdy';
+@override
+String get datePickerDateOrderString => 'mdy';
 
-  @override
-  String get datePickerDateTimeOrderString => 'date_time_dayPeriod';
+@override
+String get datePickerDateTimeOrderString => 'date_time_dayPeriod';
 
-  @override
-  String? get datePickerHourSemanticsLabelFew => null;
+@override
+String? get datePickerHourSemanticsLabelFew => null;
 
-  @override
-  String? get datePickerHourSemanticsLabelMany => null;
+@override
+String? get datePickerHourSemanticsLabelMany => null;
 
-  @override
-  String? get datePickerHourSemanticsLabelOne => r"$hour o'clock";
+@override
+String? get datePickerHourSemanticsLabelOne => r"$hour o'clock";
 
-  @override
-  String get datePickerHourSemanticsLabelOther => r"$hour o'clock";
+@override
+String get datePickerHourSemanticsLabelOther => r"$hour o'clock";
 
-  @override
-  String? get datePickerHourSemanticsLabelTwo => null;
+@override
+String? get datePickerHourSemanticsLabelTwo => null;
 
-  @override
-  String? get datePickerHourSemanticsLabelZero => null;
+@override
+String? get datePickerHourSemanticsLabelZero => null;
 
-  @override
-  String? get datePickerMinuteSemanticsLabelFew => null;
+@override
+String? get datePickerMinuteSemanticsLabelFew => null;
 
-  @override
-  String? get datePickerMinuteSemanticsLabelMany => null;
+@override
+String? get datePickerMinuteSemanticsLabelMany => null;
 
-  @override
-  String? get datePickerMinuteSemanticsLabelOne => '1 wakati';
+@override
+String? get datePickerMinuteSemanticsLabelOne => '1 wakati';
 
-  @override
-  String get datePickerMinuteSemanticsLabelOther => r'$minute wakati';
+@override
+String get datePickerMinuteSemanticsLabelOther => r'$minute wakati';
 
-  @override
-  String? get datePickerMinuteSemanticsLabelTwo => null;
+@override
+String? get datePickerMinuteSemanticsLabelTwo => null;
 
-  @override
-  String? get datePickerMinuteSemanticsLabelZero => null;
+@override
+String? get datePickerMinuteSemanticsLabelZero => null;
 
-  @override
-  String get modalBarrierDismissLabel => 'Búta';
+@override
+String get modalBarrierDismissLabel => 'Búta';
 
-  @override
-  String get pasteButtonLabel => 'Tẹ́ẹ́';
+@override
+String get pasteButtonLabel => 'Tẹ́ẹ́';
 
-  @override
-  String get postMeridiemAbbreviation => 'PM';
+@override
+String get postMeridiemAbbreviation => 'PM';
 
-  @override
-  String get searchTextFieldPlaceholderLabel => 'Wúró àtúntà';
+@override
+String get searchTextFieldPlaceholderLabel => 'Wúró àtúntà';
 
-  @override
-  String get selectAllButtonLabel => 'Fírànsé gbógbo';
+@override
+String get selectAllButtonLabel => 'Fírànsé gbógbo';
 
-  @override
-  String get tabSemanticsLabelRaw => r'Tab $tabIndex nínú $tabCount';
+@override
+String get tabSemanticsLabelRaw => r'Tab $tabIndex nínú $tabCount';
 
-  @override
-  String? get timerPickerHourLabelFew => null;
+@override
+String? get timerPickerHourLabelFew => null;
 
-  @override
-  String? get timerPickerHourLabelMany => null;
+@override
+String? get timerPickerHourLabelMany => null;
 
-  @override
-  String? get timerPickerHourLabelOne => 'òǹdì';
+@override
+String? get timerPickerHourLabelOne => 'òǹdì';
 
-  @override
-  String get timerPickerHourLabelOther => 'òǹdì';
+@override
+String get timerPickerHourLabelOther => 'òǹdì';
 
-  @override
-  String? get timerPickerHourLabelTwo => null;
+@override
+String? get timerPickerHourLabelTwo => null;
 
-  @override
-  String? get timerPickerHourLabelZero => null;
+@override
+String? get timerPickerHourLabelZero => null;
 
-  @override
-  String? get timerPickerMinuteLabelFew => null;
+@override
+String? get timerPickerMinuteLabelFew => null;
 
-  @override
-  String? get timerPickerMinuteLabelMany => null;
+@override
+String? get timerPickerMinuteLabelMany => null;
 
-  @override
-  String? get timerPickerMinuteLabelOne => 'wakati.';
+@override
+String? get timerPickerMinuteLabelOne => 'wakati.';
 
-  @override
-  String get timerPickerMinuteLabelOther => 'wakati.';
+@override
+String get timerPickerMinuteLabelOther => 'wakati.';
 
-  @override
-  String? get timerPickerMinuteLabelTwo => null;
+@override
+String? get timerPickerMinuteLabelTwo => null;
 
-  @override
-  String? get timerPickerMinuteLabelZero => null;
+@override
+String? get timerPickerMinuteLabelZero => null;
 
-  @override
-  String? get timerPickerSecondLabelFew => null;
+@override
+String? get timerPickerSecondLabelFew => null;
 
-  @override
-  String? get timerPickerSecondLabelMany => null;
+@override
+String? get timerPickerSecondLabelMany => null;
 
-  @override
-  String? get timerPickerSecondLabelOne => 'dákìkà.';
+@override
+String? get timerPickerSecondLabelOne => 'dákìkà.';
 
-  @override
-  String get timerPickerSecondLabelOther => 'dákìkà.';
+@override
+String get timerPickerSecondLabelOther => 'dákìkà.';
 
-  @override
-  String? get timerPickerSecondLabelTwo => null;
+@override
+String? get timerPickerSecondLabelTwo => null;
 
-  @override
-  String? get timerPickerSecondLabelZero => null;
+@override
+String? get timerPickerSecondLabelZero => null;
 
-  @override
-  String get todayLabel => 'Oyọ';
+@override
+String get todayLabel => 'Oyọ';
 
   static const LocalizationsDelegate<CupertinoLocalizations> delegate =
       _YoCupertinoLocalizationsDelegate();
 
   @override
   String get noSpellCheckReplacementsLabel => "";
-
-  @override
-  // TODO: implement clearButtonLabel
-  String get clearButtonLabel => "clearButtonLabel";
-
-  @override
-  // TODO: implement lookUpButtonLabel
-  String get lookUpButtonLabel => "lookUpButtonLabel";
-
-  @override
-  // TODO: implement menuDismissLabel
-  String get menuDismissLabel => "menuDismissLabel";
-
-  @override
-  // TODO: implement searchWebButtonLabel
-  String get searchWebButtonLabel => "searchWebButtonLabel";
-
-  @override
-  // TODO: implement shareButtonLabel
-  String get shareButtonLabel => "shareButtonLabel";
 }
diff --git a/lib/src/screens/settings/security_backup_page.dart b/lib/src/screens/settings/security_backup_page.dart
index 1f0f58ad4..e559e9b15 100644
--- a/lib/src/screens/settings/security_backup_page.dart
+++ b/lib/src/screens/settings/security_backup_page.dart
@@ -1,5 +1,3 @@
-import 'dart:io';
-
 import 'package:cake_wallet/core/auth_service.dart';
 import 'package:cake_wallet/entities/pin_code_required_duration.dart';
 import 'package:cake_wallet/routes.dart';
@@ -60,7 +58,7 @@ class SecurityBackupPage extends BasePage {
                   .shouldRequireTOTP2FAForAllSecurityAndBackupSettings,
             ),
           ),
-          if (DeviceInfo.instance.isMobile || Platform.isMacOS || Platform.isLinux)
+          if (DeviceInfo.instance.isMobile)
             Observer(builder: (_) {
               return SettingsSwitcherCell(
                   title: S.current.settings_allow_biometrical_authentication,
diff --git a/lib/src/screens/settings/tor_page.dart b/lib/src/screens/settings/tor_page.dart
index 2f544be35..ae1ef1677 100644
--- a/lib/src/screens/settings/tor_page.dart
+++ b/lib/src/screens/settings/tor_page.dart
@@ -146,7 +146,7 @@ class ConnectScreen extends StatelessWidget {
           ElevatedButton(
             onPressed: connect,
             style: ElevatedButton.styleFrom(
-              // primary: Colors.blue,
+              primary: Colors.blue,
               padding: EdgeInsets.symmetric(horizontal: 40, vertical: 15),
               shape: RoundedRectangleBorder(
                 borderRadius: BorderRadius.circular(30),
@@ -211,7 +211,7 @@ class DisconnectScreen extends StatelessWidget {
           ElevatedButton(
             onPressed: disconnect,
             style: ElevatedButton.styleFrom(
-              // primary: Colors.red,
+              primary: Colors.red,
               padding: EdgeInsets.symmetric(horizontal: 40, vertical: 15),
               shape: RoundedRectangleBorder(
                 borderRadius: BorderRadius.circular(30),
diff --git a/lib/src/widgets/validable_annotated_editable_text.dart b/lib/src/widgets/validable_annotated_editable_text.dart
index 7ea928d8a..6c3fc4f16 100644
--- a/lib/src/widgets/validable_annotated_editable_text.dart
+++ b/lib/src/widgets/validable_annotated_editable_text.dart
@@ -1,14 +1,8 @@
+import 'package:cake_wallet/core/seed_validator.dart';
+import 'package:cw_core/wallet_type.dart';
 import 'package:flutter/material.dart';
 
-
-extension Compare<T> on Comparable<T> {
-  bool operator <=(T other) => compareTo(other) <= 0;
-  bool operator >=(T other) => compareTo(other) >= 0;
-  bool operator <(T other) => compareTo(other) < 0;
-  bool operator >(T other) => compareTo(other) > 0;
-}
-
-class Annotation implements Comparable<Annotation> {
+class Annotation extends Comparable<Annotation> {
   Annotation({required this.range, required this.style});
 
   final TextRange range;
@@ -18,7 +12,7 @@ class Annotation implements Comparable<Annotation> {
   int compareTo(Annotation other) => range.start.compareTo(other.range.start);
 }
 
-class TextAnnotation implements Comparable<TextAnnotation> {
+class TextAnnotation extends Comparable<TextAnnotation> {
   TextAnnotation({required this.text, required this.style});
 
   final TextStyle style;
diff --git a/lib/view_model/auth_view_model.dart b/lib/view_model/auth_view_model.dart
index 0e6590845..e50f4db0c 100644
--- a/lib/view_model/auth_view_model.dart
+++ b/lib/view_model/auth_view_model.dart
@@ -1,6 +1,5 @@
 import 'dart:async';
 import 'package:flutter/material.dart';
-import 'package:flutter_local_authentication/flutter_local_authentication.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 import 'package:mobx/mobx.dart';
 import 'package:cake_wallet/view_model/auth_state.dart';
@@ -106,14 +105,16 @@ abstract class AuthViewModelBase with Store {
 
   @action
   Future<void> biometricAuth() async {
-    final _flutterLocalAuthenticationPlugin = FlutterLocalAuthentication();
-
     try {
-      final authenticated = await _flutterLocalAuthenticationPlugin.authenticate();
-      if (!authenticated) {
-        throw Exception('Biometric authentication failed');
+      final canBiometricAuth = await _biometricAuth.canCheckBiometrics();
+
+      if (canBiometricAuth) {
+        final isAuthenticated = await _biometricAuth.isAuthenticated();
+
+        if (isAuthenticated) {
+          state = ExecutedSuccessfullyState();
+        }
       }
-      state = ExecutedSuccessfullyState();
     } catch (e) {
       state = FailureState(e.toString());
     }
diff --git a/pubspec_base.yaml b/pubspec_base.yaml
index e1022864c..3ec3e7978 100644
--- a/pubspec_base.yaml
+++ b/pubspec_base.yaml
@@ -33,8 +33,8 @@ dependencies:
   dio: ^4.0.6
   hive: ^2.2.3
   hive_flutter: ^1.1.0
+  local_auth: ^2.1.0
   local_auth_android: 1.0.21
-  flutter_local_authentication: ^1.2.0
   package_info: ^2.0.0
   #package_info_plus: ^1.4.2
   devicelocale:
diff --git a/pubspec_description.yaml b/pubspec_description.yaml
index b51fe96d6..ebb6bf001 100644
--- a/pubspec_description.yaml
+++ b/pubspec_description.yaml
@@ -4,4 +4,4 @@ version: 0.0.0
 publish_to: none
 
 environment:
-  sdk: ">=3.1.0 <4.0.0"
\ No newline at end of file
+  sdk: ">=2.17.5 <3.0.0"
\ No newline at end of file