From 4a6bc55fc34c03aa92c96b6a735c7db184f1997d Mon Sep 17 00:00:00 2001
From: poka <poka@p2p.legal>
Date: Tue, 9 Nov 2021 04:22:04 +0100
Subject: [PATCH] WIP: Can change chest

---
 assets/chests/0.png                    | Bin 0 -> 6433 bytes
 lib/globals.dart                       |   3 +-
 lib/main.dart                          |   6 +-
 lib/models/changePin.dart              |  11 +-
 lib/models/chestData.dart              |  20 ++
 lib/models/chestData.g.dart            |  44 ++++
 lib/models/generateWallets.dart        |  19 +-
 lib/models/history.dart                |   2 +-
 lib/models/myWallets.dart              |   8 +-
 lib/models/walletOptions.dart          |   4 +-
 lib/screens/myWallets/changePin.dart   |   4 +-
 lib/screens/myWallets/chooseChest.dart |  78 ++++++
 lib/screens/myWallets/walletsHome.dart | 317 ++++++++++++++-----------
 pubspec.yaml                           |   1 +
 test_driver/app_test.dart              |   6 +
 15 files changed, 363 insertions(+), 160 deletions(-)
 create mode 100755 assets/chests/0.png
 create mode 100644 lib/models/chestData.dart
 create mode 100644 lib/models/chestData.g.dart
 create mode 100644 lib/screens/myWallets/chooseChest.dart

diff --git a/assets/chests/0.png b/assets/chests/0.png
new file mode 100755
index 0000000000000000000000000000000000000000..71dcb9b105bb34f1986d51e4d3486c2d9a9bc14c
GIT binary patch
literal 6433
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
BKcxTw

literal 0
HcmV?d00001

diff --git a/lib/globals.dart b/lib/globals.dart
index 8953573a..6bb6c42b 100644
--- a/lib/globals.dart
+++ b/lib/globals.dart
@@ -1,5 +1,6 @@
 import 'dart:io';
 import 'package:flutter/material.dart';
+import 'package:gecko/models/chestData.dart';
 import 'package:gecko/models/walletData.dart';
 import 'package:hive/hive.dart';
 import 'package:logger/logger.dart';
@@ -14,7 +15,7 @@ SharedPreferences prefs;
 String endPointGVA;
 int ramSys;
 Box<WalletData> walletBox;
-Box chestBox;
+Box<ChestData> chestBox;
 Box configBox;
 
 // String cesiumPod = "https://g1.data.le-sou.org";
diff --git a/lib/main.dart b/lib/main.dart
index 2af5d1e5..5ed289e2 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -18,6 +18,7 @@ import 'package:flutter/services.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/cesiumPlus.dart';
 import 'package:gecko/models/changePin.dart';
+import 'package:gecko/models/chestData.dart';
 import 'package:gecko/models/generateWallets.dart';
 import 'package:gecko/models/history.dart';
 import 'package:gecko/models/home.dart';
@@ -52,8 +53,9 @@ Future<void> main() async {
   // Configure Hive and open boxes
   await Hive.initFlutter(appPath.path);
   Hive.registerAdapter(WalletDataAdapter());
+  Hive.registerAdapter(ChestDataAdapter());
   walletBox = await Hive.openBox<WalletData>("walletBox");
-  chestBox = await Hive.openBox("chestBox");
+  chestBox = await Hive.openBox<ChestData>("chestBox");
   configBox = await Hive.openBox("configBox");
 
   _walletsProvider.getDefaultWallet();
@@ -162,7 +164,7 @@ class Gecko extends StatelessWidget {
                 bodyText1: TextStyle(),
                 bodyText2: TextStyle(),
               ).apply(
-                bodyColor: Color(0xff855F2D),
+                bodyColor: Color(0xFF000000),
               ),
               colorScheme: ColorScheme.fromSwatch()
                   .copyWith(secondary: Colors.grey[850]),
diff --git a/lib/models/changePin.dart b/lib/models/changePin.dart
index 5af359a5..3c85b2ec 100644
--- a/lib/models/changePin.dart
+++ b/lib/models/changePin.dart
@@ -3,6 +3,7 @@ import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'dart:async';
 import 'package:gecko/globals.dart';
+import 'package:gecko/models/chestData.dart';
 
 class ChangePinProvider with ChangeNotifier {
   bool ischangedPin = false;
@@ -12,7 +13,7 @@ class ChangePinProvider with ChangeNotifier {
 
   Future<NewWallet> changePin(_name, _oldPin) async {
     try {
-      final _dewif = chestBox.get(0);
+      final _dewif = chestBox.get(configBox.get('currentChest')).dewif;
 
       NewWallet newWalletFile = await DubpRust.changeDewifPin(
         dewif: _dewif,
@@ -29,10 +30,12 @@ class ChangePinProvider with ChangeNotifier {
     }
   }
 
-  Future storeWallet(context, _name, NewWallet _newWalletFile) async {
-    chestBox.put(0, _newWalletFile.dewif);
+  Future storeNewPinChest(context, NewWallet _newWalletFile) async {
+    ChestData currentChest = chestBox.getAt(configBox.get('currentChest'));
+    currentChest.dewif = _newWalletFile.dewif;
+    // currentChest.name = _name;
+    chestBox.add(currentChest);
 
     Navigator.pop(context);
-    return _name;
   }
 }
diff --git a/lib/models/chestData.dart b/lib/models/chestData.dart
new file mode 100644
index 00000000..e506add0
--- /dev/null
+++ b/lib/models/chestData.dart
@@ -0,0 +1,20 @@
+import 'package:hive_flutter/hive_flutter.dart';
+
+part 'chestData.g.dart';
+
+@HiveType(typeId: 1)
+class ChestData extends HiveObject {
+  @HiveField(0)
+  String dewif;
+
+  @HiveField(2)
+  String name;
+
+  ChestData({this.dewif, this.name});
+
+  // representation of WalletData when debugging
+  @override
+  String toString() {
+    return this.name;
+  }
+}
diff --git a/lib/models/chestData.g.dart b/lib/models/chestData.g.dart
new file mode 100644
index 00000000..095f1822
--- /dev/null
+++ b/lib/models/chestData.g.dart
@@ -0,0 +1,44 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'chestData.dart';
+
+// **************************************************************************
+// TypeAdapterGenerator
+// **************************************************************************
+
+class ChestDataAdapter extends TypeAdapter<ChestData> {
+  @override
+  final int typeId = 1;
+
+  @override
+  ChestData read(BinaryReader reader) {
+    final numOfFields = reader.readByte();
+    final fields = <int, dynamic>{
+      for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
+    };
+    return ChestData(
+      dewif: fields[0] as String,
+      name: fields[2] as String,
+    );
+  }
+
+  @override
+  void write(BinaryWriter writer, ChestData obj) {
+    writer
+      ..writeByte(2)
+      ..writeByte(0)
+      ..write(obj.dewif)
+      ..writeByte(2)
+      ..write(obj.name);
+  }
+
+  @override
+  int get hashCode => typeId.hashCode;
+
+  @override
+  bool operator ==(Object other) =>
+      identical(this, other) ||
+      other is ChestDataAdapter &&
+          runtimeType == other.runtimeType &&
+          typeId == other.typeId;
+}
diff --git a/lib/models/generateWallets.dart b/lib/models/generateWallets.dart
index 8899751d..52fb9788 100644
--- a/lib/models/generateWallets.dart
+++ b/lib/models/generateWallets.dart
@@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:gecko/globals.dart';
+import 'package:gecko/models/chestData.dart';
 import 'package:gecko/models/walletData.dart';
 import 'package:pdf/pdf.dart';
 import 'package:pdf/widgets.dart' as pw;
@@ -40,11 +41,23 @@ class GenerateWalletsProvider with ChangeNotifier {
 
   void storeHDWChest(
       NewWallet _wallet, String _name, BuildContext context) async {
+    int chestNumber = chestBox.length;
     WalletData myWallet =
-        WalletData(chest: 0, number: 0, name: _name, derivation: 3);
+        WalletData(chest: chestNumber, number: 0, name: _name, derivation: 3);
+
+    String chestName;
+    if (chestNumber == 0) {
+      chestName = 'Coffre à Gecko';
+    } else {
+      chestName = 'Coffre à Gecko ${chestNumber + 1}';
+    }
     walletBox.add(myWallet);
-    chestBox.put(0, _wallet.dewif);
-    configBox.put('currentChest', 0);
+    ChestData thisChest = ChestData(
+      dewif: _wallet.dewif,
+      name: chestName,
+    );
+    chestBox.add(thisChest);
+    configBox.put('currentChest', chestNumber);
     // walletBox.get(1)
   }
 
diff --git a/lib/models/history.dart b/lib/models/history.dart
index 9be347cc..d6f78ac3 100644
--- a/lib/models/history.dart
+++ b/lib/models/history.dart
@@ -50,7 +50,7 @@ class HistoryProvider with ChangeNotifier {
 
   Future<String> pay(BuildContext context, String pinCode) async {
     // MyWalletsProvider _myWalletProvider = MyWalletsProvider();
-    String dewif = chestBox.get(0);
+    String dewif = chestBox.get(configBox.get('currentChest')).dewif;
     try {
       await DubpRust.simplePaymentFromTransparentAccount(
           accountIndex: defaultWallet.derivation,
diff --git a/lib/models/myWallets.dart b/lib/models/myWallets.dart
index 3cd63c49..664668f3 100644
--- a/lib/models/myWallets.dart
+++ b/lib/models/myWallets.dart
@@ -22,7 +22,7 @@ class MyWalletsProvider with ChangeNotifier {
       return false;
     }
 
-    final List _walletList = readAllWallets(0);
+    final List _walletList = readAllWallets(getCurrentChest());
 
     if (_walletList.isEmpty) {
       log.i('No wallets detected');
@@ -45,7 +45,7 @@ class MyWalletsProvider with ChangeNotifier {
 
   WalletData getWalletData(List<int> _id) {
     if (_id.isEmpty) return WalletData();
-    int _chest = _id[0];
+    int _chest = _id[getCurrentChest()];
     int _nbr = _id[1];
     var _targetedWallet;
 
@@ -63,7 +63,7 @@ class MyWalletsProvider with ChangeNotifier {
     MyWalletsProvider myWalletsProvider = MyWalletsProvider();
 
     if (configBox.get('defaultWallet') == null) {
-      configBox.put('defaultWallet', [0, 0]);
+      configBox.put('defaultWallet', [getCurrentChest(), 0]);
     }
 
     defaultWallet = myWalletsProvider
@@ -120,7 +120,7 @@ class MyWalletsProvider with ChangeNotifier {
   Future<void> generateNewDerivation(context, String _name) async {
     int _newDerivationNbr;
     int _newWalletNbr;
-    int _chest = 0;
+    int _chest = getCurrentChest();
     List<WalletData> _walletConfig = readAllWallets(_chest);
 
     if (_walletConfig.isEmpty) {
diff --git a/lib/models/walletOptions.dart b/lib/models/walletOptions.dart
index ba3da484..147d9a6d 100644
--- a/lib/models/walletOptions.dart
+++ b/lib/models/walletOptions.dart
@@ -76,7 +76,7 @@ class WalletOptionsProvider with ChangeNotifier {
       context, WalletData _wallet, String _pin, int _pinLenght) async {
     isWalletUnlock = false;
     try {
-      String _localDewif = chestBox.get(0);
+      String _localDewif = chestBox.get(configBox.get('currentChest')).dewif;
       String _localPubkey;
 
       if ((_localPubkey = await _getPubkeyFromDewif(
@@ -114,7 +114,7 @@ class WalletOptionsProvider with ChangeNotifier {
   int getPinLenght(_walletNbr) {
     String _localDewif;
     if (_walletNbr is int) {
-      _localDewif = chestBox.get(0);
+      _localDewif = chestBox.get(configBox.get('currentChest')).dewif;
     } else {
       _localDewif = _walletNbr;
     }
diff --git a/lib/screens/myWallets/changePin.dart b/lib/screens/myWallets/changePin.dart
index 19a87f0d..563b2478 100644
--- a/lib/screens/myWallets/changePin.dart
+++ b/lib/screens/myWallets/changePin.dart
@@ -92,8 +92,8 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier {
                     onPressed: _changePin.newPin.text != ''
                         ? () {
                             _changePin.newPin.text = '';
-                            _changePin.storeWallet(
-                                context, walletName, _newWalletFile);
+                            _changePin.storeNewPinChest(
+                                context, _newWalletFile);
                           }
                         : null,
                     child: Text('Confirmer', style: TextStyle(fontSize: 28))),
diff --git a/lib/screens/myWallets/chooseChest.dart b/lib/screens/myWallets/chooseChest.dart
new file mode 100644
index 00000000..3a9fa195
--- /dev/null
+++ b/lib/screens/myWallets/chooseChest.dart
@@ -0,0 +1,78 @@
+import 'package:flutter/services.dart';
+import 'package:gecko/globals.dart';
+import 'package:gecko/screens/home.dart';
+import 'package:flutter/material.dart';
+// import 'package:gecko/models/home.dart';
+// import 'package:provider/provider.dart';
+
+// ignore: must_be_immutable
+class ChooseChest extends StatelessWidget {
+  TextEditingController tplController = TextEditingController();
+
+  @override
+  Widget build(BuildContext context) {
+    SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
+    int currentChest = configBox.get('currentChest');
+    return Scaffold(
+        appBar: AppBar(
+            title: SizedBox(
+          height: 22,
+          child: Text('Sélectionner mon coffre'),
+        )),
+        floatingActionButton: Container(
+            height: 80.0,
+            width: 80.0,
+            child: FittedBox(
+                child: FloatingActionButton(
+              heroTag: "tplButton",
+              onPressed: () => Navigator.push(
+                context,
+                MaterialPageRoute(builder: (context) {
+                  return HomeScreen();
+                }),
+              ),
+              child: Container(
+                height: 40.0,
+                width: 40.0,
+                child: Icon(Icons.home, color: Colors.grey[850]),
+              ),
+              backgroundColor:
+                  floattingYellow, //smoothYellow, //Color.fromARGB(500, 204, 255, 255),
+            ))),
+        body: SafeArea(
+          child: Column(children: <Widget>[
+            SizedBox(height: 150),
+            Center(
+              child: Image.asset(
+                'assets/chests/$currentChest.png',
+              ),
+            ),
+            SizedBox(height: 20),
+            Text(chestBox.get(currentChest).name),
+            ElevatedButton(
+                style: ElevatedButton.styleFrom(
+                  primary: yellowC, // background
+                  onPrimary: Colors.black, // foreground
+                ),
+                onPressed: () {
+                  Navigator.push(
+                    context,
+                    MaterialPageRoute(builder: (context) {
+                      return HomeScreen();
+                    }),
+                  );
+                },
+                child: Text('Retour Accueil', style: TextStyle(fontSize: 20))),
+            SizedBox(height: 20),
+            GestureDetector(
+                onTap: () {
+                  Navigator.popUntil(
+                    context,
+                    ModalRoute.withName('/'),
+                  );
+                },
+                child: Icon(Icons.home))
+          ]),
+        ));
+  }
+}
diff --git a/lib/screens/myWallets/walletsHome.dart b/lib/screens/myWallets/walletsHome.dart
index 0f0b441c..0d5e69ea 100644
--- a/lib/screens/myWallets/walletsHome.dart
+++ b/lib/screens/myWallets/walletsHome.dart
@@ -5,14 +5,13 @@ import 'package:gecko/models/walletData.dart';
 import 'package:gecko/models/walletOptions.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/screens/commonElements.dart';
+import 'package:gecko/screens/myWallets/chooseChest.dart';
 import 'package:gecko/screens/myWallets/walletOptions.dart';
 import 'package:gecko/screens/onBoarding/0_noKeychainFound.dart';
 import 'package:provider/provider.dart';
 
-// ignore: must_be_immutable
 class WalletsHome extends StatelessWidget {
   final _derivationKey = GlobalKey<FormState>();
-  int firstWalletDerivation;
 
   @override
   Widget build(BuildContext context) {
@@ -26,63 +25,58 @@ class WalletsHome extends StatelessWidget {
         myWalletProvider.readAllWallets(_currentChest);
     final bool isWalletsExists = myWalletProvider.checkIfWalletExist();
 
-    if (myWalletProvider.listWallets.isEmpty) {
-      firstWalletDerivation = myWalletProvider.listWallets[0].derivation;
-
-      myWalletProvider.getDefaultWallet();
-    }
-
-    log.d("${myWalletProvider.pinCode},${myWalletProvider.pinLenght}");
-
     return WillPopScope(
-        onWillPop: () {
-          Navigator.popUntil(
-            context,
-            ModalRoute.withName('/'),
-          );
-          return Future<bool>.value(true);
-        },
-        child: Scaffold(
-            appBar: AppBar(
-              leading: IconButton(
-                  icon: Icon(Icons.arrow_back, color: Colors.black),
-                  onPressed: () {
-                    Navigator.popUntil(
-                      context,
-                      ModalRoute.withName('/'),
-                    );
-                  }),
-              title: Text('Mes portefeuilles',
-                  key: Key('myWallets'),
-                  style: TextStyle(color: Colors.grey[850])),
-              backgroundColor: Color(0xffFFD58D),
+      onWillPop: () {
+        Navigator.popUntil(
+          context,
+          ModalRoute.withName('/'),
+        );
+        return Future<bool>.value(true);
+      },
+      child: Scaffold(
+        appBar: AppBar(
+          leading: IconButton(
+              icon: Icon(Icons.arrow_back, color: Colors.black),
+              onPressed: () {
+                Navigator.popUntil(
+                  context,
+                  ModalRoute.withName('/'),
+                );
+              }),
+          title: Text('Mes portefeuilles',
+              key: Key('myWallets'), style: TextStyle(color: Colors.grey[850])),
+          backgroundColor: Color(0xffFFD58D),
+        ),
+        body: SafeArea(
+          child:
+              !isWalletsExists ? NoKeyChainScreen() : myWalletsTiles(context),
+        ),
+      ),
+    );
+  }
+
+  Widget chestOptions(BuildContext context) {
+    return Column(children: [
+      SizedBox(
+          height: 90,
+          child: ElevatedButton(
+            style: ElevatedButton.styleFrom(
+              elevation: 2,
+              primary: floattingYellow, // background
+              onPrimary: Colors.black, // foreground
+            ),
+            onPressed: () => Navigator.push(
+              context,
+              MaterialPageRoute(builder: (context) {
+                return ChooseChest();
+              }),
+            ),
+            child: Text(
+              "Changer de coffre",
+              style: TextStyle(fontSize: 16),
             ),
-            floatingActionButton: Visibility(
-                visible: (isWalletsExists && firstWalletDerivation != -1),
-                child: Container(
-                    height: 80.0,
-                    width: 80.0,
-                    child: FittedBox(
-                        child: FloatingActionButton(
-                            key: Key('addDerivation'),
-                            heroTag: "buttonGenerateWallet",
-                            onPressed: () {
-                              showDialog(
-                                  context: context,
-                                  builder: (BuildContext context) {
-                                    return addNewDerivation(context, 1);
-                                  });
-                            },
-                            child: Container(
-                                height: 40,
-                                width: 40,
-                                child: Icon(Icons.person_add_alt_1_rounded,
-                                    color: Colors.grey[850])),
-                            backgroundColor: floattingYellow)))),
-            body: SafeArea(
-                child: !isWalletsExists
-                    ? NoKeyChainScreen()
-                    : myWalletsTiles(context))));
+          ))
+    ]);
   }
 
   Widget myWalletsTiles(BuildContext context) {
@@ -110,97 +104,138 @@ class WalletsHome extends StatelessWidget {
 
     List _listWallets = _myWalletProvider.listWallets;
 
-    return GridView.count(
-        key: Key('listWallets'),
-        crossAxisCount: 2,
-        childAspectRatio: 1,
-        crossAxisSpacing: 0,
-        mainAxisSpacing: 0,
-        children: <Widget>[
-          for (WalletData _repository in _listWallets)
-            Padding(
+    return CustomScrollView(slivers: <Widget>[
+      SliverGrid.count(
+          key: Key('listWallets'),
+          crossAxisCount: 2,
+          childAspectRatio: 1,
+          crossAxisSpacing: 0,
+          mainAxisSpacing: 0,
+          children: <Widget>[
+            for (WalletData _repository in _listWallets)
+              Padding(
                 padding: EdgeInsets.all(16),
                 child: GestureDetector(
-                    onTap: () async {
-                      await _walletOptions.readLocalWallet(
-                          context,
-                          _repository,
-                          _myWalletProvider.pinCode,
-                          _myWalletProvider.pinLenght);
-                      Navigator.push(
-                          context,
-                          SmoothTransition(
+                  onTap: () async {
+                    await _walletOptions.readLocalWallet(context, _repository,
+                        _myWalletProvider.pinCode, _myWalletProvider.pinLenght);
+                    Navigator.push(
+                        context,
+                        SmoothTransition(
+                            page: WalletOptions(
+                          wallet: _repository,
+                        )));
+
+                    // Navigator.push(context,
+                    //     MaterialPageRoute(builder: (context) {
+                    //   return UnlockingWallet(wallet: _repository);
+                    // }));
+                  },
+                  child: ClipRRect(
+                    borderRadius: BorderRadius.all(Radius.circular(12)),
+                    child: Column(children: <Widget>[
+                      Expanded(
+                          child: Container(
+                        width: double.infinity,
+                        height: double.infinity,
+                        decoration: BoxDecoration(
+                            gradient: RadialGradient(
+                          radius: 1,
+                          colors: [
+                            Colors.green[100],
+                            Colors.green[500],
+                          ],
+                        )),
+                        child:
+                            // SvgPicture.asset('assets/chopp-gecko2.png',
+                            //         semanticsLabel: 'Gecko', height: 48),
+                            Image.asset(
+                          'assets/chopp-gecko2.png',
+                        ),
+                      )),
+                      ListTile(
+                        shape: RoundedRectangleBorder(
+                            borderRadius: BorderRadius.vertical(
+                                bottom: Radius.circular(12))),
+                        // contentPadding: const EdgeInsets.only(left: 7.0),
+                        tileColor: _repository.id()[1] == defaultWallet.id()[1]
+                            ? orangeC
+                            : Color(0xffFFD58D),
+                        // leading: Text('IMAGE'),
+
+                        // subtitle: Text(_repository.split(':')[3],
+                        //     style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')),
+                        title: Center(
+                            child: Padding(
+                                padding: EdgeInsets.symmetric(horizontal: 5),
+                                child: Text(_repository.name,
+                                    textAlign: TextAlign.center,
+                                    style: TextStyle(
+                                        fontSize: 16.0,
+                                        color: _repository.id()[1] ==
+                                                defaultWallet.id()[1]
+                                            ? Color(0xffF9F9F1)
+                                            : Colors.black)))),
+                        // dense: true,
+                        onTap: () {
+                          Navigator.push(
+                            context,
+                            SmoothTransition(
                               page: WalletOptions(
-                            wallet: _repository,
-                          )));
+                                wallet: _repository,
+                              ),
+                            ),
+                          );
+                        },
+                      )
+                    ]),
+                  ),
+                ),
+              ),
+            addNewDerivation(context)
+          ]),
+      // SliverToBoxAdapter(child: Spacer()),
+      SliverPadding(
+        padding: EdgeInsets.symmetric(horizontal: 30),
+        sliver: SliverToBoxAdapter(child: chestOptions(context)),
+      ),
+    ]);
+  }
 
-                      // Navigator.push(context,
-                      //     MaterialPageRoute(builder: (context) {
-                      //   return UnlockingWallet(wallet: _repository);
-                      // }));
+  Widget addNewDerivation(context) {
+    return Padding(
+        padding: EdgeInsets.all(16),
+        child: ClipRRect(
+            borderRadius: BorderRadius.all(Radius.circular(12)),
+            child: Column(children: <Widget>[
+              Expanded(
+                child: InkWell(
+                    key: Key('addDerivation'),
+                    onTap: () {
+                      showDialog(
+                          context: context,
+                          builder: (BuildContext context) {
+                            return addNewDerivationPopup(context);
+                          });
                     },
-                    child: ClipRRect(
-                        borderRadius: BorderRadius.all(Radius.circular(12)),
-                        child: Column(children: <Widget>[
-                          Expanded(
-                              child: Container(
-                            width: double.infinity,
-                            height: double.infinity,
-                            decoration: BoxDecoration(
-                                gradient: RadialGradient(
-                              radius: 1,
-                              colors: [
-                                Colors.green[100],
-                                Colors.green[500],
-                              ],
-                            )),
-                            child:
-                                // SvgPicture.asset('assets/chopp-gecko2.png',
-                                //         semanticsLabel: 'Gecko', height: 48),
-                                Image.asset(
-                              'assets/chopp-gecko2.png',
-                            ),
-                          )),
-                          ListTile(
-                            shape: RoundedRectangleBorder(
-                                borderRadius: BorderRadius.vertical(
-                                    bottom: Radius.circular(12))),
-                            // contentPadding: const EdgeInsets.only(left: 7.0),
-                            tileColor:
-                                _repository.id()[1] == defaultWallet.id()[1]
-                                    ? orangeC
-                                    : Color(0xffFFD58D),
-                            // leading: Text('IMAGE'),
-
-                            // subtitle: Text(_repository.split(':')[3],
-                            //     style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')),
-                            title: Center(
-                                child: Padding(
-                                    padding:
-                                        EdgeInsets.symmetric(horizontal: 5),
-                                    child: Text(_repository.name,
-                                        textAlign: TextAlign.center,
-                                        style: TextStyle(
-                                            fontSize: 16.0,
-                                            color: _repository.id()[1] ==
-                                                    defaultWallet.id()[1]
-                                                ? Color(0xffF9F9F1)
-                                                : Colors.black)))),
-                            // dense: true,
-                            onTap: () {
-                              Navigator.push(
-                                  context,
-                                  SmoothTransition(
-                                      page: WalletOptions(
-                                    wallet: _repository,
-                                  )));
-                            },
-                          )
-                        ]))))
-        ]);
+                    child: Container(
+                      width: double.infinity,
+                      height: double.infinity,
+                      decoration: BoxDecoration(color: floattingYellow),
+                      child: Center(
+                          child: Text(
+                        '+',
+                        style: TextStyle(
+                            fontSize: 150,
+                            fontWeight: FontWeight.w700,
+                            color: Color(0xFFFCB437)),
+                      )),
+                    )),
+              )
+            ])));
   }
 
-  Widget addNewDerivation(context, int _walletNbr) {
+  Widget addNewDerivationPopup(context) {
     final TextEditingController _newDerivationName = TextEditingController();
     MyWalletsProvider _myWalletProvider =
         Provider.of<MyWalletsProvider>(context);
diff --git a/pubspec.yaml b/pubspec.yaml
index d6fbafd0..b3ffe6a3 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -76,6 +76,7 @@ flutter:
     - images/
     - config/gva_endpoints.json
     - assets/
+    - assets/chests/
     - assets/icon/
     - assets/onBoarding/
     - assets/onBoarding/progress_bar/
diff --git a/test_driver/app_test.dart b/test_driver/app_test.dart
index 7bcf48be..c5408365 100644
--- a/test_driver/app_test.dart
+++ b/test_driver/app_test.dart
@@ -370,16 +370,22 @@ void main() {
       await goBack();
       await driver.waitFor(find.text('Renommage wallet 2'));
       await createDerivation('Derivation 8');
+      await driver.scrollIntoView(find.text('+'));
       await createDerivation('Derivation 9');
       await createDerivation('Derivation 10');
+      await driver.scrollIntoView(find.text('+'));
       await createDerivation('Derivation 11');
       await createDerivation('Derivation 12');
+      await driver.scrollIntoView(find.text('+'));
       await createDerivation('Derivation 13');
       await createDerivation('Derivation 14');
+      await driver.scrollIntoView(find.text('+'));
       await createDerivation('Derivation 15');
       await createDerivation('Derivation 16');
+      await driver.scrollIntoView(find.text('+'));
       await createDerivation('Derivation 17');
       await createDerivation('Derivation 18');
+      await driver.scrollIntoView(find.text('+'));
       await createDerivation('Derivation 19');
       await createDerivation('Derivation 20');
       await sleep(400);
-- 
GitLab