From d5aba0e7d15fb31dc8f824d669b00e17d9cb7f95 Mon Sep 17 00:00:00 2001
From: poka <poka@p2p.legal>
Date: Mon, 22 Nov 2021 18:45:59 +0100
Subject: [PATCH] Fix reload bugs when create or delete all wallets; Fix bug
 when changing chest secret code

---
 lib/models/my_wallets.dart                    |  9 ++++--
 lib/screens/myWallets/change_pin.dart         | 31 +++++++++++++++++++
 lib/screens/myWallets/chest_options.dart      |  6 +++-
 .../myWallets/confirm_wallet_storage.dart     | 12 +++----
 lib/screens/settings.dart                     |  4 +--
 5 files changed, 50 insertions(+), 12 deletions(-)

diff --git a/lib/models/my_wallets.dart b/lib/models/my_wallets.dart
index 3edd56b7..cf953499 100644
--- a/lib/models/my_wallets.dart
+++ b/lib/models/my_wallets.dart
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
 import 'dart:async';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/wallet_data.dart';
+import 'package:gecko/screens/home.dart';
 
 class MyWalletsProvider with ChangeNotifier {
   List<WalletData> listWallets = [];
@@ -71,9 +72,13 @@ class MyWalletsProvider with ChangeNotifier {
         await walletBox.clear();
         await chestBox.clear();
         await configBox.delete('defaultWallet');
-        rebuildWidget();
+        // await Future.delayed(const Duration(milliseconds: 50));
+        // notifyListeners();
 
-        Navigator.pop(context);
+        await Navigator.of(context).pushNamedAndRemoveUntil(
+          '/',
+          ModalRoute.withName('/'),
+        );
       }
       return 0;
     } catch (e) {
diff --git a/lib/screens/myWallets/change_pin.dart b/lib/screens/myWallets/change_pin.dart
index 49a9b746..5abfca40 100644
--- a/lib/screens/myWallets/change_pin.dart
+++ b/lib/screens/myWallets/change_pin.dart
@@ -49,6 +49,13 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier {
         body: Center(
           child: SafeArea(
             child: Column(children: <Widget>[
+              StatefulWrapper(
+                onInit: () async {
+                  _newWalletFile =
+                      await _changePin.changePin(walletProvider.pinCode);
+                },
+                child: Container(),
+              ),
               const SizedBox(height: 80),
               Text(
                 'Choisissez un code secret autogénéré :',
@@ -112,3 +119,27 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier {
     );
   }
 }
+
+class StatefulWrapper extends StatefulWidget {
+  final Function onInit;
+  final Widget child;
+  const StatefulWrapper({Key key, @required this.onInit, @required this.child})
+      : super(key: key);
+  @override
+  _StatefulWrapperState createState() => _StatefulWrapperState();
+}
+
+class _StatefulWrapperState extends State<StatefulWrapper> {
+  @override
+  void initState() {
+    if (widget.onInit != null) {
+      widget.onInit();
+    }
+    super.initState();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return widget.child;
+  }
+}
diff --git a/lib/screens/myWallets/chest_options.dart b/lib/screens/myWallets/chest_options.dart
index dfae9b70..e0c1d1c3 100644
--- a/lib/screens/myWallets/chest_options.dart
+++ b/lib/screens/myWallets/chest_options.dart
@@ -46,7 +46,7 @@ class ChestOptions extends StatelessWidget {
               key: const Key('changePin'),
               onTap: () async {
                 // await _chestProvider.changePin(context, cesiumWallet);
-                walletProvider.pinCode = await Navigator.push(
+                String pinResult = await Navigator.push(
                   context,
                   MaterialPageRoute(
                     builder: (context) {
@@ -57,6 +57,10 @@ class ChestOptions extends StatelessWidget {
                     },
                   ),
                 );
+
+                if (pinResult != null) {
+                  walletProvider.pinCode = pinResult;
+                }
               },
               child: SizedBox(
                   height: 50,
diff --git a/lib/screens/myWallets/confirm_wallet_storage.dart b/lib/screens/myWallets/confirm_wallet_storage.dart
index 68615612..ef743245 100644
--- a/lib/screens/myWallets/confirm_wallet_storage.dart
+++ b/lib/screens/myWallets/confirm_wallet_storage.dart
@@ -137,7 +137,7 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
                             onPressed: (_generateWalletProvider
                                         .isAskedWordValid &&
                                     walletName.text != '')
-                                ? () {
+                                ? () async {
                                     _generateWalletProvider.storeHDWChest(
                                         generatedWallet,
                                         walletName.text,
@@ -149,16 +149,16 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
                                     _myWalletProvider.listWallets =
                                         _myWalletProvider
                                             .readAllWallets(_currentChest);
-                                    scheduleMicrotask(() {
-                                      _walletOptions.reloadBuild();
-                                      _myWalletProvider.rebuildWidget();
-                                    });
+                                    await Future.delayed(
+                                        const Duration(milliseconds: 50));
+                                    _myWalletProvider.rebuildWidget();
                                     Navigator.pushAndRemoveUntil(context,
                                         MaterialPageRoute(builder: (context) {
                                       return UnlockingWallet(
                                         wallet:
                                             _myWalletProvider.getDefaultWallet(
-                                                configBox.get('currentChest')),
+                                          configBox.get('currentChest'),
+                                        ),
                                         action: "mywallets",
                                       );
                                     }), ModalRoute.withName('/'));
diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart
index c2b9bf89..4934d675 100644
--- a/lib/screens/settings.dart
+++ b/lib/screens/settings.dart
@@ -94,9 +94,7 @@ class SettingsScreen extends StatelessWidget {
                           ),
                           onPressed: () async => {
                                 log.i('Suppression de tous les wallets'),
-                                await _myWallets
-                                    .deleteAllWallet(context)
-                                    .then((v) => _homeProvider.rebuildWidget())
+                                await _myWallets.deleteAllWallet(context)
                               },
                           child: const Text("EFFACER TOUS MES PORTEFEUILLES",
                               style: TextStyle(fontSize: 20)))))),
-- 
GitLab