From 8301008d07822a41c42f96b4cadb4969c3dff53d Mon Sep 17 00:00:00 2001
From: poka <poka@p2p.legal>
Date: Mon, 17 Mar 2025 23:40:05 +0100
Subject: [PATCH] fix 5.dart mnemonic Null check operator used on a null value

---
 lib/providers/generate_wallets.dart |  5 +-
 lib/screens/onBoarding/5.dart       | 88 +++++++++++++++--------------
 2 files changed, 49 insertions(+), 44 deletions(-)

diff --git a/lib/providers/generate_wallets.dart b/lib/providers/generate_wallets.dart
index 20c285ee..3218d721 100644
--- a/lib/providers/generate_wallets.dart
+++ b/lib/providers/generate_wallets.dart
@@ -150,8 +150,9 @@ class GenerateWalletsProvider with ChangeNotifier {
     notifyListeners();
   }
 
-  Future<List<String>> generateWordList(BuildContext context) async {
+  Future<List<String>?> generateWordList(BuildContext context) async {
     final sub = Provider.of<SubstrateSdk>(context, listen: false);
+    if (!sub.sdkReady) return null;
 
     generatedMnemonic = await sub.generateMnemonic(lang: appLang);
     List<String> wordsList = [];
@@ -328,9 +329,11 @@ class GenerateWalletsProvider with ChangeNotifier {
   }
 
   Future<bool> scanRootBalance(SubstrateSdk sub, int currentChestNumber, String pinCode) async {
+    if (sub.currencyParameters['ss58'] == null || generatedMnemonic == null) return false;
     final addressData =
         await sub.sdk.api.keyring.addressFromMnemonic(sub.currencyParameters['ss58']!, cryptoType: CryptoType.sr25519, mnemonic: generatedMnemonic!);
 
+    if (addressData.address == null) return false;
     final balance = await sub.getBalance(addressData.address!).timeout(
           const Duration(seconds: 1),
           onTimeout: () => {},
diff --git a/lib/screens/onBoarding/5.dart b/lib/screens/onBoarding/5.dart
index 0c347dbe..b83780fc 100644
--- a/lib/screens/onBoarding/5.dart
+++ b/lib/screens/onBoarding/5.dart
@@ -32,6 +32,8 @@ class OnboardingStepFive extends StatefulWidget {
 class _ChooseChestState extends State<OnboardingStepFive> {
   List<String>? mnemonicList;
   bool isLoading = false;
+  final generateWalletProvider = Provider.of<GenerateWalletsProvider>(homeContext, listen: false);
+  bool get isMnemonicGenerated => generateWalletProvider.generatedMnemonic != null;
 
   @override
   void initState() {
@@ -40,11 +42,10 @@ class _ChooseChestState extends State<OnboardingStepFive> {
   }
 
   Future<void> _generateMnemonicList() async {
-    final generateWalletProvider = Provider.of<GenerateWalletsProvider>(context, listen: false);
     final list = await generateWalletProvider.generateWordList(context);
     if (mounted) {
       setState(() {
-        mnemonicList = list.cast<String>();
+        mnemonicList = list?.cast<String>();
         isLoading = false;
       });
     }
@@ -140,8 +141,6 @@ class _ChooseChestState extends State<OnboardingStepFive> {
 
   @override
   Widget build(BuildContext context) {
-    final generateWalletProvider = Provider.of<GenerateWalletsProvider>(context, listen: false);
-
     return Scaffold(
       backgroundColor: backgroundColor,
       appBar: GeckoAppBar('yourMnemonic'.tr()),
@@ -171,10 +170,12 @@ class _ChooseChestState extends State<OnboardingStepFive> {
                         backgroundColor: orangeC,
                         elevation: 1,
                       ),
-                      onPressed: () {
-                        Clipboard.setData(ClipboardData(text: generateWalletProvider.generatedMnemonic!));
-                        snackCopySeed(context);
-                      },
+                      onPressed: isMnemonicGenerated
+                          ? () {
+                              Clipboard.setData(ClipboardData(text: generateWalletProvider.generatedMnemonic!));
+                              snackCopySeed(context);
+                            }
+                          : null,
                       child: Row(children: <Widget>[
                         Image.asset(
                           'assets/walletOptions/copy-white.png',
@@ -252,44 +253,45 @@ class _ChooseChestState extends State<OnboardingStepFive> {
       ),
     );
   }
-}
 
-Widget nextButton(BuildContext context, String text, bool isFast, bool skipIntro) {
-  final generateWalletProvider = Provider.of<GenerateWalletsProvider>(context, listen: false);
-  final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
-  return ScaledSizedBox(
-    width: 350,
-    height: 55,
-    child: ElevatedButton(
-      key: keyGoNext,
-      style: ElevatedButton.styleFrom(
-        foregroundColor: Colors.white,
-        backgroundColor: orangeC,
-        elevation: 2,
-        padding: const EdgeInsets.symmetric(vertical: 8),
-        shape: RoundedRectangleBorder(
-          borderRadius: BorderRadius.circular(16),
+  Widget nextButton(BuildContext context, String text, bool isFast, bool skipIntro) {
+    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+    return ScaledSizedBox(
+      width: 350,
+      height: 55,
+      child: ElevatedButton(
+        key: keyGoNext,
+        style: ElevatedButton.styleFrom(
+          foregroundColor: Colors.white,
+          backgroundColor: orangeC,
+          elevation: 2,
+          padding: const EdgeInsets.symmetric(vertical: 8),
+          shape: RoundedRectangleBorder(
+            borderRadius: BorderRadius.circular(16),
+          ),
+          shadowColor: orangeC.withValues(alpha: 0.3),
         ),
-        shadowColor: orangeC.withValues(alpha: 0.3),
-      ),
-      onPressed: () {
-        generateWalletProvider.nbrWord = generateWalletProvider.getRandomInt();
-        generateWalletProvider.nbrWordAlpha = generateWalletProvider.intToString(generateWalletProvider.nbrWord + 1);
-        myWalletProvider.mnemonic = generateWalletProvider.generatedMnemonic!;
+        onPressed: isMnemonicGenerated
+            ? () {
+                generateWalletProvider.nbrWord = generateWalletProvider.getRandomInt();
+                generateWalletProvider.nbrWordAlpha = generateWalletProvider.intToString(generateWalletProvider.nbrWord + 1);
+                myWalletProvider.mnemonic = generateWalletProvider.generatedMnemonic!;
 
-        Navigator.push(
-          context,
-          FaderTransition(page: OnboardingStepSix(generatedMnemonic: generateWalletProvider.generatedMnemonic, skipIntro: skipIntro), isFast: true),
-        );
-      },
-      child: Text(
-        text,
-        style: scaledTextStyle(
-          fontSize: 18,
-          fontWeight: FontWeight.w500,
-          color: Colors.white,
+                Navigator.push(
+                  context,
+                  FaderTransition(page: OnboardingStepSix(generatedMnemonic: generateWalletProvider.generatedMnemonic, skipIntro: skipIntro), isFast: true),
+                );
+              }
+            : null,
+        child: Text(
+          text,
+          style: scaledTextStyle(
+            fontSize: 18,
+            fontWeight: FontWeight.w500,
+            color: Colors.white,
+          ),
         ),
       ),
-    ),
-  );
+    );
+  }
 }
-- 
GitLab