From 757d48f793126b59103ea9d5505df072019fd300 Mon Sep 17 00:00:00 2001
From: OleksandrSobol <dr.alexander.sobol@gmail.com>
Date: Wed, 23 Sep 2020 22:31:39 +0300
Subject: [PATCH 1/8] CAKE-45 | created wallet menu item and wallet menu alert;
 deleted wallet tile; added menuItems to wallet menu; reworked wallet list
 page (removed slider menu on wallet list screen and used alert instead of
 this)

---
 .../screens/wallet_list/wallet_list_page.dart | 151 ++++++++----------
 lib/src/screens/wallet_list/wallet_menu.dart  | 106 ++++--------
 .../screens/wallet_list/wallet_menu_item.dart |  16 ++
 .../widgets/wallet_menu_alert.dart            | 112 +++++++++++++
 .../wallet_list/widgets/wallet_tile.dart      | 151 ------------------
 5 files changed, 230 insertions(+), 306 deletions(-)
 create mode 100644 lib/src/screens/wallet_list/wallet_menu_item.dart
 create mode 100644 lib/src/screens/wallet_list/widgets/wallet_menu_alert.dart
 delete mode 100644 lib/src/screens/wallet_list/widgets/wallet_tile.dart

diff --git a/lib/src/screens/wallet_list/wallet_list_page.dart b/lib/src/screens/wallet_list/wallet_list_page.dart
index 0e743e1c9..4e78642c7 100644
--- a/lib/src/screens/wallet_list/wallet_list_page.dart
+++ b/lib/src/screens/wallet_list/wallet_list_page.dart
@@ -1,8 +1,8 @@
+import 'package:cake_wallet/src/screens/wallet_list/widgets/wallet_menu_alert.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter_mobx/flutter_mobx.dart';
 import 'package:cake_wallet/routes.dart';
-import 'package:cake_wallet/palette.dart';
 import 'package:cake_wallet/generated/i18n.dart';
 import 'package:cake_wallet/entities/wallet_type.dart';
 import 'package:cake_wallet/view_model/wallet_list/wallet_list_view_model.dart';
@@ -10,7 +10,6 @@ import 'package:cake_wallet/src/widgets/primary_button.dart';
 import 'package:cake_wallet/src/screens/base_page.dart';
 import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
 import 'package:cake_wallet/src/screens/wallet_list/wallet_menu.dart';
-import 'package:cake_wallet/src/screens/wallet_list/widgets/wallet_tile.dart';
 
 class WalletListPage extends BasePage {
   WalletListPage({this.walletListViewModel});
@@ -65,95 +64,83 @@ class WalletListBodyState extends State<WalletListBody> {
                   itemCount: widget.walletListViewModel.wallets.length,
                   itemBuilder: (__, index) {
                     final wallet = widget.walletListViewModel.wallets[index];
-                    final screenWidth = MediaQuery.of(context).size.width;
                     final walletMenu = WalletMenu(context, widget.walletListViewModel);
                     final items =
                         walletMenu.generateItemsForWalletMenu(wallet.isCurrent);
-                    final colors = walletMenu
-                        .generateColorsForWalletMenu(wallet.isCurrent);
-                    final images = walletMenu
-                        .generateImagesForWalletMenu(wallet.isCurrent);
+                    final currentColor = wallet.isCurrent
+                        ? Theme.of(context).accentTextTheme.subtitle.decorationColor
+                        : Theme.of(context).backgroundColor;
 
-                    return Container(
-                      height: tileHeight,
-                      width: double.infinity,
-                      child: CustomScrollView(
-                        scrollDirection: Axis.horizontal,
-                        controller: scrollController,
-                        slivers: <Widget>[
-                          SliverPersistentHeader(
-                            pinned: false,
-                            floating: true,
-                            delegate: WalletTile(
-                                min: screenWidth - 170,
-                                max: screenWidth,
-                                image: _imageFor(type: wallet.type),
-                                walletName: wallet.name,
-                                walletAddress: '', //shortAddress,
-                                isCurrent: wallet.isCurrent),
-                          ),
-                          SliverList(
-                              delegate:
-                                  SliverChildBuilderDelegate((context, index) {
-                            final item = items[index];
-                            final image = images[index];
-                            final firstColor = colors[index*2];
-                            final secondColor = colors[index*2 + 1];
-
-                            final radius = index == 0 ? 10.0 : 0.0;
-
-                            return GestureDetector(
-                              onTap: () {
-                                scrollController.animateTo(0.0,
-                                    duration: Duration(milliseconds: 500),
-                                    curve: Curves.fastOutSlowIn);
-                                walletMenu.action(
-                                    walletMenu.listItems.indexOf(item),
-                                    wallet,
-                                    wallet.isCurrent);
-                              },
-                              child: Container(
-                                height: tileHeight,
-                                width: 80,
-                                color: Theme.of(context).backgroundColor,
+                    return GestureDetector(
+                      onTap: () {
+                        showDialog<void>(
+                            context: context,
+                            builder: (dialogContext) {
+                              return WalletMenuAlert(
+                                  wallet: wallet,
+                                  walletMenu: walletMenu,
+                                  items: items);
+                            }
+                        );
+                      },
+                      child: Container(
+                        height: tileHeight,
+                        width: double.infinity,
+                        child: Row(
+                          children: <Widget>[
+                            Container(
+                              height: tileHeight,
+                              width: 4,
+                              decoration: BoxDecoration(
+                                  borderRadius: BorderRadius.only(
+                                      topRight: Radius.circular(4),
+                                      bottomRight: Radius.circular(4)),
+                                  color: currentColor
+                              ),
+                            ),
+                            Expanded(
                                 child: Container(
-                                  padding: EdgeInsets.only(left: 5, right: 5),
-                                  decoration: BoxDecoration(
-                                      borderRadius: BorderRadius.only(
-                                          topLeft: Radius.circular(radius),
-                                          bottomLeft: Radius.circular(radius)),
-                                      gradient: LinearGradient(
-                                          begin: Alignment.topCenter,
-                                          end: Alignment.bottomCenter,
-                                          colors: [
-                                            firstColor,
-                                            secondColor
-                                          ]
+                                  height: tileHeight,
+                                  padding: EdgeInsets.only(left: 20, right: 20),
+                                  color: Theme.of(context).backgroundColor,
+                                  alignment: Alignment.centerLeft,
+                                  child: Row(
+                                    crossAxisAlignment: CrossAxisAlignment.center,
+                                    children: <Widget>[
+                                      _imageFor(type: wallet.type),
+                                      SizedBox(width: 10),
+                                      Text(
+                                        wallet.name,
+                                        style: TextStyle(
+                                            fontSize: 22,
+                                            fontWeight: FontWeight.w600,
+                                            color: Theme.of(context).primaryTextTheme.title.color
+                                        ),
                                       )
-                                  ),
-                                  child: Center(
-                                    child: Column(
-                                      mainAxisSize: MainAxisSize.min,
-                                      children: <Widget>[
-                                        image,
-                                        SizedBox(height: 2),
-                                        Text(
-                                          item,
-                                          textAlign: TextAlign.center,
-                                          style: TextStyle(
-                                              fontSize: 7,
-                                              fontWeight: FontWeight.w500,
-                                              color: Colors.white),
-                                        )
-                                      ],
-                                    ),
+                                    ],
                                   ),
                                 ),
+                            ),
+                            Container(
+                              height: tileHeight,
+                              width: 10,
+                              decoration: BoxDecoration(
+                                  borderRadius: BorderRadius.only(
+                                      topLeft: Radius.circular(10),
+                                      bottomLeft: Radius.circular(10)),
+                                  gradient: LinearGradient(
+                                      begin: Alignment.topCenter,
+                                      end: Alignment.bottomCenter,
+                                      colors: [
+                                        Theme.of(context).accentTextTheme.headline.color,
+                                        Theme.of(context).accentTextTheme.headline.backgroundColor
+                                      ]
+                                  )
                               ),
-                            );
-                          }, childCount: items.length))
-                        ],
-                      ),
+                            ),
+                          ],
+                        ),
+                      )
                     );
                   }),
             ),
diff --git a/lib/src/screens/wallet_list/wallet_menu.dart b/lib/src/screens/wallet_list/wallet_menu.dart
index a508541bd..e5745ccd8 100644
--- a/lib/src/screens/wallet_list/wallet_menu.dart
+++ b/lib/src/screens/wallet_list/wallet_menu.dart
@@ -1,10 +1,9 @@
+import 'package:cake_wallet/src/screens/wallet_list/wallet_menu_item.dart';
 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
 import 'package:cake_wallet/view_model/wallet_list/wallet_list_view_model.dart';
 import 'package:flutter/material.dart';
 import 'package:cake_wallet/routes.dart';
-import 'package:provider/provider.dart';
 import 'package:cake_wallet/generated/i18n.dart';
-// import 'package:cake_wallet/src/stores/wallet_list/wallet_list_store.dart';
 import 'package:cake_wallet/view_model/wallet_list/wallet_list_item.dart';
 import 'package:cake_wallet/src/screens/auth/auth_page.dart';
 import 'package:cake_wallet/palette.dart';
@@ -15,85 +14,46 @@ class WalletMenu {
   final WalletListViewModel walletListViewModel;
   final BuildContext context;
 
-  final List<String> listItems = [
-    S.current.wallet_list_load_wallet,
-    S.current.show_seed,
-    S.current.remove,
-    S.current.rescan
+  final List<WalletMenuItem> menuItems = [
+    WalletMenuItem(
+        title: S.current.wallet_list_load_wallet,
+        firstGradientColor: Palette.cornflower,
+        secondGradientColor: Palette.royalBlue,
+        image: Image.asset('assets/images/load.png',
+            height: 24, width: 24, color: Colors.white)),
+    WalletMenuItem(
+        title: S.current.show_seed,
+        firstGradientColor: Palette.moderateOrangeYellow,
+        secondGradientColor: Palette.moderateOrange,
+        image: Image.asset('assets/images/eye_action.png',
+            height: 24, width: 24, color: Colors.white)),
+    WalletMenuItem(
+        title: S.current.remove,
+        firstGradientColor: Palette.lightRed,
+        secondGradientColor: Palette.persianRed,
+        image: Image.asset('assets/images/trash.png',
+            height: 24, width: 24, color: Colors.white)),
+    WalletMenuItem(
+        title: S.current.rescan,
+        firstGradientColor: Palette.shineGreen,
+        secondGradientColor: Palette.moderateGreen,
+        image: Image.asset('assets/images/scanner.png',
+            height: 24, width: 24, color: Colors.white))
   ];
 
-  final List<Color> firstColors = [
-    Palette.cornflower,
-    Palette.moderateOrangeYellow,
-    Palette.lightRed,
-    Palette.shineGreen
-  ];
+  List<WalletMenuItem> generateItemsForWalletMenu(bool isCurrentWallet) {
+    final items = List<WalletMenuItem>();
 
-  final List<Color> secondColors = [
-    Palette.royalBlue,
-    Palette.moderateOrange,
-    Palette.persianRed,
-    Palette.moderateGreen
-  ];
-
-  final List<Image> listImages = [
-    Image.asset('assets/images/load.png',
-        height: 24, width: 24, color: Colors.white),
-    Image.asset('assets/images/eye_action.png',
-        height: 24, width: 24, color: Colors.white),
-    Image.asset('assets/images/trash.png',
-        height: 24, width: 24, color: Colors.white),
-    Image.asset('assets/images/scanner.png',
-        height: 24, width: 24, color: Colors.white)
-  ];
-
-  List<String> generateItemsForWalletMenu(bool isCurrentWallet) {
-    final items = List<String>();
-
-    if (!isCurrentWallet) items.add(listItems[0]);
-    if (isCurrentWallet) items.add(listItems[1]);
-    if (!isCurrentWallet) items.add(listItems[2]);
-    if (isCurrentWallet) items.add(listItems[3]);
+    if (!isCurrentWallet) items.add(menuItems[0]);
+    if (isCurrentWallet) items.add(menuItems[1]);
+    if (!isCurrentWallet) items.add(menuItems[2]);
+    if (isCurrentWallet) items.add(menuItems[3]);
 
     return items;
   }
 
-  List<Color> generateColorsForWalletMenu(bool isCurrentWallet) {
-    final colors = <Color>[];
-
-    if (!isCurrentWallet) {
-      colors.add(firstColors[0]);
-      colors.add(secondColors[0]);
-    }
-    if (isCurrentWallet) {
-      colors.add(firstColors[1]);
-      colors.add(secondColors[1]);
-    }
-    if (!isCurrentWallet) {
-      colors.add(firstColors[2]);
-      colors.add(secondColors[2]);
-    }
-    if (isCurrentWallet) {
-      colors.add(firstColors[3]);
-      colors.add(secondColors[3]);
-    }
-
-    return colors;
-  }
-
-  List<Image> generateImagesForWalletMenu(bool isCurrentWallet) {
-    final images = <Image>[];
-
-    if (!isCurrentWallet) images.add(listImages[0]);
-    if (isCurrentWallet) images.add(listImages[1]);
-    if (!isCurrentWallet) images.add(listImages[2]);
-    if (isCurrentWallet) images.add(listImages[3]);
-
-    return images;
-  }
-
   Future<void> action(
-      int index, WalletListItem wallet, bool isCurrentWallet) async {
+      int index, WalletListItem wallet) async {
     switch (index) {
       case 0:
         await Navigator.of(context).pushNamed(Routes.auth, arguments:
diff --git a/lib/src/screens/wallet_list/wallet_menu_item.dart b/lib/src/screens/wallet_list/wallet_menu_item.dart
new file mode 100644
index 000000000..55e7189c5
--- /dev/null
+++ b/lib/src/screens/wallet_list/wallet_menu_item.dart
@@ -0,0 +1,16 @@
+import 'dart:ui';
+import 'package:flutter/cupertino.dart';
+
+class WalletMenuItem {
+  WalletMenuItem({
+    @required this.title,
+    @required this.firstGradientColor,
+    @required this.secondGradientColor,
+    @required this.image
+  });
+
+  final String title;
+  final Color firstGradientColor;
+  final Color secondGradientColor;
+  final Image image;
+}
\ No newline at end of file
diff --git a/lib/src/screens/wallet_list/widgets/wallet_menu_alert.dart b/lib/src/screens/wallet_list/widgets/wallet_menu_alert.dart
new file mode 100644
index 000000000..cafb27516
--- /dev/null
+++ b/lib/src/screens/wallet_list/widgets/wallet_menu_alert.dart
@@ -0,0 +1,112 @@
+import 'dart:ui';
+import 'package:cake_wallet/palette.dart';
+import 'package:cake_wallet/src/screens/wallet_list/wallet_menu.dart';
+import 'package:cake_wallet/src/screens/wallet_list/wallet_menu_item.dart';
+import 'package:cake_wallet/view_model/wallet_list/wallet_list_item.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:cake_wallet/src/widgets/alert_background.dart';
+import 'package:cake_wallet/src/widgets/alert_close_button.dart';
+
+class WalletMenuAlert extends StatelessWidget {
+  WalletMenuAlert({
+    @required this.wallet,
+    @required this.walletMenu,
+    @required this.items
+  });
+
+  final WalletListItem wallet;
+  final WalletMenu walletMenu;
+  final List<WalletMenuItem> items;
+  final closeButton = Image.asset('assets/images/close.png',
+    color: Palette.darkBlueCraiola,
+  );
+
+  @override
+  Widget build(BuildContext context) {
+    return AlertBackground(
+      child: Stack(
+        alignment: Alignment.center,
+        children: <Widget>[
+          Padding(
+            padding: EdgeInsets.only(
+                left: 24,
+                right: 24,
+            ),
+            child: ClipRRect(
+              borderRadius: BorderRadius.all(Radius.circular(14)),
+              child: Container(
+                color: Theme.of(context).textTheme.body2.decorationColor,
+                padding: EdgeInsets.only(left: 24),
+                child: ListView.separated(
+                  shrinkWrap: true,
+                  physics: const NeverScrollableScrollPhysics(),
+                  itemCount: items.length,
+                  separatorBuilder: (context, _) => Container(
+                    height: 1,
+                    color: Theme.of(context).accentTextTheme.subhead.backgroundColor,
+                  ),
+                  itemBuilder: (_, index) {
+                    final item = items[index];
+
+                    return GestureDetector(
+                      onTap: () {
+                        Navigator.of(context).pop();
+                        walletMenu.action(
+                            walletMenu.menuItems.indexOf(item),
+                            wallet);
+                      },
+                      child: Container(
+                        padding: EdgeInsets.only(top: 12, bottom: 12),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.min,
+                          mainAxisAlignment: MainAxisAlignment.start,
+                          crossAxisAlignment: CrossAxisAlignment.center,
+                          children: <Widget>[
+                            Container(
+                              height: 56,
+                              width: 56,
+                              decoration: BoxDecoration(
+                                  borderRadius: BorderRadius.all(
+                                      Radius.circular(12)),
+                                  gradient: LinearGradient(
+                                      begin: Alignment.topCenter,
+                                      end: Alignment.bottomCenter,
+                                      colors: [
+                                        item.firstGradientColor,
+                                        item.secondGradientColor
+                                      ]
+                                  )
+                              ),
+                              child: Center(
+                                child: item.image,
+                              ),
+                            ),
+                            SizedBox(width: 12),
+                            Expanded(
+                              child: Text(
+                                item.title,
+                                style: TextStyle(
+                                    color: Theme.of(context).primaryTextTheme.title.color,
+                                    fontSize: 18,
+                                    fontFamily: 'Poppins',
+                                    fontWeight: FontWeight.w500,
+                                    decoration: TextDecoration.none
+                                ),
+                              )
+                            )
+                          ],
+                        ),
+                      ),
+                    );
+                  },
+                ),
+              ),
+            ),
+          ),
+          AlertCloseButton(image: closeButton)
+        ],
+      ),
+    );
+  }
+}
\ No newline at end of file
diff --git a/lib/src/screens/wallet_list/widgets/wallet_tile.dart b/lib/src/screens/wallet_list/widgets/wallet_tile.dart
deleted file mode 100644
index 4e4165341..000000000
--- a/lib/src/screens/wallet_list/widgets/wallet_tile.dart
+++ /dev/null
@@ -1,151 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/cupertino.dart';
-
-class WalletTile extends SliverPersistentHeaderDelegate {
-  WalletTile({
-    @required this.min,
-    @required this.max,
-    @required this.image,
-    @required this.walletName,
-    @required this.walletAddress,
-    @required this.isCurrent
-  });
-
-  final double min;
-  final double max;
-  final Image image;
-  final String walletName;
-  final String walletAddress;
-  final bool isCurrent;
-  final double tileHeight = 60;
-
-  @override
-  Widget build(BuildContext context, double shrinkOffset, bool overlapsContent) {
-    var opacity = 1 - shrinkOffset / (max - min);
-    opacity = opacity >= 0 ? opacity : 0;
-
-    var panelWidth = 10 * opacity;
-    panelWidth = panelWidth < 10 ? 0 : 10;
-
-    final currentColor = isCurrent
-        ? Theme.of(context).accentTextTheme.subtitle.decorationColor
-        : Theme.of(context).backgroundColor;
-
-    return Stack(
-      fit: StackFit.expand,
-      overflow: Overflow.visible,
-      children: <Widget>[
-        Positioned(
-          top: 0,
-          right: max - 4,
-          child: Container(
-            height: tileHeight,
-            width: 4,
-            decoration: BoxDecoration(
-                borderRadius: BorderRadius.only(topRight: Radius.circular(4), bottomRight: Radius.circular(4)),
-                color: currentColor
-            ),
-          ),
-        ),
-        Positioned(
-          top: 0,
-          right: 10,
-          child: Container(
-            height: tileHeight,
-            width: max - 14,
-            padding: EdgeInsets.only(left: 20, right: 20),
-            color: Theme.of(context).backgroundColor,
-            alignment: Alignment.centerLeft,
-            child: Row(
-              //mainAxisAlignment: MainAxisAlignment.start,
-              crossAxisAlignment: CrossAxisAlignment.center,
-              children: <Widget>[
-                image,
-                SizedBox(width: 10),
-                Text(
-                  walletName,
-                  style: TextStyle(
-                      fontSize: 22,
-                      fontWeight: FontWeight.w600,
-                      color: Theme.of(context).primaryTextTheme.title.color
-                  ),
-                )
-              ],
-            ),
-            /*Column(
-              mainAxisSize: MainAxisSize.max,
-              mainAxisAlignment: MainAxisAlignment.center,
-              children: <Widget>[
-                Row(
-                  mainAxisAlignment: MainAxisAlignment.start,
-                  crossAxisAlignment: CrossAxisAlignment.center,
-                  children: <Widget>[
-                    image,
-                    SizedBox(width: 10),
-                    Text(
-                      walletName,
-                      style: TextStyle(
-                          fontSize: 22,
-                          fontWeight: FontWeight.bold,
-                          color: Theme.of(context).primaryTextTheme.title.color
-                      ),
-                    )
-                  ],
-                ),
-                isCurrent ? SizedBox(height: 5) : Offstage(),
-                isCurrent
-                ? Row(
-                  mainAxisAlignment: MainAxisAlignment.start,
-                  crossAxisAlignment: CrossAxisAlignment.center,
-                  children: <Widget>[
-                    SizedBox(width: 34),
-                    Text(
-                      walletAddress,
-                      style: TextStyle(
-                        fontSize: 12,
-                        color: Theme.of(context).primaryTextTheme.caption.color
-                      ),
-                    )
-                  ],
-                )
-                : Offstage()
-              ],
-            ),*/
-          ),
-        ),
-        Positioned(
-            top: 0,
-            right: 0,
-            child: Opacity(
-              opacity: opacity,
-              child: Container(
-                height: tileHeight,
-                width: panelWidth,
-                decoration: BoxDecoration(
-                  borderRadius: BorderRadius.only(topLeft: Radius.circular(10), bottomLeft: Radius.circular(10)),
-                  gradient: LinearGradient(
-                        begin: Alignment.topCenter,
-                        end: Alignment.bottomCenter,
-                        colors: [
-                          Theme.of(context).accentTextTheme.headline.color,
-                          Theme.of(context).accentTextTheme.headline.backgroundColor
-                        ]
-                  )
-                ),
-              ),
-            )
-        ),
-      ],
-    );
-  }
-
-  @override
-  double get maxExtent => max;
-
-  @override
-  double get minExtent => min;
-
-  @override
-  bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) => true;
-
-}
\ No newline at end of file

From 83ef5c179db0352516caff7be118806fcc9ca422 Mon Sep 17 00:00:00 2001
From: OleksandrSobol <dr.alexander.sobol@gmail.com>
Date: Thu, 24 Sep 2020 20:46:48 +0300
Subject: [PATCH 2/8] CAKE-45 | changed wallet list tile (wallet list page);
 changed wallet menu tile (wallet menu alert)

---
 .../screens/wallet_list/wallet_list_page.dart   | 17 -----------------
 .../wallet_list/widgets/wallet_menu_alert.dart  |  8 ++++----
 2 files changed, 4 insertions(+), 21 deletions(-)

diff --git a/lib/src/screens/wallet_list/wallet_list_page.dart b/lib/src/screens/wallet_list/wallet_list_page.dart
index 4e78642c7..694c338e4 100644
--- a/lib/src/screens/wallet_list/wallet_list_page.dart
+++ b/lib/src/screens/wallet_list/wallet_list_page.dart
@@ -121,23 +121,6 @@ class WalletListBodyState extends State<WalletListBody> {
                                   ),
                                 ),
                             ),
-                            Container(
-                              height: tileHeight,
-                              width: 10,
-                              decoration: BoxDecoration(
-                                  borderRadius: BorderRadius.only(
-                                      topLeft: Radius.circular(10),
-                                      bottomLeft: Radius.circular(10)),
-                                  gradient: LinearGradient(
-                                      begin: Alignment.topCenter,
-                                      end: Alignment.bottomCenter,
-                                      colors: [
-                                        Theme.of(context).accentTextTheme.headline.color,
-                                        Theme.of(context).accentTextTheme.headline.backgroundColor
-                                      ]
-                                  )
-                              ),
-                            ),
                           ],
                         ),
                       )
diff --git a/lib/src/screens/wallet_list/widgets/wallet_menu_alert.dart b/lib/src/screens/wallet_list/widgets/wallet_menu_alert.dart
index cafb27516..e5f68597f 100644
--- a/lib/src/screens/wallet_list/widgets/wallet_menu_alert.dart
+++ b/lib/src/screens/wallet_list/widgets/wallet_menu_alert.dart
@@ -57,18 +57,18 @@ class WalletMenuAlert extends StatelessWidget {
                             wallet);
                       },
                       child: Container(
-                        padding: EdgeInsets.only(top: 12, bottom: 12),
+                        height: 60,
                         child: Row(
                           mainAxisSize: MainAxisSize.min,
                           mainAxisAlignment: MainAxisAlignment.start,
                           crossAxisAlignment: CrossAxisAlignment.center,
                           children: <Widget>[
                             Container(
-                              height: 56,
-                              width: 56,
+                              height: 32,
+                              width: 32,
                               decoration: BoxDecoration(
                                   borderRadius: BorderRadius.all(
-                                      Radius.circular(12)),
+                                      Radius.circular(4)),
                                   gradient: LinearGradient(
                                       begin: Alignment.topCenter,
                                       end: Alignment.bottomCenter,

From 360e04cc4ccaae197ba7e75c96d0ff1758dd7c1f Mon Sep 17 00:00:00 2001
From: OleksandrSobol <dr.alexander.sobol@gmail.com>
Date: Thu, 24 Sep 2020 21:58:07 +0300
Subject: [PATCH 3/8] CAKE-53 | added dai to cryptocurrencies list; added dai
 to currency picker; added dai logo to contact list page; added address
 validator for dai

---
 assets/images/dai.png                         | Bin 0 -> 73562 bytes
 lib/core/address_validator.dart               |   4 ++
 lib/entities/crypto_currency.dart             |  40 ++++++++++--------
 .../morphtoken_exchange_provider.dart         |   1 -
 .../screens/contact/contact_list_page.dart    |   3 ++
 .../exchange/widgets/currency_picker.dart     |   8 +---
 pubspec.lock                                  |  31 ++++++--------
 7 files changed, 43 insertions(+), 44 deletions(-)
 create mode 100644 assets/images/dai.png

diff --git a/assets/images/dai.png b/assets/images/dai.png
new file mode 100644
index 0000000000000000000000000000000000000000..698ffc48eb4142703b795be34e3965c7cba38604
GIT binary patch
literal 73562
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

literal 0
HcmV?d00001

diff --git a/lib/core/address_validator.dart b/lib/core/address_validator.dart
index 1ee9e72db..19810c636 100644
--- a/lib/core/address_validator.dart
+++ b/lib/core/address_validator.dart
@@ -22,6 +22,8 @@ class AddressValidator extends TextValidator {
         return '[0-9a-zA-Z]';
       case CryptoCurrency.btc:
         return '[0-9a-zA-Z]';
+      case CryptoCurrency.dai:
+        return '[0-9a-zA-Z]';
       case CryptoCurrency.dash:
         return '[0-9a-zA-Z]';
       case CryptoCurrency.eos:
@@ -57,6 +59,8 @@ class AddressValidator extends TextValidator {
         return [42];
       case CryptoCurrency.btc:
         return [34, 42];
+      case CryptoCurrency.dai:
+        return [42];
       case CryptoCurrency.dash:
         return [34];
       case CryptoCurrency.eos:
diff --git a/lib/entities/crypto_currency.dart b/lib/entities/crypto_currency.dart
index 722fc2aef..b836393bd 100644
--- a/lib/entities/crypto_currency.dart
+++ b/lib/entities/crypto_currency.dart
@@ -14,6 +14,7 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> {
     CryptoCurrency.bch,
     CryptoCurrency.bnb,
     CryptoCurrency.btc,
+    CryptoCurrency.dai,
     CryptoCurrency.dash,
     CryptoCurrency.eos,
     CryptoCurrency.eth,
@@ -29,15 +30,16 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> {
   static const bch = CryptoCurrency(title: 'BCH', raw: 2);
   static const bnb = CryptoCurrency(title: 'BNB', raw: 3);
   static const btc = CryptoCurrency(title: 'BTC', raw: 4);
-  static const dash = CryptoCurrency(title: 'DASH', raw: 5);
-  static const eos = CryptoCurrency(title: 'EOS', raw: 6);
-  static const eth = CryptoCurrency(title: 'ETH', raw: 7);
-  static const ltc = CryptoCurrency(title: 'LTC', raw: 8);
-  static const nano = CryptoCurrency(title: 'NANO', raw: 9);
-  static const trx = CryptoCurrency(title: 'TRX', raw: 10);
-  static const usdt = CryptoCurrency(title: 'USDT', raw: 11);
-  static const xlm = CryptoCurrency(title: 'XLM', raw: 12);
-  static const xrp = CryptoCurrency(title: 'XRP', raw: 13);
+  static const dai = CryptoCurrency(title: 'DAI', raw: 5);
+  static const dash = CryptoCurrency(title: 'DASH', raw: 6);
+  static const eos = CryptoCurrency(title: 'EOS', raw: 7);
+  static const eth = CryptoCurrency(title: 'ETH', raw: 8);
+  static const ltc = CryptoCurrency(title: 'LTC', raw: 9);
+  static const nano = CryptoCurrency(title: 'NANO', raw: 10);
+  static const trx = CryptoCurrency(title: 'TRX', raw: 11);
+  static const usdt = CryptoCurrency(title: 'USDT', raw: 12);
+  static const xlm = CryptoCurrency(title: 'XLM', raw: 13);
+  static const xrp = CryptoCurrency(title: 'XRP', raw: 14);
 
   static CryptoCurrency deserialize({int raw}) {
     switch (raw) {
@@ -52,22 +54,24 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> {
       case 4:
         return CryptoCurrency.btc;
       case 5:
-        return CryptoCurrency.dash;
+        return CryptoCurrency.dai;
       case 6:
-        return CryptoCurrency.eos;
+        return CryptoCurrency.dash;
       case 7:
-        return CryptoCurrency.eth;
+        return CryptoCurrency.eos;
       case 8:
-        return CryptoCurrency.ltc;
+        return CryptoCurrency.eth;
       case 9:
-        return CryptoCurrency.nano;
+        return CryptoCurrency.ltc;
       case 10:
-        return CryptoCurrency.trx;
+        return CryptoCurrency.nano;
       case 11:
-        return CryptoCurrency.usdt;
+        return CryptoCurrency.trx;
       case 12:
-        return CryptoCurrency.xlm;
+        return CryptoCurrency.usdt;
       case 13:
+        return CryptoCurrency.xlm;
+      case 14:
         return CryptoCurrency.xrp;
       default:
         return null;
@@ -86,6 +90,8 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> {
         return CryptoCurrency.bnb;
       case 'btc':
         return CryptoCurrency.btc;
+      case 'dai':
+        return CryptoCurrency.dai;
       case 'dash':
         return CryptoCurrency.dash;
       case 'eos':
diff --git a/lib/exchange/morphtoken/morphtoken_exchange_provider.dart b/lib/exchange/morphtoken/morphtoken_exchange_provider.dart
index ec632cccb..6c4aade37 100644
--- a/lib/exchange/morphtoken/morphtoken_exchange_provider.dart
+++ b/lib/exchange/morphtoken/morphtoken_exchange_provider.dart
@@ -1,6 +1,5 @@
 import 'dart:convert';
 import 'package:cake_wallet/core/amount_converter.dart';
-import 'package:cake_wallet/monero/monero_amount_format.dart';
 import 'package:hive/hive.dart';
 import 'package:cake_wallet/exchange/trade_not_found_exeption.dart';
 import 'package:flutter/foundation.dart';
diff --git a/lib/src/screens/contact/contact_list_page.dart b/lib/src/screens/contact/contact_list_page.dart
index dc1d14b72..988246656 100644
--- a/lib/src/screens/contact/contact_list_page.dart
+++ b/lib/src/screens/contact/contact_list_page.dart
@@ -211,6 +211,9 @@ class ContactListPage extends BasePage {
       case CryptoCurrency.btc:
         image = Image.asset('assets/images/bitcoin.png', height: 24, width: 24);
         break;
+      case CryptoCurrency.dai:
+        image = Image.asset('assets/images/dai.png', height: 24, width: 24);
+        break;
       case CryptoCurrency.dash:
         image = Image.asset('assets/images/dash.png', height: 24, width: 24);
         break;
diff --git a/lib/src/screens/exchange/widgets/currency_picker.dart b/lib/src/screens/exchange/widgets/currency_picker.dart
index 21ba5ce31..668f99e77 100644
--- a/lib/src/screens/exchange/widgets/currency_picker.dart
+++ b/lib/src/screens/exchange/widgets/currency_picker.dart
@@ -62,13 +62,7 @@ class CurrencyPicker extends StatelessWidget {
                             physics: const NeverScrollableScrollPhysics(),
                             crossAxisSpacing: 1,
                             mainAxisSpacing: 1,
-                            children: List.generate(15, (index) {
-
-                              if (index == 14) {
-                                return Container(
-                                  color: Theme.of(context).accentTextTheme.title.color,
-                                );
-                              }
+                            children: List.generate(items.length, (index) {
 
                               final item = items[index];
                               final isItemSelected = index == selectedAtIndex;
diff --git a/pubspec.lock b/pubspec.lock
index 9b14f0555..df34727ee 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -42,7 +42,7 @@ packages:
       name: async
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.4.2"
+    version: "2.4.1"
   auto_size_text:
     dependency: "direct main"
     description:
@@ -210,7 +210,7 @@ packages:
       name: collection
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.14.13"
+    version: "1.14.12"
   connectivity:
     dependency: "direct main"
     description:
@@ -252,7 +252,7 @@ packages:
       name: crypto
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.5"
+    version: "2.1.4"
   csslib:
     dependency: transitive
     description:
@@ -330,13 +330,6 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "1.0.2"
-  fake_async:
-    dependency: transitive
-    description:
-      name: fake_async
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "1.1.0"
   ffi:
     dependency: transitive
     description:
@@ -505,7 +498,7 @@ packages:
       name: image
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.17"
+    version: "2.1.12"
   intl:
     dependency: "direct main"
     description:
@@ -554,7 +547,7 @@ packages:
       name: matcher
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.12.8"
+    version: "0.12.6"
   meta:
     dependency: transitive
     description:
@@ -624,7 +617,7 @@ packages:
       name: path
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.7.0"
+    version: "1.6.4"
   path_drawing:
     dependency: transitive
     description:
@@ -687,7 +680,7 @@ packages:
       name: petitparser
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.4"
+    version: "2.4.0"
   platform:
     dependency: transitive
     description:
@@ -874,7 +867,7 @@ packages:
       name: stack_trace
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.9.5"
+    version: "1.9.3"
   stream_channel:
     dependency: transitive
     description:
@@ -909,7 +902,7 @@ packages:
       name: test_api
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.2.17"
+    version: "0.2.15"
   time:
     dependency: transitive
     description:
@@ -930,7 +923,7 @@ packages:
       name: typed_data
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0"
+    version: "1.1.6"
   url_launcher:
     dependency: "direct main"
     description:
@@ -1021,7 +1014,7 @@ packages:
       name: xml
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.5.1"
+    version: "3.6.1"
   yaml:
     dependency: "direct main"
     description:
@@ -1030,5 +1023,5 @@ packages:
     source: hosted
     version: "2.2.1"
 sdks:
-  dart: ">=2.9.0-14.0.dev <3.0.0"
+  dart: ">=2.7.0 <3.0.0"
   flutter: ">=1.12.13+hotfix.5 <2.0.0"

From 34aa7fdc7667bc53fdc12ef21e562eb87d7c70c2 Mon Sep 17 00:00:00 2001
From: M <m@cakewallet.com>
Date: Fri, 25 Sep 2020 18:32:44 +0300
Subject: [PATCH 4/8] Fixes pre release.

---
 lib/monero/monero_wallet.dart                 |  2 +-
 .../screens/contact/contact_list_page.dart    |  5 +-
 lib/src/screens/contact/contact_page.dart     |  5 +-
 lib/src/screens/dashboard/wallet_menu.dart    |  3 +-
 .../screens/dashboard/widgets/header_row.dart |  3 +-
 .../screens/disclaimer/disclaimer_page.dart   |  3 +-
 lib/src/screens/exchange/exchange_page.dart   |  5 +-
 .../exchange/widgets/exchange_card.dart       |  3 +-
 .../widgets/present_provider_picker.dart      |  3 +-
 .../exchange_trade/exchange_trade_page.dart   |  9 +-
 .../screens/new_wallet/new_wallet_page.dart   |  3 +-
 lib/src/screens/nodes/nodes_list_page.dart    |  7 +-
 lib/src/screens/pin_code/pin_code_widget.dart |  2 +-
 lib/src/screens/receive/receive_page.dart     | 85 ++++++++++---------
 .../restore_wallet_from_keys_page.dart        |  2 +-
 .../restore_wallet_from_seed_details.dart     |  3 +-
 lib/src/screens/seed/wallet_seed_page.dart    |  7 +-
 lib/src/screens/send/send_page.dart           | 13 +--
 lib/src/screens/settings/change_language.dart |  2 +-
 .../widgets/settings_picker_cell.dart         |  3 +-
 .../setup_pin_code/setup_pin_code.dart        |  7 +-
 lib/src/screens/wallet_list/wallet_menu.dart  |  3 +-
 lib/src/widgets/seed_language_selector.dart   |  3 +-
 lib/utils/show_pop_up.dart                    | 22 +++++
 .../wallet_list/wallet_list_view_model.dart   |  2 +-
 25 files changed, 124 insertions(+), 81 deletions(-)
 create mode 100644 lib/utils/show_pop_up.dart

diff --git a/lib/monero/monero_wallet.dart b/lib/monero/monero_wallet.dart
index 6f0ea6d79..4a053b788 100644
--- a/lib/monero/monero_wallet.dart
+++ b/lib/monero/monero_wallet.dart
@@ -191,7 +191,7 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance> with Store {
 
   @override
   Future<void> rescan({int height}) async {
-    // FIXME: Unimplemented
+    monero_wallet.rescanBlockchainAsync();
   }
 
   void _setListeners() {
diff --git a/lib/src/screens/contact/contact_list_page.dart b/lib/src/screens/contact/contact_list_page.dart
index dc1d14b72..8cae22f85 100644
--- a/lib/src/screens/contact/contact_list_page.dart
+++ b/lib/src/screens/contact/contact_list_page.dart
@@ -1,3 +1,4 @@
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/services.dart';
@@ -246,7 +247,7 @@ class ContactListPage extends BasePage {
   }
 
   Future<bool> showAlertDialog(BuildContext context) async {
-    return await showDialog(
+    return await showPopUp(
         context: context,
         builder: (BuildContext context) {
           return AlertWithTwoActions(
@@ -261,7 +262,7 @@ class ContactListPage extends BasePage {
 
   Future<bool> showNameAndAddressDialog(
       BuildContext context, String name, String address) async {
-    return await showDialog(
+    return await showPopUp(
         context: context,
         builder: (BuildContext context) {
           return AlertWithTwoActions(
diff --git a/lib/src/screens/contact/contact_page.dart b/lib/src/screens/contact/contact_page.dart
index e73760ce1..a65a86e29 100644
--- a/lib/src/screens/contact/contact_page.dart
+++ b/lib/src/screens/contact/contact_page.dart
@@ -1,4 +1,5 @@
 import 'package:cake_wallet/palette.dart';
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter_mobx/flutter_mobx.dart';
@@ -138,7 +139,7 @@ class ContactPage extends BasePage {
   }
 
   void _presentCurrencyPicker(BuildContext context) {
-    showDialog<void>(
+    showPopUp<void>(
         builder: (_) => CurrencyPicker(
             selectedAtIndex:
                 contactViewModel.currencies.indexOf(contactViewModel.currency),
@@ -150,7 +151,7 @@ class ContactPage extends BasePage {
   }
 
   void _onContactSavingFailure(BuildContext context, String error) {
-    showDialog<void>(
+    showPopUp<void>(
         context: context,
         builder: (BuildContext context) {
           return AlertWithOneAction(
diff --git a/lib/src/screens/dashboard/wallet_menu.dart b/lib/src/screens/dashboard/wallet_menu.dart
index 1eb3864d0..d06068c89 100644
--- a/lib/src/screens/dashboard/wallet_menu.dart
+++ b/lib/src/screens/dashboard/wallet_menu.dart
@@ -1,3 +1,4 @@
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:cake_wallet/routes.dart';
 import 'package:provider/provider.dart';
@@ -72,7 +73,7 @@ class WalletMenu {
   }
 
   Future<void> _presentReconnectAlert(BuildContext context) async {
-    await showDialog<void>(
+    await showPopUp<void>(
         context: context,
         builder: (BuildContext context) {
           return AlertWithTwoActions(
diff --git a/lib/src/screens/dashboard/widgets/header_row.dart b/lib/src/screens/dashboard/widgets/header_row.dart
index a878ff11f..5b63f7a0e 100644
--- a/lib/src/screens/dashboard/widgets/header_row.dart
+++ b/lib/src/screens/dashboard/widgets/header_row.dart
@@ -1,4 +1,5 @@
 import 'package:cake_wallet/src/screens/dashboard/widgets/filter_widget.dart';
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:cake_wallet/generated/i18n.dart';
 import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
@@ -31,7 +32,7 @@ class HeaderRow extends StatelessWidget {
           ),
           GestureDetector(
             onTap: () {
-              showDialog<void>(
+              showPopUp<void>(
                 context: context,
                 builder: (context) => FilterWidget(dashboardViewModel: dashboardViewModel)
               );
diff --git a/lib/src/screens/disclaimer/disclaimer_page.dart b/lib/src/screens/disclaimer/disclaimer_page.dart
index fde5677e7..b80a7a1fe 100644
--- a/lib/src/screens/disclaimer/disclaimer_page.dart
+++ b/lib/src/screens/disclaimer/disclaimer_page.dart
@@ -1,5 +1,6 @@
 import 'dart:ui';
 import 'package:cake_wallet/palette.dart';
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/services.dart';
@@ -51,7 +52,7 @@ class DisclaimerBodyState extends State<DisclaimerPageBody> {
   }
 
   Future<void> _showAlertDialog(BuildContext context) async {
-    await showDialog<void>(
+    await showPopUp<void>(
         context: context,
         builder: (BuildContext context) {
           return AlertWithOneAction(
diff --git a/lib/src/screens/exchange/exchange_page.dart b/lib/src/screens/exchange/exchange_page.dart
index 1cabcc448..a602fc995 100644
--- a/lib/src/screens/exchange/exchange_page.dart
+++ b/lib/src/screens/exchange/exchange_page.dart
@@ -4,6 +4,7 @@ import 'package:cake_wallet/src/screens/base_page.dart';
 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
 import 'package:cake_wallet/src/widgets/template_tile.dart';
 import 'package:cake_wallet/src/widgets/trail_button.dart';
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:dotted_border/dotted_border.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
@@ -293,7 +294,7 @@ class ExchangePage extends BasePage {
                                             exchangeViewModel, template);
                                       },
                                       onRemove: () {
-                                        showDialog<void>(
+                                        showPopUp<void>(
                                             context: context,
                                             builder: (dialogContext) {
                                               return AlertWithTwoActions(
@@ -492,7 +493,7 @@ class ExchangePage extends BasePage {
     // reaction((_) => exchangeViewModel.tradeState, (ExchangeTradeState state) {
     //   if (state is TradeIsCreatedFailure) {
     //     WidgetsBinding.instance.addPostFrameCallback((_) {
-    //       showDialog<void>(
+    //       showPopUp<void>(
     //           context: context,
     //           builder: (BuildContext context) {
     //             return AlertWithOneAction(
diff --git a/lib/src/screens/exchange/widgets/exchange_card.dart b/lib/src/screens/exchange/widgets/exchange_card.dart
index 1836ec912..28c7980f8 100644
--- a/lib/src/screens/exchange/widgets/exchange_card.dart
+++ b/lib/src/screens/exchange/widgets/exchange_card.dart
@@ -1,3 +1,4 @@
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter/material.dart';
 import 'package:cake_wallet/generated/i18n.dart';
@@ -303,7 +304,7 @@ class ExchangeCardState extends State<ExchangeCard> {
   }
 
   void _presentPicker(BuildContext context) {
-    showDialog<void>(
+    showPopUp<void>(
         builder: (_) => CurrencyPicker(
             selectedAtIndex: widget.currencies.indexOf(_selectedCurrency),
             items: widget.currencies,
diff --git a/lib/src/screens/exchange/widgets/present_provider_picker.dart b/lib/src/screens/exchange/widgets/present_provider_picker.dart
index b8154632e..f4cc7abf1 100644
--- a/lib/src/screens/exchange/widgets/present_provider_picker.dart
+++ b/lib/src/screens/exchange/widgets/present_provider_picker.dart
@@ -1,3 +1,4 @@
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:cake_wallet/exchange/exchange_provider_description.dart';
 import 'package:cake_wallet/exchange/exchange_provider.dart';
@@ -72,7 +73,7 @@ class PresentProviderPicker extends StatelessWidget {
       }
     }
 
-    showDialog<void>(
+    showPopUp<void>(
         builder: (_) => Picker(
             items: items,
             images: images,
diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart
index 545492e09..945bb298d 100644
--- a/lib/src/screens/exchange_trade/exchange_trade_page.dart
+++ b/lib/src/screens/exchange_trade/exchange_trade_page.dart
@@ -4,6 +4,7 @@ import 'package:cake_wallet/exchange/exchange_provider_description.dart';
 import 'package:cake_wallet/src/screens/exchange_trade/exchange_trade_item.dart';
 import 'package:cake_wallet/src/screens/exchange_trade/information_page.dart';
 import 'package:cake_wallet/src/widgets/standart_list_row.dart';
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart';
 import 'package:mobx/mobx.dart';
 import 'package:provider/provider.dart';
@@ -37,7 +38,7 @@ void showInformation(ExchangeTradeViewModel exchangeTradeViewModel, BuildContext
       : S.current.exchange_result_description(
       trade.amount ?? fetchingLabel, trade.from.toString());
 
-  showDialog<void>(
+  showPopUp<void>(
     context: context,
     builder: (_) => InformationPage(information: information)
   );
@@ -255,7 +256,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
     reaction((_) => sendStore.state, (SendingState state) {
       if (state is SendingFailed) {
         WidgetsBinding.instance.addPostFrameCallback((_) {
-          showDialog<void>(
+          showPopUp<void>(
               context: context,
               builder: (BuildContext context) {
                 return AlertWithOneAction(
@@ -270,7 +271,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
 
       if (state is TransactionCreatedSuccessfully) {
         WidgetsBinding.instance.addPostFrameCallback((_) {
-          showDialog<void>(
+          showPopUp<void>(
               context: context,
               builder: (BuildContext context) {
                 return AlertWithTwoActions(
@@ -292,7 +293,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
 
       if (state is TransactionCommitted) {
         WidgetsBinding.instance.addPostFrameCallback((_) {
-          showDialog<void>(
+          showPopUp<void>(
               context: context,
               builder: (BuildContext context) {
                 return AlertWithOneAction(
diff --git a/lib/src/screens/new_wallet/new_wallet_page.dart b/lib/src/screens/new_wallet/new_wallet_page.dart
index 9512a3753..9300b9c3a 100644
--- a/lib/src/screens/new_wallet/new_wallet_page.dart
+++ b/lib/src/screens/new_wallet/new_wallet_page.dart
@@ -1,6 +1,7 @@
 import 'package:cake_wallet/di.dart';
 import 'package:cake_wallet/routes.dart';
 import 'package:cake_wallet/store/settings_store.dart';
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:mobx/mobx.dart';
 import 'package:flutter_mobx/flutter_mobx.dart';
 import 'package:flutter/material.dart';
@@ -60,7 +61,7 @@ class _WalletNameFormState extends State<WalletNameForm> {
 
       if (state is FailureState) {
         WidgetsBinding.instance.addPostFrameCallback((_) {
-          showDialog<void>(
+          showPopUp<void>(
               context: context,
               builder: (_) {
                 return AlertWithOneAction(
diff --git a/lib/src/screens/nodes/nodes_list_page.dart b/lib/src/screens/nodes/nodes_list_page.dart
index dd713d430..84e87a3a5 100644
--- a/lib/src/screens/nodes/nodes_list_page.dart
+++ b/lib/src/screens/nodes/nodes_list_page.dart
@@ -1,3 +1,4 @@
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter_mobx/flutter_mobx.dart';
@@ -29,7 +30,7 @@ class NodeListPage extends BasePage {
         minWidth: double.minPositive,
         child: FlatButton(
             onPressed: () async {
-              await showDialog<void>(
+              await showPopUp<void>(
                   context: context,
                   builder: (BuildContext context) {
                     return AlertWithTwoActions(
@@ -83,7 +84,7 @@ class NodeListPage extends BasePage {
                       return;
                     }
 
-                    await showDialog<void>(
+                    await showPopUp<void>(
                         context: context,
                         builder: (BuildContext context) {
                           return AlertDialog(
@@ -110,7 +111,7 @@ class NodeListPage extends BasePage {
               final dismissibleRow = Dismissible(
                   key: Key('${node.keyIndex}'),
                   confirmDismiss: (direction) async {
-                    return await showDialog(
+                    return await showPopUp(
                         context: context,
                         builder: (BuildContext context) {
                           return AlertWithTwoActions(
diff --git a/lib/src/screens/pin_code/pin_code_widget.dart b/lib/src/screens/pin_code/pin_code_widget.dart
index e4e17dae3..6cb0a9714 100644
--- a/lib/src/screens/pin_code/pin_code_widget.dart
+++ b/lib/src/screens/pin_code/pin_code_widget.dart
@@ -266,7 +266,7 @@ class PinCodeState<T extends PinCodeWidget> extends State<T> {
       return;
     }
 
-    pin.substring(0, pin.length - 1);
+    setState(() => pin = pin.substring(0, pin.length - 1));
   }
 
   String _changePinLengthText() {
diff --git a/lib/src/screens/receive/receive_page.dart b/lib/src/screens/receive/receive_page.dart
index fbae17324..b7b06fcdb 100644
--- a/lib/src/screens/receive/receive_page.dart
+++ b/lib/src/screens/receive/receive_page.dart
@@ -1,3 +1,4 @@
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter_mobx/flutter_mobx.dart';
@@ -34,21 +35,19 @@ class ReceivePage extends BasePage {
 
   @override
   Widget Function(BuildContext, Widget) get rootWrapper =>
-          (BuildContext context, Widget scaffold) => Container(
+      (BuildContext context, Widget scaffold) => Container(
           decoration: BoxDecoration(
               gradient: LinearGradient(colors: [
-                Theme.of(context).accentColor,
-                Theme.of(context).scaffoldBackgroundColor,
-                Theme.of(context).primaryColor,
-              ],
-                  begin: Alignment.topRight,
-                  end: Alignment.bottomLeft)),
+            Theme.of(context).accentColor,
+            Theme.of(context).scaffoldBackgroundColor,
+            Theme.of(context).primaryColor,
+          ], begin: Alignment.topRight, end: Alignment.bottomLeft)),
           child: scaffold);
 
   @override
   Widget trailing(BuildContext context) {
-    final shareImage = Image.asset('assets/images/share.png',
-        color: Colors.white);
+    final shareImage =
+        Image.asset('assets/images/share.png', color: Colors.white);
 
     return SizedBox(
       height: 20.0,
@@ -56,12 +55,12 @@ class ReceivePage extends BasePage {
       child: ButtonTheme(
         minWidth: double.minPositive,
         child: FlatButton(
-          highlightColor: Colors.transparent,
-          splashColor: Colors.transparent,
-          padding: EdgeInsets.all(0),
-          onPressed: () => Share.text(S.current.share_address,
-            addressListViewModel.address.address, 'text/plain'),
-          child: shareImage),
+            highlightColor: Colors.transparent,
+            splashColor: Colors.transparent,
+            padding: EdgeInsets.all(0),
+            onPressed: () => Share.text(S.current.share_address,
+                addressListViewModel.address.address, 'text/plain'),
+            child: shareImage),
       ),
     );
   }
@@ -80,10 +79,9 @@ class ReceivePage extends BasePage {
           ),
           Observer(
               builder: (_) => ListView.separated(
-                  separatorBuilder: (context, _) =>
-                      Container(
-                          height: 1,
-                          color: Theme.of(context).dividerColor),
+                  padding: EdgeInsets.all(0),
+                  separatorBuilder: (context, _) => Container(
+                      height: 1, color: Theme.of(context).dividerColor),
                   shrinkWrap: true,
                   physics: NeverScrollableScrollPhysics(),
                   itemCount: addressListViewModel.items.length,
@@ -93,9 +91,10 @@ class ReceivePage extends BasePage {
 
                     if (item is WalletAccountListHeader) {
                       cell = HeaderTile(
-                          onTap: () async => await showDialog<void>(
+                          onTap: () async => await showPopUp<void>(
                               context: context,
-                              builder: (_) => getIt.get<MoneroAccountListPage>()),
+                              builder: (_) =>
+                                  getIt.get<MoneroAccountListPage>()),
                           title: addressListViewModel.accountLabel,
                           icon: Icon(
                             Icons.arrow_forward_ios,
@@ -117,27 +116,31 @@ class ReceivePage extends BasePage {
                     }
 
                     if (item is WalletAddressListItem) {
-                      cell = Observer(
-                          builder: (_) {
-                            final isCurrent = item.address ==
-                                addressListViewModel.address.address;
-                            final backgroundColor = isCurrent
-                                ? Theme.of(context).textTheme.display3.decorationColor
-                                : Theme.of(context).textTheme.display2.decorationColor;
-                            final textColor = isCurrent
-                                ? Theme.of(context).textTheme.display3.color
-                                : Theme.of(context).textTheme.display2.color;
+                      cell = Observer(builder: (_) {
+                        final isCurrent = item.address ==
+                            addressListViewModel.address.address;
+                        final backgroundColor = isCurrent
+                            ? Theme.of(context)
+                                .textTheme
+                                .display3
+                                .decorationColor
+                            : Theme.of(context)
+                                .textTheme
+                                .display2
+                                .decorationColor;
+                        final textColor = isCurrent
+                            ? Theme.of(context).textTheme.display3.color
+                            : Theme.of(context).textTheme.display2.color;
 
-                            return AddressCell.fromItem(item,
-                                isCurrent: isCurrent,
-                                backgroundColor: backgroundColor,
-                                textColor: textColor,
-                                onTap: (_) => addressListViewModel.address = item,
-                                onEdit: () => Navigator.of(context).pushNamed(
-                                    Routes.newSubaddress,
-                                    arguments: item));
-                          }
-                      );
+                        return AddressCell.fromItem(item,
+                            isCurrent: isCurrent,
+                            backgroundColor: backgroundColor,
+                            textColor: textColor,
+                            onTap: (_) => addressListViewModel.address = item,
+                            onEdit: () => Navigator.of(context).pushNamed(
+                                Routes.newSubaddress,
+                                arguments: item));
+                      });
                     }
 
                     return index != 0
diff --git a/lib/src/screens/restore/restore_wallet_from_keys_page.dart b/lib/src/screens/restore/restore_wallet_from_keys_page.dart
index f0e17ccf0..fa5efdff6 100644
--- a/lib/src/screens/restore/restore_wallet_from_keys_page.dart
+++ b/lib/src/screens/restore/restore_wallet_from_keys_page.dart
@@ -80,7 +80,7 @@ class _RestoreFromKeysFromState extends State<RestoreFromKeysFrom> {
 
       if (state is WalletRestorationFailure) {
         WidgetsBinding.instance.addPostFrameCallback((_) {
-          showDialog<void>(
+          showPopUp<void>(
               context: context,
               builder: (BuildContext context) {
                 return AlertWithOneAction(
diff --git a/lib/src/screens/restore/restore_wallet_from_seed_details.dart b/lib/src/screens/restore/restore_wallet_from_seed_details.dart
index 5469a9f58..6a245884d 100644
--- a/lib/src/screens/restore/restore_wallet_from_seed_details.dart
+++ b/lib/src/screens/restore/restore_wallet_from_seed_details.dart
@@ -1,3 +1,4 @@
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:mobx/mobx.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_mobx/flutter_mobx.dart';
@@ -53,7 +54,7 @@ class _RestoreFromSeedDetailsFormState
 
       if (state is FailureState) {
         WidgetsBinding.instance.addPostFrameCallback((_) {
-          showDialog<void>(
+          showPopUp<void>(
               context: context,
               builder: (BuildContext context) {
                 return AlertWithOneAction(
diff --git a/lib/src/screens/seed/wallet_seed_page.dart b/lib/src/screens/seed/wallet_seed_page.dart
index 6e6088bdd..92d3b8504 100644
--- a/lib/src/screens/seed/wallet_seed_page.dart
+++ b/lib/src/screens/seed/wallet_seed_page.dart
@@ -2,6 +2,7 @@ import 'package:cake_wallet/di.dart';
 import 'package:cake_wallet/palette.dart';
 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
 import 'package:cake_wallet/store/settings_store.dart';
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
@@ -27,12 +28,12 @@ class WalletSeedPage extends BasePage {
   @override
   void onClose(BuildContext context) async {
     if (isNewWalletCreated) {
-      final confirmed = await showDialog<bool>(context: context, builder: (BuildContext context) {
+      final confirmed = await showPopUp<bool>(context: context, builder: (BuildContext context) {
         // FIXME: add translations
         return AlertWithTwoActions(
             alertTitle: 'Attention',
-            alertContent: 'Have you written it down? The seed is the only way to recover your wallet.',
-            leftButtonText: 'Not yet',
+            alertContent: 'The seed is the only way to recover your wallet. Have you written it down?',
+            leftButtonText: 'Go back',
             rightButtonText: 'Yes, I have',
             actionLeftButton: () => Navigator.of(context).pop(false),
             actionRightButton: () => Navigator.of(context).pop(true));
diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart
index 0beddd831..d62b14ead 100644
--- a/lib/src/screens/send/send_page.dart
+++ b/lib/src/screens/send/send_page.dart
@@ -6,6 +6,7 @@ import 'package:cake_wallet/src/widgets/picker.dart';
 import 'package:cake_wallet/src/widgets/primary_button.dart';
 import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
 import 'package:cake_wallet/src/widgets/trail_button.dart';
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:cake_wallet/view_model/send/send_view_model_state.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
@@ -397,7 +398,7 @@ class SendPage extends BasePage {
                       //                 getOpenaliasRecord(context);
                       //               },
                       //               onRemove: () {
-                      //                 showDialog<void>(
+                      //                 showPopUp<void>(
                       //                     context: context,
                       //                     builder: (dialogContext) {
                       //                       return AlertWithTwoActions(
@@ -492,7 +493,7 @@ class SendPage extends BasePage {
     reaction((_) => sendViewModel.state, (ExecutionState state) {
       if (state is FailureState) {
         WidgetsBinding.instance.addPostFrameCallback((_) {
-          showDialog<void>(
+          showPopUp<void>(
               context: context,
               builder: (BuildContext context) {
                 return AlertWithOneAction(
@@ -506,7 +507,7 @@ class SendPage extends BasePage {
 
       if (state is ExecutedSuccessfullyState) {
         WidgetsBinding.instance.addPostFrameCallback((_) {
-          showDialog<void>(
+          showPopUp<void>(
               context: context,
               builder: (BuildContext context) {
                 return ConfirmSendingAlert(
@@ -521,7 +522,7 @@ class SendPage extends BasePage {
                     actionLeftButton: () {
                       Navigator.of(context).pop();
                       sendViewModel.commitTransaction();
-                      showDialog<void>(
+                      showPopUp<void>(
                           context: context,
                           builder: (BuildContext context) {
                             return Observer(builder: (_) {
@@ -635,7 +636,7 @@ class SendPage extends BasePage {
     // if (isOpenalias) {
     //   _addressController.text = sendViewModel.recordAddress;
 
-    //   await showDialog<void>(
+    //   await showPopUp<void>(
     //       context: context,
     //       builder: (BuildContext context) {
     //         return AlertWithOneAction(
@@ -653,7 +654,7 @@ class SendPage extends BasePage {
     // final items = TransactionPriority.all;
     // final selectedItem = items.indexOf(sendViewModel.transactionPriority);
     //
-    // await showDialog<void>(
+    // await showPopUp<void>(
     //     builder: (_) => Picker(
     //       items: items,
     //       selectedAtIndex: selectedItem,
diff --git a/lib/src/screens/settings/change_language.dart b/lib/src/screens/settings/change_language.dart
index 78e6f09fb..3b06aefa8 100644
--- a/lib/src/screens/settings/change_language.dart
+++ b/lib/src/screens/settings/change_language.dart
@@ -39,7 +39,7 @@ class ChangeLanguage extends BasePage {
     //           isSelected: isCurrent,
     //           handler: (context) async {
     //             if (!isCurrent) {
-    //               await showDialog<void>(
+    //               await showPopUp<void>(
     //                   context: context,
     //                   builder: (BuildContext context) {
     //                     return AlertWithTwoActions(
diff --git a/lib/src/screens/settings/widgets/settings_picker_cell.dart b/lib/src/screens/settings/widgets/settings_picker_cell.dart
index a77e76efd..e2c949683 100644
--- a/lib/src/screens/settings/widgets/settings_picker_cell.dart
+++ b/lib/src/screens/settings/widgets/settings_picker_cell.dart
@@ -1,3 +1,4 @@
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:cake_wallet/src/widgets/picker.dart';
 import 'package:cake_wallet/src/widgets/standard_list.dart';
@@ -16,7 +17,7 @@ class SettingsPickerCell<ItemType> extends StandardListRow {
             onTap: (BuildContext context) async {
               final selectedAtIndex = items.indexOf(selectedItem);
 
-              await showDialog<void>(
+              await showPopUp<void>(
                   context: context,
                   builder: (_) => Picker(
                       items: items,
diff --git a/lib/src/screens/setup_pin_code/setup_pin_code.dart b/lib/src/screens/setup_pin_code/setup_pin_code.dart
index dad0c0f2f..6cd54625d 100644
--- a/lib/src/screens/setup_pin_code/setup_pin_code.dart
+++ b/lib/src/screens/setup_pin_code/setup_pin_code.dart
@@ -1,3 +1,4 @@
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:cake_wallet/generated/i18n.dart';
@@ -26,7 +27,7 @@ class SetupPinCodePage extends BasePage {
         }
 
         if (!pinCodeViewModel.isPinCodeCorrect) {
-          await showDialog<void>(
+          await showPopUp<void>(
               context: context,
               builder: (BuildContext context) {
                 return AlertWithOneAction(
@@ -43,7 +44,7 @@ class SetupPinCodePage extends BasePage {
         try {
           await pinCodeViewModel.setupPinCode();
 
-          await showDialog<void>(
+          await showPopUp<void>(
               context: context,
               builder: (BuildContext context) {
                 return AlertWithOneAction(
@@ -60,7 +61,7 @@ class SetupPinCodePage extends BasePage {
               });
         } catch (e) {
           // FIXME: Add translation for alert content text.
-          await showDialog<void>(
+          await showPopUp<void>(
               context: context,
               builder: (BuildContext context) {
                 return AlertWithOneAction(
diff --git a/lib/src/screens/wallet_list/wallet_menu.dart b/lib/src/screens/wallet_list/wallet_menu.dart
index a508541bd..aa83d56e2 100644
--- a/lib/src/screens/wallet_list/wallet_menu.dart
+++ b/lib/src/screens/wallet_list/wallet_menu.dart
@@ -1,4 +1,5 @@
 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:cake_wallet/view_model/wallet_list/wallet_list_view_model.dart';
 import 'package:flutter/material.dart';
 import 'package:cake_wallet/routes.dart';
@@ -126,7 +127,7 @@ class WalletMenu {
         });
         break;
       case 2:
-        final isComfirmed = await showDialog<bool>(
+        final isComfirmed = await showPopUp<bool>(
             context: context,
             builder: (BuildContext context) {
               return AlertWithTwoActions(
diff --git a/lib/src/widgets/seed_language_selector.dart b/lib/src/widgets/seed_language_selector.dart
index 74420d370..57011f323 100644
--- a/lib/src/widgets/seed_language_selector.dart
+++ b/lib/src/widgets/seed_language_selector.dart
@@ -1,3 +1,4 @@
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:cake_wallet/generated/i18n.dart';
 import 'package:cake_wallet/src/screens/new_wallet/widgets/select_button.dart';
@@ -35,7 +36,7 @@ class SeedLanguageSelectorState extends State<SeedLanguageSelector> {
         image: null,
         text: seedLocales[seedLanguages.indexOf(selected)],
         onTap: () async {
-          final selected = await showDialog<String>(
+          final selected = await showPopUp<String>(
               context: context,
               builder: (BuildContext context) =>
                   SeedLanguagePicker(key: _pickerKey, selected: this.selected));
diff --git a/lib/utils/show_pop_up.dart b/lib/utils/show_pop_up.dart
new file mode 100644
index 000000000..a97fb3762
--- /dev/null
+++ b/lib/utils/show_pop_up.dart
@@ -0,0 +1,22 @@
+import 'package:flutter/material.dart';
+
+Future<T> showPopUp<T>({
+  @required BuildContext context,
+  WidgetBuilder builder,
+  bool barrierDismissible = true,
+  Color barrierColor,
+  bool useSafeArea = false,
+  bool useRootNavigator = true,
+  RouteSettings routeSettings,
+  Widget child,
+}) {
+  return showDialog<T>(
+      context: context,
+      builder: builder,
+      barrierDismissible: barrierDismissible,
+      barrierColor: barrierColor,
+      useSafeArea: useSafeArea,
+      useRootNavigator: useRootNavigator,
+      routeSettings: routeSettings,
+      child: child);
+}
diff --git a/lib/view_model/wallet_list/wallet_list_view_model.dart b/lib/view_model/wallet_list/wallet_list_view_model.dart
index 3be5d164c..8bb102620 100644
--- a/lib/view_model/wallet_list/wallet_list_view_model.dart
+++ b/lib/view_model/wallet_list/wallet_list_view_model.dart
@@ -35,7 +35,7 @@ abstract class WalletListViewModelBase with Store {
 
   @action
   Future<void> remove(WalletListItem wallet) async {
-    final walletService = getIt.get<WalletService>();
+    final walletService = getIt.get<WalletService>(param1: wallet.type);
     await walletService.remove(wallet.name);
     await _walletInfoSource.delete(wallet.key);
     _updateList();

From 162e9e5712934d98671441a1d75b58aa27933841 Mon Sep 17 00:00:00 2001
From: M <m@cakewallet.com>
Date: Sat, 26 Sep 2020 14:17:39 +0300
Subject: [PATCH 5/8] Design fixes.

---
 .../dashboard/widgets/action_button.dart      |   1 +
 .../dashboard/widgets/balance_page.dart       |  68 ++++------
 .../dashboard/widgets/transaction_raw.dart    | 128 +++++++++---------
 .../settings/settings_view_model.dart         |   5 +-
 4 files changed, 96 insertions(+), 106 deletions(-)

diff --git a/lib/src/screens/dashboard/widgets/action_button.dart b/lib/src/screens/dashboard/widgets/action_button.dart
index dc9a64bbf..9f9fbc418 100644
--- a/lib/src/screens/dashboard/widgets/action_button.dart
+++ b/lib/src/screens/dashboard/widgets/action_button.dart
@@ -36,6 +36,7 @@ class ActionButton extends StatelessWidget {
               child: image,
             ),
           ),
+          SizedBox(height: 15),
           Text(
             title,
             style: TextStyle(fontSize: 14, color: Colors.white),
diff --git a/lib/src/screens/dashboard/widgets/balance_page.dart b/lib/src/screens/dashboard/widgets/balance_page.dart
index 4cd3fe2a0..519f21960 100644
--- a/lib/src/screens/dashboard/widgets/balance_page.dart
+++ b/lib/src/screens/dashboard/widgets/balance_page.dart
@@ -18,45 +18,34 @@ class BalancePage extends StatelessWidget {
             mainAxisAlignment: MainAxisAlignment.spaceBetween,
             crossAxisAlignment: CrossAxisAlignment.center,
             children: <Widget>[
-              Observer(
-                  builder: (_) {
-                    return Text(
-                      dashboardViewModel.wallet.currency.toString(),
-                      style: TextStyle(
-                          fontSize: 40,
-                          fontWeight: FontWeight.bold,
-                          color: Theme.of(context).indicatorColor,
-                          height: 1
-                      ),
-                    );
-                  }
-              ),
-              Observer(
-                  builder: (_) {
-                    return Text(
-                      dashboardViewModel.balanceViewModel.cryptoBalance,
-                      style: TextStyle(
-                          fontSize: 54,
-                          fontWeight: FontWeight.bold,
-                          color: Colors.white,
-                          height: 1
-                      ),
-                    );
-                  }
-              ),
-              Observer(
-                  builder: (_) {
-                    return Text(
-                      dashboardViewModel.balanceViewModel.fiatBalance,
-                      style: TextStyle(
-                          fontSize: 18,
-                          fontWeight: FontWeight.w500,
-                          color: Theme.of(context).indicatorColor,
-                          height: 1
-                      ),
-                    );
-                  }
-              ),
+              Observer(builder: (_) {
+                return Text(
+                  dashboardViewModel.wallet.currency.toString(),
+                  style: TextStyle(
+                      fontSize: 40,
+                      fontWeight: FontWeight.bold,
+                      color: Theme.of(context).indicatorColor,
+                      height: 1),
+                );
+              }),
+              Observer(builder: (_) {
+                return Text(dashboardViewModel.balanceViewModel.cryptoBalance,
+                    style: TextStyle(
+                        fontSize: 54,
+                        fontWeight: FontWeight.bold,
+                        color: Colors.white,
+                        height: 1),
+                    textAlign: TextAlign.center);
+              }),
+              Observer(builder: (_) {
+                return Text(dashboardViewModel.balanceViewModel.fiatBalance,
+                    style: TextStyle(
+                        fontSize: 18,
+                        fontWeight: FontWeight.w500,
+                        color: Theme.of(context).indicatorColor,
+                        height: 1),
+                    textAlign: TextAlign.center);
+              }),
             ],
           ),
         ),
@@ -64,4 +53,3 @@ class BalancePage extends StatelessWidget {
     );
   }
 }
-
diff --git a/lib/src/screens/dashboard/widgets/transaction_raw.dart b/lib/src/screens/dashboard/widgets/transaction_raw.dart
index 13e3bd2be..14d07a9fc 100644
--- a/lib/src/screens/dashboard/widgets/transaction_raw.dart
+++ b/lib/src/screens/dashboard/widgets/transaction_raw.dart
@@ -3,13 +3,13 @@ import 'package:cake_wallet/entities/transaction_direction.dart';
 import 'package:cake_wallet/generated/i18n.dart';
 
 class TransactionRow extends StatelessWidget {
-  TransactionRow({
-    this.direction,
-    this.formattedDate,
-    this.formattedAmount,
-    this.formattedFiatAmount,
-    this.isPending,
-    @required this.onTap});
+  TransactionRow(
+      {this.direction,
+      this.formattedDate,
+      this.formattedAmount,
+      this.formattedFiatAmount,
+      this.isPending,
+      @required this.onTap});
 
   final VoidCallback onTap;
   final TransactionDirection direction;
@@ -23,75 +23,73 @@ class TransactionRow extends StatelessWidget {
     return InkWell(
         onTap: onTap,
         child: Container(
-          height: 52,
+          height: 62,
           color: Colors.transparent,
           padding: EdgeInsets.only(left: 24, right: 24),
           child: Row(
               crossAxisAlignment: CrossAxisAlignment.center,
               children: <Widget>[
-                Container(
-                  height: 36,
-                  width: 36,
-                  decoration: BoxDecoration(
-                    shape: BoxShape.circle,
-                    color: Theme.of(context).textTheme.overline.decorationColor
-                  ),
-                  child: Image.asset(
-                      direction == TransactionDirection.incoming
-                          ? 'assets/images/down_arrow.png'
-                          : 'assets/images/up_arrow.png'),
-                ),
                 Expanded(
-                    child: Padding(
-                      padding: const EdgeInsets.only(left: 12),
-                      child: Container(
-                        height: 46,
-                        child: Column(
-                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                          mainAxisSize: MainAxisSize.max,
-                          children: <Widget>[
-                            Row(
-                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                children: <Widget>[
-                                  Text(
-                                      (direction == TransactionDirection.incoming
+                  child: Container(
+                    height: 56,
+                    child: Column(
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                      mainAxisSize: MainAxisSize.max,
+                      children: <Widget>[
+                        Row(
+                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                            children: <Widget>[
+                              Text(
+                                  (direction == TransactionDirection.incoming
                                           ? S.of(context).received
                                           : S.of(context).sent) +
-                                          (isPending ? S.of(context).pending : ''),
+                                      (isPending ? S.of(context).pending : ''),
+                                  style: TextStyle(
+                                      fontSize: 16,
+                                      fontWeight: FontWeight.w500,
+                                      color: Colors.white)),
+                              Container(
+                                  decoration: BoxDecoration(
+                                      borderRadius:
+                                          BorderRadius.all(Radius.circular(10)),
+                                      color: (direction ==
+                                              TransactionDirection.incoming
+                                          ? Colors.green.withOpacity(0.8)
+                                          : Theme.of(context)
+                                              .accentTextTheme
+                                              .body2
+                                              .decorationColor
+                                              .withOpacity(0.8))),
+                                  padding: EdgeInsets.only(
+                                      top: 3, bottom: 3, left: 10, right: 10),
+                                  child: Text(formattedAmount,
                                       style: TextStyle(
                                           fontSize: 16,
                                           fontWeight: FontWeight.w500,
-                                          color: Colors.white
-                                      )),
-                                  Text(direction == TransactionDirection.incoming
-                                      ? formattedAmount
-                                      : '- ' + formattedAmount,
-                                      style: TextStyle(
-                                          fontSize: 16,
-                                          fontWeight: FontWeight.w500,
-                                          color: Colors.white
-                                      ))
-                                ]),
-                            Row(
-                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                children: <Widget>[
-                                  Text(formattedDate,
-                                      style: TextStyle(
-                                          fontSize: 14,
-                                          color: Theme.of(context).textTheme
-                                              .overline.backgroundColor)),
-                                  Text(direction == TransactionDirection.incoming
-                                      ? formattedFiatAmount
-                                      : '- ' + formattedFiatAmount,
-                                      style: TextStyle(
-                                          fontSize: 14,
-                                          color: Theme.of(context).textTheme
-                                              .overline.backgroundColor))
-                                ]),
-                          ],
-                        ),
-                      ),
-                    ))
+                                          color: Colors.white)))
+                            ]),
+                        Row(
+                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                            children: <Widget>[
+                              Text(formattedDate,
+                                  style: TextStyle(
+                                      fontSize: 14,
+                                      color: Theme.of(context)
+                                          .textTheme
+                                          .overline
+                                          .backgroundColor)),
+                              Text(formattedFiatAmount,
+                                  style: TextStyle(
+                                      fontSize: 14,
+                                      color: Theme.of(context)
+                                          .textTheme
+                                          .overline
+                                          .backgroundColor))
+                            ]),
+                      ],
+                    ),
+                  ),
+                )
               ]),
         ));
   }
diff --git a/lib/view_model/settings/settings_view_model.dart b/lib/view_model/settings/settings_view_model.dart
index 61ffda19b..bac456e79 100644
--- a/lib/view_model/settings/settings_view_model.dart
+++ b/lib/view_model/settings/settings_view_model.dart
@@ -40,7 +40,9 @@ abstract class SettingsViewModelBase with Store {
         PickerListItem(
             title: S.current.settings_display_balance_as,
             items: BalanceDisplayMode.all,
-            selectedItem: () => balanceDisplayMode),
+            selectedItem: () => balanceDisplayMode,
+            onItemSelected: (BalanceDisplayMode mode) =>
+                _settingsStore.balanceDisplayMode = mode),
         PickerListItem(
             title: S.current.settings_currency,
             items: FiatCurrency.all,
@@ -204,6 +206,7 @@ abstract class SettingsViewModelBase with Store {
   @action
   void setFiatCurrency(FiatCurrency value) =>
       _settingsStore.fiatCurrency = value;
+
   @action
   void setShouldSaveRecipientAddress(bool value) =>
       _settingsStore.shouldSaveRecipientAddress = value;

From dcdc411d41a281d85501177a99b4453b5f946322 Mon Sep 17 00:00:00 2001
From: M <m@cakewallet.com>
Date: Sat, 26 Sep 2020 15:19:33 +0300
Subject: [PATCH 6/8] Fixes

---
 lib/router.dart                               |  4 ++--
 lib/src/screens/dashboard/dashboard_page.dart | 16 +++++--------
 .../dashboard/widgets/balance_page.dart       |  2 +-
 .../screens/wallet_list/wallet_list_page.dart |  3 ++-
 lib/src/screens/welcome/welcome_page.dart     |  4 ++--
 .../dashboard/balance_view_model.dart         |  4 ++++
 pubspec.lock                                  | 23 ++++++++++++-------
 7 files changed, 32 insertions(+), 24 deletions(-)

diff --git a/lib/router.dart b/lib/router.dart
index 5ae418395..5213758f2 100644
--- a/lib/router.dart
+++ b/lib/router.dart
@@ -67,7 +67,7 @@ class Router {
                     .pushNamed(Routes.newWallet, arguments: type)));
 
       case Routes.newWallet:
-        final type = settings.arguments as WalletType;
+        final type = WalletType.monero; // settings.arguments as WalletType;
         final walletNewVM = getIt.get<WalletNewVM>(param1: type);
 
         return CupertinoPageRoute<void>(
@@ -97,7 +97,7 @@ class Router {
             builder: (_) => RestoreOptionsPage(type: type));
 
       case Routes.restoreWalletOptions:
-        final type = settings.arguments as WalletType;
+        final type = WalletType.monero; //settings.arguments as WalletType;
 
         return CupertinoPageRoute<void>(
             builder: (_) => RestoreWalletOptionsPage(
diff --git a/lib/src/screens/dashboard/dashboard_page.dart b/lib/src/screens/dashboard/dashboard_page.dart
index 16cce7518..fecaec430 100644
--- a/lib/src/screens/dashboard/dashboard_page.dart
+++ b/lib/src/screens/dashboard/dashboard_page.dart
@@ -108,17 +108,13 @@ class DashboardPage extends BasePage {
             mainAxisAlignment: MainAxisAlignment.spaceBetween,
             children: <Widget>[
               ActionButton(
-                image: sendImage,
-                title: S.of(context).send,
-                route: Routes.send,
-                alignment: Alignment.centerLeft,
-              ),
+                  image: sendImage,
+                  title: S.of(context).send,
+                  route: Routes.send),
               ActionButton(
-                image: sendImage,
-                title: S.of(context).send,
-                route: Routes.send,
-                alignment: Alignment.centerLeft,
-              ),
+                  image: exchangeImage,
+                  title: S.of(context).exchange,
+                  route: Routes.exchange),
             ],
           ),
         )
diff --git a/lib/src/screens/dashboard/widgets/balance_page.dart b/lib/src/screens/dashboard/widgets/balance_page.dart
index 519f21960..e6c0ccef7 100644
--- a/lib/src/screens/dashboard/widgets/balance_page.dart
+++ b/lib/src/screens/dashboard/widgets/balance_page.dart
@@ -20,7 +20,7 @@ class BalancePage extends StatelessWidget {
             children: <Widget>[
               Observer(builder: (_) {
                 return Text(
-                  dashboardViewModel.wallet.currency.toString(),
+                  dashboardViewModel.balanceViewModel.currency.toString(),
                   style: TextStyle(
                       fontSize: 40,
                       fontWeight: FontWeight.bold,
diff --git a/lib/src/screens/wallet_list/wallet_list_page.dart b/lib/src/screens/wallet_list/wallet_list_page.dart
index 694c338e4..0b845f3ed 100644
--- a/lib/src/screens/wallet_list/wallet_list_page.dart
+++ b/lib/src/screens/wallet_list/wallet_list_page.dart
@@ -1,4 +1,5 @@
 import 'package:cake_wallet/src/screens/wallet_list/widgets/wallet_menu_alert.dart';
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter_mobx/flutter_mobx.dart';
@@ -73,7 +74,7 @@ class WalletListBodyState extends State<WalletListBody> {
 
                     return GestureDetector(
                       onTap: () {
-                        showDialog<void>(
+                        showPopUp<void>(
                             context: context,
                             builder: (dialogContext) {
                               return WalletMenuAlert(
diff --git a/lib/src/screens/welcome/welcome_page.dart b/lib/src/screens/welcome/welcome_page.dart
index 78cd04835..aa0d5b80c 100644
--- a/lib/src/screens/welcome/welcome_page.dart
+++ b/lib/src/screens/welcome/welcome_page.dart
@@ -103,7 +103,7 @@ class WelcomePage extends BasePage {
                     Padding(
                       padding: EdgeInsets.only(top: 24),
                       child: PrimaryImageButton(
-                        onPressed: () => Navigator.pushNamed(context, Routes.newWalletFromWelcome),
+                        onPressed: () => Navigator.pushNamed(context, Routes.newWallet),
                         image: newWalletImage,
                         text: S.of(context).create_new,
                         color: Theme.of(context).accentTextTheme.subtitle.decorationColor,
@@ -113,7 +113,7 @@ class WelcomePage extends BasePage {
                     Padding(
                       padding: EdgeInsets.only(top: 10),
                       child: PrimaryImageButton(
-                          onPressed: () => Navigator.pushNamed(context, Routes.restoreWalletOptionsFromWelcome),
+                          onPressed: () => Navigator.pushNamed(context, Routes.restoreWalletOptions),
                           image: restoreWalletImage,
                           text: S.of(context).restore_wallet,
                           color: Theme.of(context).accentTextTheme.caption.color,
diff --git a/lib/view_model/dashboard/balance_view_model.dart b/lib/view_model/dashboard/balance_view_model.dart
index 23fd578f1..58978c946 100644
--- a/lib/view_model/dashboard/balance_view_model.dart
+++ b/lib/view_model/dashboard/balance_view_model.dart
@@ -1,5 +1,6 @@
 import 'package:cake_wallet/bitcoin/bitcoin_wallet.dart';
 import 'package:cake_wallet/core/wallet_base.dart';
+import 'package:cake_wallet/entities/crypto_currency.dart';
 import 'package:cake_wallet/monero/monero_wallet.dart';
 import 'package:cake_wallet/entities/balance_display_mode.dart';
 import 'package:cake_wallet/entities/calculate_fiat_amount.dart';
@@ -92,6 +93,9 @@ abstract class BalanceViewModelBase with Store {
     return null;
   }
 
+  @computed
+  CryptoCurrency get currency => appStore.wallet.currency;
+
   String _getFiatBalance({double price, String cryptoAmount}) {
     if (cryptoAmount == null) {
       return '0.00';
diff --git a/pubspec.lock b/pubspec.lock
index df34727ee..612b1ac91 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -42,7 +42,7 @@ packages:
       name: async
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.4.1"
+    version: "2.4.2"
   auto_size_text:
     dependency: "direct main"
     description:
@@ -210,7 +210,7 @@ packages:
       name: collection
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.14.12"
+    version: "1.14.13"
   connectivity:
     dependency: "direct main"
     description:
@@ -330,6 +330,13 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "1.0.2"
+  fake_async:
+    dependency: transitive
+    description:
+      name: fake_async
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.0"
   ffi:
     dependency: transitive
     description:
@@ -547,7 +554,7 @@ packages:
       name: matcher
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.12.6"
+    version: "0.12.8"
   meta:
     dependency: transitive
     description:
@@ -617,7 +624,7 @@ packages:
       name: path
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.6.4"
+    version: "1.7.0"
   path_drawing:
     dependency: transitive
     description:
@@ -867,7 +874,7 @@ packages:
       name: stack_trace
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.9.3"
+    version: "1.9.5"
   stream_channel:
     dependency: transitive
     description:
@@ -902,7 +909,7 @@ packages:
       name: test_api
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.2.15"
+    version: "0.2.17"
   time:
     dependency: transitive
     description:
@@ -923,7 +930,7 @@ packages:
       name: typed_data
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.6"
+    version: "1.2.0"
   url_launcher:
     dependency: "direct main"
     description:
@@ -1023,5 +1030,5 @@ packages:
     source: hosted
     version: "2.2.1"
 sdks:
-  dart: ">=2.7.0 <3.0.0"
+  dart: ">=2.9.0-14.0.dev <3.0.0"
   flutter: ">=1.12.13+hotfix.5 <2.0.0"

From 51cf11127c54149022b22c626cb3ba2207b5c742 Mon Sep 17 00:00:00 2001
From: M <m@cakewallet.com>
Date: Sat, 26 Sep 2020 22:17:31 +0300
Subject: [PATCH 7/8] Fixes

---
 lib/core/contact_service.dart                 |   4 +-
 lib/di.dart                                   |  17 +-
 lib/entities/contact_record.dart              |  40 ++++
 lib/entities/node.dart                        |   3 +
 lib/entities/record.dart                      |  35 ++++
 lib/reactions/bootstrap.dart                  |   2 +
 lib/reactions/on_current_node_change.dart     |  17 ++
 lib/router.dart                               |   3 +-
 .../screens/contact/contact_list_page.dart    |  12 +-
 .../monero_accounts/widgets/account_tile.dart |   2 +-
 lib/src/screens/nodes/nodes_list_page.dart    | 153 ++++++++-------
 lib/store/contact_list_store.dart             |   6 +-
 lib/store/node_list_store.dart                |  10 +-
 lib/store/settings_store.dart                 |  13 +-
 lib/utils/item_cell.dart                      |  11 +-
 lib/utils/mobx.dart                           | 178 +++++++++++-------
 .../contact_list/contact_list_view_model.dart |   9 +-
 .../contact_list/contact_view_model.dart      |  12 +-
 .../node_list/node_list_view_model.dart       |  52 +----
 pubspec.lock                                  |  35 ++--
 pubspec.yaml                                  |   2 +-
 21 files changed, 362 insertions(+), 254 deletions(-)
 create mode 100644 lib/entities/contact_record.dart
 create mode 100644 lib/entities/record.dart
 create mode 100644 lib/reactions/on_current_node_change.dart

diff --git a/lib/core/contact_service.dart b/lib/core/contact_service.dart
index c7027fa8f..3f2a46203 100644
--- a/lib/core/contact_service.dart
+++ b/lib/core/contact_service.dart
@@ -22,7 +22,7 @@ class ContactService {
     if (index >= 0) {
       _forceUpdateContactListStore();
     } else {
-      contactListStore.contacts.add(contact);
+      // contactListStore.contacts.add(contact);
     }
   }
 
@@ -33,6 +33,6 @@ class ContactService {
 
   void _forceUpdateContactListStore() {
     contactListStore.contacts.clear();
-    contactListStore.contacts.addAll(contactSource.values);
+    // contactListStore.contacts.addAll(contactSource.values);
   }
 }
diff --git a/lib/di.dart b/lib/di.dart
index 2010a6158..d6ccde3cc 100644
--- a/lib/di.dart
+++ b/lib/di.dart
@@ -2,6 +2,7 @@ import 'package:cake_wallet/bitcoin/bitcoin_wallet_service.dart';
 import 'package:cake_wallet/core/contact_service.dart';
 import 'package:cake_wallet/core/wallet_service.dart';
 import 'package:cake_wallet/entities/biometric_auth.dart';
+import 'package:cake_wallet/entities/contact_record.dart';
 import 'package:cake_wallet/monero/monero_wallet_service.dart';
 import 'package:cake_wallet/entities/contact.dart';
 import 'package:cake_wallet/entities/node.dart';
@@ -197,7 +198,8 @@ Future setup(
   getIt
       .registerFactoryParam<AuthPage, void Function(bool, AuthPageState), bool>(
           (onAuthFinished, closable) => AuthPage(getIt.get<AuthViewModel>(),
-              onAuthenticationFinished: onAuthFinished, closable: closable ?? false));
+              onAuthenticationFinished: onAuthFinished,
+              closable: closable ?? false));
 
   getIt.registerFactory<DashboardPage>(() => DashboardPage(
       walletViewModel: getIt.get<DashboardViewModel>(),
@@ -282,8 +284,8 @@ Future setup(
 
   getIt.registerFactory(() => WalletKeysPage(getIt.get<WalletKeysViewModel>()));
 
-  getIt.registerFactoryParam<ContactViewModel, Contact, void>(
-      (Contact contact, _) => ContactViewModel(
+  getIt.registerFactoryParam<ContactViewModel, ContactRecord, void>(
+      (ContactRecord contact, _) => ContactViewModel(
           contactSource, getIt.get<AppStore>().wallet,
           contact: contact));
 
@@ -296,13 +298,14 @@ Future setup(
       (bool isEditable, _) => ContactListPage(getIt.get<ContactListViewModel>(),
           isEditable: isEditable));
 
-  getIt.registerFactoryParam<ContactPage, Contact, void>((Contact contact, _) =>
-      ContactPage(getIt.get<ContactViewModel>(param1: contact)));
+  getIt.registerFactoryParam<ContactPage, ContactRecord, void>(
+      (ContactRecord contact, _) =>
+          ContactPage(getIt.get<ContactViewModel>(param1: contact)));
 
   getIt.registerFactory(() {
     final appStore = getIt.get<AppStore>();
-    return NodeListViewModel(appStore.nodeListStore, nodeSource,
-        appStore.wallet, appStore.settingsStore);
+    return NodeListViewModel(
+        nodeSource, appStore.wallet, appStore.settingsStore);
   });
 
   getIt.registerFactory(() => NodeListPage(getIt.get<NodeListViewModel>()));
diff --git a/lib/entities/contact_record.dart b/lib/entities/contact_record.dart
new file mode 100644
index 000000000..c4f55cc5a
--- /dev/null
+++ b/lib/entities/contact_record.dart
@@ -0,0 +1,40 @@
+import 'package:hive/hive.dart';
+import 'package:mobx/mobx.dart';
+import 'package:cake_wallet/entities/contact.dart';
+import 'package:cake_wallet/entities/crypto_currency.dart';
+import 'package:cake_wallet/entities/record.dart';
+
+part 'contact_record.g.dart';
+
+class ContactRecord = ContactRecordBase with _$ContactRecord;
+
+abstract class ContactRecordBase extends Record<Contact> with Store {
+  ContactRecordBase(Box<Contact> source, Contact original)
+      : super(source, original);
+
+  @observable
+  String name;
+
+  @observable
+  String address;
+
+  @observable
+  CryptoCurrency type;
+
+  @override
+  void toBind(Contact original) {
+    reaction((_) => name, (String name) => original.name = name);
+    reaction((_) => address, (String address) => original.address = address);
+    reaction(
+        (_) => type,
+        (CryptoCurrency currency) =>
+            original.updateCryptoCurrency(currency: currency));
+  }
+
+  @override
+  void fromBind(Contact original) {
+    name = original.name;
+    address = original.address;
+    type = original.type;
+  }
+}
diff --git a/lib/entities/node.dart b/lib/entities/node.dart
index 74643112a..f79b8b2e0 100644
--- a/lib/entities/node.dart
+++ b/lib/entities/node.dart
@@ -38,6 +38,9 @@ class Node extends HiveObject with Keyable {
   @HiveField(3)
   int typeRaw;
 
+  @override
+  dynamic get keyIndex => key;
+
   WalletType get type => deserializeFromInt(typeRaw);
 
   set type(WalletType type) => typeRaw = serializeToInt(type);
diff --git a/lib/entities/record.dart b/lib/entities/record.dart
new file mode 100644
index 000000000..3c21441cc
--- /dev/null
+++ b/lib/entities/record.dart
@@ -0,0 +1,35 @@
+import 'dart:async';
+
+import 'package:cake_wallet/utils/mobx.dart';
+import 'package:hive/hive.dart';
+
+abstract class Record<T extends HiveObject> with Keyable {
+  Record(this._source, this.original) {
+    _listener?.cancel();
+    _listener = _source.watch(key: original.key).listen((event) {
+      if (!event.deleted) {
+        fromBind(event.value as T);
+      }
+    });
+
+    fromBind(original);
+    toBind(original);
+  }
+
+  dynamic get key => original.key;
+
+  @override
+  dynamic get keyIndex => key;
+
+  final T original;
+
+  final Box<T> _source;
+
+  StreamSubscription<BoxEvent> _listener;
+
+  void fromBind(T original);
+
+  void toBind(T original);
+
+  Future<void> save() => original.save();
+}
diff --git a/lib/reactions/bootstrap.dart b/lib/reactions/bootstrap.dart
index 2ffb5d376..fef73c46f 100644
--- a/lib/reactions/bootstrap.dart
+++ b/lib/reactions/bootstrap.dart
@@ -1,4 +1,5 @@
 import 'dart:async';
+import 'package:cake_wallet/reactions/on_current_node_change.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/widgets.dart';
 import 'package:shared_preferences/shared_preferences.dart';
@@ -31,4 +32,5 @@ Future<void> bootstrap(GlobalKey<NavigatorState> navigatorKey) async {
   startCurrentWalletChangeReaction(
       appStore, settingsStore, fiatConversionStore);
   startCurrentFiatChangeReaction(appStore, settingsStore);
+  startOnCurrentNodeChangeReaction(appStore);
 }
diff --git a/lib/reactions/on_current_node_change.dart b/lib/reactions/on_current_node_change.dart
new file mode 100644
index 000000000..c03bbac21
--- /dev/null
+++ b/lib/reactions/on_current_node_change.dart
@@ -0,0 +1,17 @@
+import 'package:mobx/mobx.dart';
+import 'package:cake_wallet/entities/node.dart';
+import 'package:cake_wallet/store/app_store.dart';
+
+ReactionDisposer _onCurrentNodeChangeReaction;
+
+void startOnCurrentNodeChangeReaction(AppStore appStore) {
+  _onCurrentNodeChangeReaction?.reaction?.dispose();
+  _onCurrentNodeChangeReaction =
+      reaction((_) => appStore.settingsStore.currentNode, (Node node) async {
+    try {
+      await appStore.wallet.connectToNode(node: node);
+    } catch (e) {
+      print(e.toString());
+    }
+  });
+}
diff --git a/lib/router.dart b/lib/router.dart
index 5213758f2..cc660d9a0 100644
--- a/lib/router.dart
+++ b/lib/router.dart
@@ -1,3 +1,4 @@
+import 'package:cake_wallet/entities/contact_record.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'package:cake_wallet/routes.dart';
@@ -252,7 +253,7 @@ class Router {
       case Routes.addressBookAddContact:
         return CupertinoPageRoute<void>(
             builder: (_) =>
-                getIt.get<ContactPage>(param1: settings.arguments as Contact));
+                getIt.get<ContactPage>(param1: settings.arguments as ContactRecord));
 
       case Routes.showKeys:
         return MaterialPageRoute<void>(
diff --git a/lib/src/screens/contact/contact_list_page.dart b/lib/src/screens/contact/contact_list_page.dart
index 044484f49..37c37876f 100644
--- a/lib/src/screens/contact/contact_list_page.dart
+++ b/lib/src/screens/contact/contact_list_page.dart
@@ -164,17 +164,17 @@ class ContactListPage extends BasePage {
                                final isDelete =
                                    await showAlertDialog(context) ?? false;
 
-                               if (isDelete) {
-                                 await contactListViewModel
-                                     .delete(contact);
-                               }
+                               // if (isDelete) {
+                               //   await contactListViewModel
+                               //       .delete(contact);
+                               // }
                              },
                            ),
                          ],
                          dismissal: SlidableDismissal(
                            child: SlidableDrawerDismissal(),
-                           onDismissed: (actionType) async =>
-                           await contactListViewModel.delete(contact),
+                           onDismissed: (actionType) async => null,
+                           // await contactListViewModel.delete(contact),
                            onWillDismiss: (actionType) async =>
                                showAlertDialog(context),
                          ),
diff --git a/lib/src/screens/monero_accounts/widgets/account_tile.dart b/lib/src/screens/monero_accounts/widgets/account_tile.dart
index c39758bd5..50238a67c 100644
--- a/lib/src/screens/monero_accounts/widgets/account_tile.dart
+++ b/lib/src/screens/monero_accounts/widgets/account_tile.dart
@@ -31,7 +31,7 @@ class AccountTile extends StatelessWidget {
           accountName,
           style: TextStyle(
             fontSize: 18,
-            fontWeight: FontWeight.bold,
+            fontWeight: FontWeight.w600,
             fontFamily: 'Poppins',
             color: textColor,
             decoration: TextDecoration.none,
diff --git a/lib/src/screens/nodes/nodes_list_page.dart b/lib/src/screens/nodes/nodes_list_page.dart
index 84e87a3a5..b0bc8c15f 100644
--- a/lib/src/screens/nodes/nodes_list_page.dart
+++ b/lib/src/screens/nodes/nodes_list_page.dart
@@ -67,87 +67,86 @@ class NodeListPage extends BasePage {
             sectionCount: 2,
             context: context,
             itemBuilder: (_, sectionIndex, index) {
-              if (sectionIndex == 0) {
-                return NodeHeaderListRow(
-                    title: S.of(context).add_new_node,
-                    onTap: (_) async =>
-                        await Navigator.of(context).pushNamed(Routes.newNode));
-              }
+              return Observer(builder: (_) {
+                if (sectionIndex == 0) {
+                  return NodeHeaderListRow(
+                      title: S.of(context).add_new_node,
+                      onTap: (_) async => await Navigator.of(context)
+                          .pushNamed(Routes.newNode));
+                }
 
-              final node = nodeListViewModel.nodes[index];
-              final nodeListRow = NodeListRow(
-                  title: node.value.uri,
-                  isSelected: node.isSelected,
-                  isAlive: node.value.requestNode(),
-                  onTap: (_) async {
-                    if (node.isSelected) {
-                      return;
-                    }
+                final node = nodeListViewModel.nodes[index];
+                final isSelected = node.keyIndex ==
+                    nodeListViewModel.settingsStore.currentNode.keyIndex;
+                final nodeListRow = NodeListRow(
+                    title: node.uri,
+                    isSelected: isSelected,
+                    isAlive: node.requestNode(),
+                    onTap: (_) async {
+                      if (isSelected) {
+                        return;
+                      }
 
-                    await showPopUp<void>(
-                        context: context,
-                        builder: (BuildContext context) {
-                          return AlertDialog(
-                            content: Text(
-                              S.of(context).change_current_node(node.value.uri),
-                              textAlign: TextAlign.center,
+                      await showPopUp<void>(
+                          context: context,
+                          builder: (BuildContext context) {
+                            // FIXME: Add translation.
+                            return AlertWithTwoActions(
+                                alertTitle: 'Change current node',
+                                alertContent:
+                                    S.of(context).change_current_node(node.uri),
+                                leftButtonText: S.of(context).cancel,
+                                rightButtonText: S.of(context).change,
+                                actionLeftButton: () =>
+                                    Navigator.of(context).pop(),
+                                actionRightButton: () async {
+                                  await nodeListViewModel.setAsCurrent(node);
+                                  Navigator.of(context).pop();
+                                });
+                          });
+                    });
+
+                final dismissibleRow = Dismissible(
+                    key: Key('${node.keyIndex}'),
+                    confirmDismiss: (direction) async {
+                      return await showPopUp(
+                          context: context,
+                          builder: (BuildContext context) {
+                            return AlertWithTwoActions(
+                                alertTitle: S.of(context).remove_node,
+                                alertContent: S.of(context).remove_node_message,
+                                rightButtonText: S.of(context).remove,
+                                leftButtonText: S.of(context).cancel,
+                                actionRightButton: () =>
+                                    Navigator.pop(context, true),
+                                actionLeftButton: () =>
+                                    Navigator.pop(context, false));
+                          });
+                    },
+                    onDismissed: (direction) async =>
+                        nodeListViewModel.delete(node),
+                    direction: DismissDirection.endToStart,
+                    background: Container(
+                        padding: EdgeInsets.only(right: 10.0),
+                        alignment: AlignmentDirectional.centerEnd,
+                        color: Palette.red,
+                        child: Column(
+                          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+                          children: <Widget>[
+                            const Icon(
+                              CupertinoIcons.delete,
+                              color: Colors.white,
                             ),
-                            actions: <Widget>[
-                              FlatButton(
-                                  onPressed: () => Navigator.pop(context),
-                                  child: Text(S.of(context).cancel)),
-                              FlatButton(
-                                  onPressed: () async {
-                                    Navigator.of(context).pop();
-                                    await nodeListViewModel
-                                        .setAsCurrent(node.value);
-                                  },
-                                  child: Text(S.of(context).change)),
-                            ],
-                          );
-                        });
-                  });
+                            Text(
+                              S.of(context).delete,
+                              style: TextStyle(color: Colors.white),
+                            )
+                          ],
+                        )),
+                    child: nodeListRow);
 
-              final dismissibleRow = Dismissible(
-                  key: Key('${node.keyIndex}'),
-                  confirmDismiss: (direction) async {
-                    return await showPopUp(
-                        context: context,
-                        builder: (BuildContext context) {
-                          return AlertWithTwoActions(
-                              alertTitle: S.of(context).remove_node,
-                              alertContent: S.of(context).remove_node_message,
-                              rightButtonText: S.of(context).remove,
-                              leftButtonText: S.of(context).cancel,
-                              actionRightButton: () =>
-                                  Navigator.pop(context, true),
-                              actionLeftButton: () =>
-                                  Navigator.pop(context, false));
-                        });
-                  },
-                  onDismissed: (direction) async =>
-                      nodeListViewModel.delete(node.value),
-                  direction: DismissDirection.endToStart,
-                  background: Container(
-                      padding: EdgeInsets.only(right: 10.0),
-                      alignment: AlignmentDirectional.centerEnd,
-                      color: Palette.red,
-                      child: Column(
-                        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
-                        children: <Widget>[
-                          const Icon(
-                            CupertinoIcons.delete,
-                            color: Colors.white,
-                          ),
-                          Text(
-                            S.of(context).delete,
-                            style: TextStyle(color: Colors.white),
-                          )
-                        ],
-                      )),
-                  child: nodeListRow);
-
-              return node.isSelected ? nodeListRow : dismissibleRow;
+                return isSelected ? nodeListRow : dismissibleRow;
+              });
             },
             itemCounter: (int sectionIndex) {
               if (sectionIndex == 0) {
diff --git a/lib/store/contact_list_store.dart b/lib/store/contact_list_store.dart
index ca3d0bcf0..85194e0d6 100644
--- a/lib/store/contact_list_store.dart
+++ b/lib/store/contact_list_store.dart
@@ -1,12 +1,12 @@
 import 'package:mobx/mobx.dart';
-import 'package:cake_wallet/entities/contact.dart';
+import 'package:cake_wallet/entities/contact_record.dart';
 
 part 'contact_list_store.g.dart';
 
 class ContactListStore = ContactListStoreBase with _$ContactListStore;
 
 abstract class ContactListStoreBase with Store {
-  ContactListStoreBase() : contacts = ObservableList<Contact>();
+  ContactListStoreBase() : contacts = ObservableList<ContactRecord>();
 
-  final ObservableList<Contact> contacts;
+  final ObservableList<ContactRecord> contacts;
 }
diff --git a/lib/store/node_list_store.dart b/lib/store/node_list_store.dart
index 0ff958e3f..56fe0333a 100644
--- a/lib/store/node_list_store.dart
+++ b/lib/store/node_list_store.dart
@@ -22,17 +22,13 @@ abstract class NodeListStoreBase with Store {
 
     final nodeSource = getIt.get<Box<Node>>();
     _instance = NodeListStore();
-    _instance.replaceValues(nodeSource.values);
+    _instance.nodes.clear();
+    _instance.nodes.addAll(nodeSource.values);
     _onNodesSourceChange?.cancel();
-    _onNodesSourceChange = bindBox(nodeSource, _instance.nodes);
+    _onNodesSourceChange = nodeSource.bindToList(_instance.nodes);
 
     return _instance;
   }
 
   final ObservableList<Node> nodes;
-
-  void replaceValues(Iterable<Node> newNodes) {
-    nodes.clear();
-    nodes.addAll(newNodes);
-  }
 }
diff --git a/lib/store/settings_store.dart b/lib/store/settings_store.dart
index e17ce2de9..d4f6bf95a 100644
--- a/lib/store/settings_store.dart
+++ b/lib/store/settings_store.dart
@@ -21,7 +21,6 @@ class SettingsStore = SettingsStoreBase with _$SettingsStore;
 abstract class SettingsStoreBase with Store {
   SettingsStoreBase(
       {@required SharedPreferences sharedPreferences,
-      @required Box<Node> nodeSource,
       @required FiatCurrency initialFiatCurrency,
       @required TransactionPriority initialTransactionPriority,
       @required BalanceDisplayMode initialBalanceDisplayMode,
@@ -43,10 +42,9 @@ abstract class SettingsStoreBase with Store {
     pinCodeLength = initialPinLength;
     languageCode = initialLanguageCode;
     currentLocale = initialCurrentLocale;
-    itemHeaders = {};
+    currentNode = nodes[WalletType.monero];
     this.nodes = ObservableMap<WalletType, Node>.of(nodes);
     _sharedPreferences = sharedPreferences;
-    _nodeSource = nodeSource;
 
     reaction(
         (_) => allowBiometricalAuthentication,
@@ -58,6 +56,9 @@ abstract class SettingsStoreBase with Store {
         (_) => pinCodeLength,
         (int pinLength) => sharedPreferences.setInt(
             PreferencesKey.currentPinLength, pinLength));
+
+    reaction((_) => currentNode,
+        (Node node) => _saveCurrentNode(node, WalletType.monero));
   }
 
   static const defaultPinLength = 4;
@@ -88,7 +89,7 @@ abstract class SettingsStoreBase with Store {
   int pinCodeLength;
 
   @observable
-  Map<String, String> itemHeaders;
+  Node currentNode;
 
   String languageCode;
 
@@ -97,7 +98,6 @@ abstract class SettingsStoreBase with Store {
   String appVersion;
 
   SharedPreferences _sharedPreferences;
-  Box<Node> _nodeSource;
 
   ObservableMap<WalletType, Node> nodes;
 
@@ -150,7 +150,6 @@ abstract class SettingsStoreBase with Store {
           WalletType.monero: moneroNode,
           WalletType.bitcoin: bitcoinElectrumServer
         },
-        nodeSource: nodeSource,
         appVersion: packageInfo.version,
         initialFiatCurrency: currentFiatCurrency,
         initialTransactionPriority: currentTransactionPriority,
@@ -164,7 +163,7 @@ abstract class SettingsStoreBase with Store {
         initialCurrentLocale: initialCurrentLocale);
   }
 
-  Future<void> setCurrentNode(Node node, WalletType walletType) async {
+  Future<void> _saveCurrentNode(Node node, WalletType walletType) async {
     switch (walletType) {
       case WalletType.bitcoin:
         await _sharedPreferences.setInt(
diff --git a/lib/utils/item_cell.dart b/lib/utils/item_cell.dart
index 4aca57b46..150df6d50 100644
--- a/lib/utils/item_cell.dart
+++ b/lib/utils/item_cell.dart
@@ -1,11 +1,18 @@
 import 'package:flutter/foundation.dart';
+import 'package:mobx/mobx.dart';
 import 'package:cake_wallet/utils/mobx.dart';
 
+// part 'node_list_view_model.g.dart';
+//
+// class NodeListViewModel = NodeListViewModelBase with _$NodeListViewModel;
+
 class ItemCell<Item> with Keyable {
-  ItemCell(this.value, {@required this.isSelected, @required dynamic key}) {
+  ItemCell(this.value, {this.isSelectedBuilder, @required dynamic key}) {
     keyIndex = key;
   }
 
   final Item value;
-  final bool isSelected;
+
+  bool get isSelected => isSelectedBuilder(value);
+  bool Function(Item item) isSelectedBuilder;
 }
diff --git a/lib/utils/mobx.dart b/lib/utils/mobx.dart
index cb2d810e5..b11922f8e 100644
--- a/lib/utils/mobx.dart
+++ b/lib/utils/mobx.dart
@@ -6,36 +6,6 @@ mixin Keyable {
   dynamic keyIndex;
 }
 
-void connectWithTransform<T extends Keyable, Y extends Keyable>(
-    ObservableList<T> source, ObservableList<Y> dest, Y Function(T) transform,
-    {bool Function(T) filter}) {
-  source.observe((ListChange<T> change) {
-    change.elementChanges.forEach((change) {
-      switch (change.type) {
-        case OperationType.add:
-          if (filter?.call(change.newValue as T) ?? true) {
-            dest.add(transform(change.newValue as T));
-          }
-          break;
-        case OperationType.remove:
-          // Hive could has equal index and key
-          dest.removeWhere(
-              (elem) => elem.keyIndex == (change.oldValue.key ?? change.index));
-          break;
-        case OperationType.update:
-          for (var i = 0; i < dest.length; i++) {
-            final item = dest[i];
-
-            if (item.keyIndex == change.newValue.key) {
-              dest[i] = transform(change.newValue as T);
-            }
-          }
-          break;
-      }
-    });
-  });
-}
-
 void connectMapToListWithTransform<T extends Keyable, Y extends Keyable>(
     ObservableMap<dynamic, T> source,
     ObservableList<Y> dest,
@@ -50,8 +20,8 @@ void connectMapToListWithTransform<T extends Keyable, Y extends Keyable>(
         break;
       case OperationType.remove:
         // Hive could has equal index and key
-        dest.removeWhere(
-            (elem) => elem.keyIndex == (change.key ?? change.newValue.keyIndex));
+        dest.removeWhere((elem) =>
+            elem.keyIndex == (change.key ?? change.newValue.keyIndex));
         break;
       case OperationType.update:
         for (var i = 0; i < dest.length; i++) {
@@ -66,54 +36,124 @@ void connectMapToListWithTransform<T extends Keyable, Y extends Keyable>(
   });
 }
 
-void connect<T extends Keyable>(
-    ObservableList<T> source, ObservableList<T> dest) {
-  source.observe((ListChange<T> change) {
-    source.observe((ListChange<T> change) {
-      change.elementChanges.forEach((change) {
-        switch (change.type) {
-          case OperationType.add:
-            // if (filter?.call(change.newValue as T) ?? true) {
-            dest.add(change.newValue as T);
-            // }
-            break;
-          case OperationType.remove:
-            // Hive could has equal index and key
-            dest.removeWhere((elem) =>
-                elem.keyIndex == (change.oldValue.key ?? change.index));
-            break;
-          case OperationType.update:
-            for (var i = 0; i < dest.length; i++) {
-              final item = dest[i];
+typedef Filter<T> = bool Function(T);
+typedef Transform<T, Y> = Y Function(T);
 
-              if (item.keyIndex == change.newValue.key) {
-                dest[i] = change.newValue as T;
-              }
-            }
-            break;
-        }
-      });
-    });
-  });
+enum ChangeType { update, delete, add }
+
+class EntityChange<T extends Keyable> {
+  EntityChange(this.value, this.type, {dynamic key}) : _key = key;
+
+  dynamic get key => _key ?? value.keyIndex;
+  final T value;
+  final ChangeType type;
+  final dynamic _key;
 }
 
-StreamSubscription<BoxEvent> bindBox<T extends Keyable>(
-    Box<T> source, ObservableList<T> dest) {
-  return source.watch().listen((event) {
+extension MobxBindable<T extends Keyable> on Box<T> {
+  StreamSubscription<BoxEvent> bindToList(
+    ObservableList<T> dest, {
+    bool initialFire = false,
+    Filter<T> filter,
+  }) {
+    if (initialFire) {
+      dest.addAll(values);
+    }
+
+    return watch().listen((event) {
+      if (filter != null && !filter(event.value as T)) {
+        return;
+      }
+
+      dest.acceptBoxChange(event);
+    });
+  }
+
+  StreamSubscription<BoxEvent> bindToListWithTransform<Y extends Keyable>(
+    ObservableList<Y> dest,
+    Transform<T, Y> transform, {
+    bool initialFire = false,
+    Filter<T> filter,
+  }) {
+    if (initialFire) {
+      dest.addAll(values.map((value) => transform(value)));
+    }
+
+    return watch().listen((event) {
+      if (filter != null && !filter(event.value as T)) {
+        return;
+      }
+
+      dest.acceptBoxChange(event, transformed: transform(event.value as T));
+    });
+  }
+}
+
+extension HiveBindable<T extends Keyable> on ObservableList<T> {
+  Stream<EntityChange<T>> listen() {
+    // ignore: close_sinks
+    final controller = StreamController<EntityChange<T>>();
+
+    observe((ListChange<T> change) {
+      change.elementChanges.forEach((change) {
+        ChangeType type;
+
+        switch (change.type) {
+          case OperationType.add:
+            type = ChangeType.add;
+            break;
+          case OperationType.remove:
+            type = ChangeType.delete;
+            break;
+          case OperationType.update:
+            type = ChangeType.update;
+            break;
+        }
+
+        final value = change.newValue as T;
+        controller.add(EntityChange(value, type));
+      });
+    });
+
+    return controller.stream;
+  }
+
+  StreamSubscription<EntityChange<T>> bindToList(ObservableList<T> dest) =>
+      listen().listen((event) => dest.acceptEntityChange(event));
+
+  void acceptBoxChange(BoxEvent event, {T transformed}) {
     if (event.deleted) {
-      dest.removeWhere((el) => el.keyIndex == event.key);
+      removeWhere((el) => el.keyIndex == event.key);
+    }
+
+    final dynamic value = transformed ?? event.value;
+
+    if (value is T) {
+      final index = indexWhere((el) => el.keyIndex == value.keyIndex);
+
+      if (index > -1) {
+        this.setAll(index, [value]); // FIXME: fixme
+      } else {
+        add(value);
+      }
+    }
+  }
+
+  void acceptEntityChange(EntityChange<T> event) {
+    if (event.type == ChangeType.delete) {
+      removeWhere((el) => el.keyIndex == event.key);
     }
 
     final dynamic value = event.value;
 
     if (value is T) {
-      final elIndex = dest.indexWhere((el) => el.keyIndex == value.keyIndex);
+      final index = indexWhere((el) => el.keyIndex == value.keyIndex);
 
-      if (elIndex > -1) {
-        dest[elIndex] = value;
+      if (index > -1) {
+        this.setAll(index, [value]); // FIXME: fixme
       } else {
-        dest.add(value);
+        add(value);
       }
     }
-  });
+  }
 }
diff --git a/lib/view_model/contact_list/contact_list_view_model.dart b/lib/view_model/contact_list/contact_list_view_model.dart
index d222cb6dd..aa3a5e2c7 100644
--- a/lib/view_model/contact_list/contact_list_view_model.dart
+++ b/lib/view_model/contact_list/contact_list_view_model.dart
@@ -1,4 +1,5 @@
 import 'dart:async';
+import 'package:cake_wallet/entities/contact_record.dart';
 import 'package:hive/hive.dart';
 import 'package:mobx/mobx.dart';
 import 'package:cake_wallet/core/contact_service.dart';
@@ -14,19 +15,21 @@ class ContactListViewModel = ContactListViewModelBase
 abstract class ContactListViewModelBase with Store {
   ContactListViewModelBase(
       this.addressBookStore, this.contactService, this.contactSource) {
-    _subscription = bindBox(contactSource, addressBookStore.contacts);
+    _subscription = contactSource.bindToListWithTransform(addressBookStore.contacts,
+        (Contact contact) => ContactRecord(contactSource, contact),
+        initialFire: true);
   }
 
   final ContactListStore addressBookStore;
   final ContactService contactService;
   final Box<Contact> contactSource;
 
-  ObservableList<Contact> get contacts => addressBookStore.contacts;
+  ObservableList<ContactRecord>  get contacts => addressBookStore.contacts;
 
   StreamSubscription<BoxEvent> _subscription;
 
   void dispose() {
-    _subscription.cancel();
+    // _subscription.cancel();
   }
 
   Future<void> delete(Contact contact) async => contactService.delete(contact);
diff --git a/lib/view_model/contact_list/contact_view_model.dart b/lib/view_model/contact_list/contact_view_model.dart
index 059b6a210..cb48260b5 100644
--- a/lib/view_model/contact_list/contact_view_model.dart
+++ b/lib/view_model/contact_list/contact_view_model.dart
@@ -1,3 +1,4 @@
+import 'package:cake_wallet/entities/contact_record.dart';
 import 'package:hive/hive.dart';
 import 'package:mobx/mobx.dart';
 import 'package:cake_wallet/core/execution_state.dart';
@@ -11,7 +12,7 @@ part 'contact_view_model.g.dart';
 class ContactViewModel = ContactViewModelBase with _$ContactViewModel;
 
 abstract class ContactViewModelBase with Store {
-  ContactViewModelBase(this._contacts, this._wallet, {Contact contact})
+  ContactViewModelBase(this._contacts, this._wallet, {ContactRecord contact})
       : state = InitialExecutionState(),
         currencies = CryptoCurrency.all,
         _contact = contact {
@@ -41,7 +42,7 @@ abstract class ContactViewModelBase with Store {
   final List<CryptoCurrency> currencies;
   final WalletBase _wallet;
   final Box<Contact> _contacts;
-  final Contact _contact;
+  final ContactRecord _contact;
 
   @action
   void reset() {
@@ -57,9 +58,12 @@ abstract class ContactViewModelBase with Store {
       if (_contact != null) {
         _contact.name = name;
         _contact.address = address;
-        _contact.updateCryptoCurrency(currency: currency);
-        await _contacts.put(_contact.key, _contact);
+        _contact.type = currency;
+        await _contact.save();
+        // await _contacts.put(_contact.key, _contact);
       } else {
+        // final contact = ContactRecordBase.create(_contacts, name, address, currency);
+        // await contact.save();
         await _contacts
             .add(Contact(name: name, address: address, type: currency));
       }
diff --git a/lib/view_model/node_list/node_list_view_model.dart b/lib/view_model/node_list/node_list_view_model.dart
index 4ca46c9fc..2231ff7c9 100644
--- a/lib/view_model/node_list/node_list_view_model.dart
+++ b/lib/view_model/node_list/node_list_view_model.dart
@@ -1,45 +1,29 @@
 import 'package:hive/hive.dart';
 import 'package:mobx/mobx.dart';
 import 'package:cake_wallet/core/wallet_base.dart';
+import 'package:cake_wallet/store/settings_store.dart';
 import 'package:cake_wallet/entities/node.dart';
 import 'package:cake_wallet/entities/node_list.dart';
-import 'package:cake_wallet/store/node_list_store.dart';
-import 'package:cake_wallet/store/settings_store.dart';
 import 'package:cake_wallet/entities/default_settings_migration.dart';
 import 'package:cake_wallet/entities/wallet_type.dart';
 import 'package:cake_wallet/utils/mobx.dart';
-import 'package:cake_wallet/utils/item_cell.dart';
 
 part 'node_list_view_model.g.dart';
 
 class NodeListViewModel = NodeListViewModelBase with _$NodeListViewModel;
 
 abstract class NodeListViewModelBase with Store {
-  NodeListViewModelBase(
-      this._nodeListStore, this._nodeSource, this._wallet, this._settingsStore)
-      : nodes = ObservableList<ItemCell<Node>>() {
-    final currentNode = _settingsStore.getCurrentNode(_wallet.type);
-    final values = _nodeListStore.nodes;
-    nodes.clear();
-    nodes.addAll(values.where((Node node) => node.type == _wallet.type).map(
-        (Node val) => ItemCell<Node>(val,
-            isSelected: val.key == currentNode.key, key: val.key)));
-    connectWithTransform(
-        _nodeListStore.nodes,
-        nodes,
-        (Node val) => ItemCell<Node>(val,
-            isSelected: val.key == currentNode.key, key: val.key),
-        filter: (Node val) => val.type == _wallet.type);
-    reaction((_) => _settingsStore.nodes[_wallet.type],
-        (Node _) => _updateCurrentNode());
+  NodeListViewModelBase(this._nodeSource, this._wallet, this.settingsStore)
+      : nodes = ObservableList<Node>() {
+    _nodeSource.bindToList(nodes,
+        filter: (Node val) => val.type == _wallet.type, initialFire: true);
   }
 
-  ObservableList<ItemCell<Node>> nodes;
+  final ObservableList<Node> nodes;
+  final SettingsStore settingsStore;
 
   final WalletBase _wallet;
   final Box<Node> _nodeSource;
-  final NodeListStore _nodeListStore;
-  final SettingsStore _settingsStore;
 
   Future<void> reset() async {
     await resetToDefault(_nodeSource);
@@ -64,24 +48,6 @@ abstract class NodeListViewModelBase with Store {
 
   Future<void> delete(Node node) async => _nodeSource.delete(node.key);
 
-  Future<void> setAsCurrent(Node node) async {
-    await _settingsStore.setCurrentNode(node, _wallet.type);
-    _updateCurrentNode();
-    await _wallet.connectToNode(node: node);
-  }
-
-  @action
-  void _updateCurrentNode() {
-    final currentNode = _settingsStore.getCurrentNode(_wallet.type);
-
-    for (var i = 0; i < nodes.length; i++) {
-      final item = nodes[i];
-      final isSelected = item.value.key == currentNode.key;
-
-      if (item.isSelected != isSelected) {
-        nodes[i] = ItemCell<Node>(item.value,
-            isSelected: isSelected, key: item.keyIndex);
-      }
-    }
-  }
+  Future<void> setAsCurrent(Node node) async =>
+      settingsStore.currentNode = node;
 }
diff --git a/pubspec.lock b/pubspec.lock
index 612b1ac91..f9bbbbd26 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -217,7 +217,7 @@ packages:
       name: connectivity
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.4.9+2"
+    version: "0.4.9+3"
   connectivity_for_web:
     dependency: transitive
     description:
@@ -252,7 +252,7 @@ packages:
       name: crypto
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.4"
+    version: "2.1.5"
   csslib:
     dependency: transitive
     description:
@@ -395,7 +395,7 @@ packages:
       name: flutter_plugin_android_lifecycle
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.9"
+    version: "1.0.11"
   flutter_secure_storage:
     dependency: "direct main"
     description:
@@ -470,7 +470,7 @@ packages:
       name: hive_generator
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.7.1"
+    version: "0.7.2+1"
   html:
     dependency: transitive
     description:
@@ -505,7 +505,7 @@ packages:
       name: image
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.12"
+    version: "2.1.18"
   intl:
     dependency: "direct main"
     description:
@@ -533,14 +533,14 @@ packages:
       name: json_annotation
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.0.1"
+    version: "3.1.0"
   local_auth:
     dependency: "direct main"
     description:
       name: local_auth
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.6.3+1"
+    version: "0.6.3+2"
   logging:
     dependency: transitive
     description:
@@ -645,7 +645,7 @@ packages:
       name: path_provider
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.6.17"
+    version: "1.6.18"
   path_provider_linux:
     dependency: transitive
     description:
@@ -687,7 +687,7 @@ packages:
       name: petitparser
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.4.0"
+    version: "3.0.4"
   platform:
     dependency: transitive
     description:
@@ -695,13 +695,6 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "2.2.1"
-  platform_detect:
-    dependency: transitive
-    description:
-      name: platform_detect
-      url: "https://pub.dartlang.org"
-    source: hosted
-    version: "1.4.0"
   plugin_platform_interface:
     dependency: transitive
     description:
@@ -785,14 +778,14 @@ packages:
       name: share
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.6.5+1"
+    version: "0.6.5+2"
   shared_preferences:
     dependency: "direct main"
     description:
       name: shared_preferences
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.5.11"
+    version: "0.5.12"
   shared_preferences_linux:
     dependency: transitive
     description:
@@ -937,7 +930,7 @@ packages:
       name: url_launcher
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "5.7.0"
+    version: "5.7.2"
   url_launcher_linux:
     dependency: transitive
     description:
@@ -965,7 +958,7 @@ packages:
       name: url_launcher_web
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.1.3+2"
+    version: "0.1.4+1"
   url_launcher_windows:
     dependency: transitive
     description:
@@ -1021,7 +1014,7 @@ packages:
       name: xml
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.6.1"
+    version: "4.5.1"
   yaml:
     dependency: "direct main"
     description:
diff --git a/pubspec.yaml b/pubspec.yaml
index f15f131c1..d6ac4bf73 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -14,7 +14,7 @@ description: Cake Wallet.
 version: 1.0.5+5
 
 environment:
-  sdk: ">=2.2.2 <3.0.0"
+  sdk: ">=2.7.0 <3.0.0"
 
 dependencies:
   flutter:

From e3678d2cf91e06d3ec0e32142e5c48ef80899f5f Mon Sep 17 00:00:00 2001
From: M <m@cakewallet.com>
Date: Mon, 28 Sep 2020 18:47:43 +0300
Subject: [PATCH 8/8] Fixes

---
 lib/core/contact_service.dart                 |  38 ---
 lib/di.dart                                   |  31 +-
 lib/entities/language.dart                    |  38 ---
 lib/entities/language_service.dart            |  26 ++
 lib/entities/node.dart                        |  36 ++-
 lib/entities/record.dart                      |   3 +-
 lib/main.dart                                 | 195 +++---------
 lib/router.dart                               |   9 +-
 lib/src/reactions/set_reactions.dart          |  98 ------
 lib/src/screens/base_page.dart                |  44 ++-
 .../screens/contact/contact_list_page.dart    |   8 +-
 .../dashboard/create_dashboard_page.dart      |  33 --
 lib/src/screens/dashboard/dashboard_page.dart |   2 +-
 .../dashboard/widgets/balance_page.dart       |  73 ++---
 .../exchange/widgets/exchange_card.dart       |  10 +-
 lib/src/screens/faq/faq_item.dart             |  61 ++++
 lib/src/screens/faq/faq_page.dart             | 140 +-------
 lib/src/screens/send/send_page.dart           | 299 +++++++++---------
 lib/src/screens/settings/change_language.dart |  96 +++---
 lib/src/widgets/alert_close_button.dart       |   2 +-
 lib/store/app_store.dart                      |   4 -
 lib/store/contact_list_store.dart             |  12 -
 lib/store/settings_store.dart                 |  24 +-
 lib/store/theme_changer_store.dart            |  13 -
 lib/theme_changer.dart                        |  16 -
 lib/utils/date_formatter.dart                 |   2 +-
 lib/utils/mobx.dart                           |   6 +-
 .../contact_list/contact_list_view_model.dart |  24 +-
 .../contact_list/contact_view_model.dart      |   9 +-
 lib/view_model/send/send_view_model.dart      |   8 +-
 .../settings/settings_view_model.dart         |  24 +-
 test/widget_test.dart                         |   2 +-
 32 files changed, 482 insertions(+), 904 deletions(-)
 delete mode 100644 lib/core/contact_service.dart
 delete mode 100644 lib/entities/language.dart
 create mode 100644 lib/entities/language_service.dart
 delete mode 100644 lib/src/reactions/set_reactions.dart
 delete mode 100644 lib/src/screens/dashboard/create_dashboard_page.dart
 create mode 100644 lib/src/screens/faq/faq_item.dart
 delete mode 100644 lib/store/contact_list_store.dart
 delete mode 100644 lib/store/theme_changer_store.dart
 delete mode 100644 lib/theme_changer.dart

diff --git a/lib/core/contact_service.dart b/lib/core/contact_service.dart
deleted file mode 100644
index 3f2a46203..000000000
--- a/lib/core/contact_service.dart
+++ /dev/null
@@ -1,38 +0,0 @@
-import 'package:hive/hive.dart';
-import 'package:cake_wallet/store/contact_list_store.dart';
-import 'package:cake_wallet/entities/contact.dart';
-
-class ContactService {
-  ContactService(this.contactSource, this.contactListStore) {
-    _forceUpdateContactListStore();
-  }
-
-  final Box<Contact> contactSource;
-  final ContactListStore contactListStore;
-
-  Future add(Contact contact) async {
-    await contactSource.add(contact);
-    // contactListStore.contacts.add(contact);
-  }
-
-  Future update(Contact contact) async {
-    await contact.save();
-    final index = contactListStore.contacts.indexOf(contact) ?? -1;
-
-    if (index >= 0) {
-      _forceUpdateContactListStore();
-    } else {
-      // contactListStore.contacts.add(contact);
-    }
-  }
-
-  Future delete(Contact contact) async {
-    await contact.delete();
-    contactListStore.contacts.remove(contact);
-  }
-
-  void _forceUpdateContactListStore() {
-    contactListStore.contacts.clear();
-    // contactListStore.contacts.addAll(contactSource.values);
-  }
-}
diff --git a/lib/di.dart b/lib/di.dart
index d6ccde3cc..d133b6ed0 100644
--- a/lib/di.dart
+++ b/lib/di.dart
@@ -1,5 +1,4 @@
 import 'package:cake_wallet/bitcoin/bitcoin_wallet_service.dart';
-import 'package:cake_wallet/core/contact_service.dart';
 import 'package:cake_wallet/core/wallet_service.dart';
 import 'package:cake_wallet/entities/biometric_auth.dart';
 import 'package:cake_wallet/entities/contact_record.dart';
@@ -8,22 +7,22 @@ import 'package:cake_wallet/entities/contact.dart';
 import 'package:cake_wallet/entities/node.dart';
 import 'package:cake_wallet/exchange/trade.dart';
 
-// import 'package:cake_wallet/src/domain/services/wallet_service.dart';
 import 'package:cake_wallet/src/screens/contact/contact_list_page.dart';
 import 'package:cake_wallet/src/screens/contact/contact_page.dart';
 import 'package:cake_wallet/src/screens/exchange_trade/exchange_confirm_page.dart';
 import 'package:cake_wallet/src/screens/exchange_trade/exchange_trade_page.dart';
+import 'package:cake_wallet/src/screens/faq/faq_page.dart';
 import 'package:cake_wallet/src/screens/nodes/node_create_or_edit_page.dart';
 import 'package:cake_wallet/src/screens/nodes/nodes_list_page.dart';
 import 'package:cake_wallet/src/screens/rescan/rescan_page.dart';
 import 'package:cake_wallet/src/screens/seed/wallet_seed_page.dart';
 import 'package:cake_wallet/src/screens/send/send_template_page.dart';
+import 'package:cake_wallet/src/screens/settings/change_language.dart';
 import 'package:cake_wallet/src/screens/settings/settings.dart';
 import 'package:cake_wallet/src/screens/setup_pin_code/setup_pin_code.dart';
 import 'package:cake_wallet/src/screens/wallet_keys/wallet_keys_page.dart';
 import 'package:cake_wallet/src/screens/exchange/exchange_page.dart';
 import 'package:cake_wallet/src/screens/exchange/exchange_template_page.dart';
-import 'package:cake_wallet/store/contact_list_store.dart';
 import 'package:cake_wallet/store/node_list_store.dart';
 import 'package:cake_wallet/store/settings_store.dart';
 import 'package:cake_wallet/core/auth_service.dart';
@@ -38,10 +37,7 @@ import 'package:cake_wallet/src/screens/receive/receive_page.dart';
 import 'package:cake_wallet/src/screens/send/send_page.dart';
 import 'package:cake_wallet/src/screens/subaddress/address_edit_or_create_page.dart';
 import 'package:cake_wallet/src/screens/wallet_list/wallet_list_page.dart';
-import 'package:cake_wallet/store/theme_changer_store.dart';
 import 'package:cake_wallet/store/wallet_list_store.dart';
-import 'package:cake_wallet/utils/mobx.dart';
-import 'package:cake_wallet/theme_changer.dart';
 import 'package:cake_wallet/view_model/contact_list/contact_list_view_model.dart';
 import 'package:cake_wallet/view_model/contact_list/contact_view_model.dart';
 import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart';
@@ -62,11 +58,9 @@ import 'package:cake_wallet/view_model/wallet_keys_view_model.dart';
 import 'package:cake_wallet/view_model/wallet_list/wallet_list_view_model.dart';
 import 'package:cake_wallet/view_model/wallet_seed_view_model.dart';
 import 'package:cake_wallet/view_model/exchange/exchange_view_model.dart';
-import 'package:flutter/foundation.dart';
 import 'package:flutter/widgets.dart';
 import 'package:get_it/get_it.dart';
 import 'package:hive/hive.dart';
-import 'package:mobx/mobx.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 import 'package:flutter_secure_storage/flutter_secure_storage.dart';
 import 'package:cake_wallet/view_model/wallet_restoration_from_seed_vm.dart';
@@ -104,17 +98,13 @@ Future setup(
   getIt.registerSingleton<FlutterSecureStorage>(FlutterSecureStorage());
   getIt.registerSingleton(AuthenticationStore());
   getIt.registerSingleton<WalletListStore>(WalletListStore());
-  getIt.registerSingleton(ContactListStore());
   getIt.registerSingleton(NodeListStoreBase.instance);
   getIt.registerSingleton<SettingsStore>(settingsStore);
   getIt.registerSingleton<AppStore>(AppStore(
       authenticationStore: getIt.get<AuthenticationStore>(),
       walletList: getIt.get<WalletListStore>(),
       settingsStore: getIt.get<SettingsStore>(),
-      contactListStore: getIt.get<ContactListStore>(),
       nodeListStore: getIt.get<NodeListStore>()));
-  getIt.registerSingleton<ContactService>(
-      ContactService(contactSource, getIt.get<AppStore>().contactListStore));
   getIt.registerSingleton<TradesStore>(TradesStore(
       tradesSource: tradesSource, settingsStore: getIt.get<SettingsStore>()));
   getIt.registerSingleton<TradeFilterStore>(TradeFilterStore());
@@ -285,14 +275,10 @@ Future setup(
   getIt.registerFactory(() => WalletKeysPage(getIt.get<WalletKeysViewModel>()));
 
   getIt.registerFactoryParam<ContactViewModel, ContactRecord, void>(
-      (ContactRecord contact, _) => ContactViewModel(
-          contactSource, getIt.get<AppStore>().wallet,
-          contact: contact));
+      (ContactRecord contact, _) =>
+          ContactViewModel(contactSource, contact: contact));
 
-  getIt.registerFactory(() => ContactListViewModel(
-      getIt.get<AppStore>().contactListStore,
-      getIt.get<ContactService>(),
-      contactSource));
+  getIt.registerFactory(() => ContactListViewModel(contactSource));
 
   getIt.registerFactoryParam<ContactListPage, bool, void>(
       (bool isEditable, _) => ContactListPage(getIt.get<ContactListViewModel>(),
@@ -366,9 +352,8 @@ Future setup(
   getIt.registerFactory(() => RescanViewModel(getIt.get<AppStore>().wallet));
 
   getIt.registerFactory(() => RescanPage(getIt.get<RescanViewModel>()));
-}
 
-void setupThemeChangerStore(ThemeChanger themeChanger) {
-  getIt.registerSingleton<ThemeChangerStore>(
-      ThemeChangerStore(themeChanger: themeChanger));
+  getIt.registerFactory(() => FaqPage(getIt.get<SettingsStore>()));
+
+  getIt.registerFactory(() => LanguageListPage(getIt.get<SettingsStore>()));
 }
diff --git a/lib/entities/language.dart b/lib/entities/language.dart
deleted file mode 100644
index 16e1d1a6a..000000000
--- a/lib/entities/language.dart
+++ /dev/null
@@ -1,38 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:devicelocale/devicelocale.dart';
-import 'package:intl/intl.dart';
-
-const Map<String, String> languages = {
-  'en': 'English',
-  'de': 'Deutsch (German)',
-  'es': 'Español (Spanish)',
-  'hi': 'हिंदी (Hindi)',
-  'ja': '日本 (Japanese)',
-  'ko': '한국어 (Korean)',
-  'nl': 'Nederlands (Dutch)',
-  'pl': 'Polski (Polish)',
-  'pt': 'Português (Portuguese)',
-  'ru': 'Русский (Russian)',
-  'uk': 'Українська (Ukrainian)',
-  'zh': '中文 (Chinese)'
-};
-
-class Language with ChangeNotifier {
-  Language(this._currentLanguage);
-
-  String _currentLanguage;
-
-  String getCurrentLanguage() => _currentLanguage;
-
-  void setCurrentLanguage(String language) {
-    _currentLanguage = language;
-    notifyListeners();
-  }
-
-  static Future<String> localeDetection() async {
-    var locale = await Devicelocale.currentLocale;
-    locale = Intl.shortLocale(locale);
-
-    return languages.keys.contains(locale) ? locale : 'en';
-  }
-}
\ No newline at end of file
diff --git a/lib/entities/language_service.dart b/lib/entities/language_service.dart
new file mode 100644
index 000000000..4ea158353
--- /dev/null
+++ b/lib/entities/language_service.dart
@@ -0,0 +1,26 @@
+import 'package:devicelocale/devicelocale.dart';
+import 'package:intl/intl.dart';
+
+class LanguageService {
+  static const Map<String, String> list = {
+    'en': 'English',
+    'de': 'Deutsch (German)',
+    'es': 'Español (Spanish)',
+    'hi': 'हिंदी (Hindi)',
+    'ja': '日本 (Japanese)',
+    'ko': '한국어 (Korean)',
+    'nl': 'Nederlands (Dutch)',
+    'pl': 'Polski (Polish)',
+    'pt': 'Português (Portuguese)',
+    'ru': 'Русский (Russian)',
+    'uk': 'Українська (Ukrainian)',
+    'zh': '中文 (Chinese)'
+  };
+
+  static Future<String> localeDetection() async {
+    var locale = await Devicelocale.currentLocale;
+    locale = Intl.shortLocale(locale);
+
+    return list.keys.contains(locale) ? locale : 'en';
+  }
+}
diff --git a/lib/entities/node.dart b/lib/entities/node.dart
index f79b8b2e0..d96834dcb 100644
--- a/lib/entities/node.dart
+++ b/lib/entities/node.dart
@@ -61,24 +61,28 @@ class Node extends HiveObject with Keyable {
   }
 
   Future<bool> requestMoneroNode() async {
-    Map<String, dynamic> resBody;
+    try {
+      Map<String, dynamic> resBody;
 
-    if (login != null && password != null) {
-      final digestRequest = DigestRequest();
-      final response = await digestRequest.request(
-          uri: uri, login: login, password: password);
-      resBody = response.data as Map<String, dynamic>;
-    } else {
-      final url = Uri.http(uri, '/json_rpc');
-      final headers = {'Content-type': 'application/json'};
-      final body =
-          json.encode({'jsonrpc': '2.0', 'id': '0', 'method': 'get_info'});
-      final response =
-          await http.post(url.toString(), headers: headers, body: body);
-      resBody = json.decode(response.body) as Map<String, dynamic>;
+      if (login != null && password != null) {
+        final digestRequest = DigestRequest();
+        final response = await digestRequest.request(
+            uri: uri, login: login, password: password);
+        resBody = response.data as Map<String, dynamic>;
+      } else {
+        final url = Uri.http(uri, '/json_rpc');
+        final headers = {'Content-type': 'application/json'};
+        final body =
+            json.encode({'jsonrpc': '2.0', 'id': '0', 'method': 'get_info'});
+        final response =
+            await http.post(url.toString(), headers: headers, body: body);
+        resBody = json.decode(response.body) as Map<String, dynamic>;
+      }
+
+      return !(resBody['result']['offline'] as bool);
+    } catch (_) {
+      return false;
     }
-
-    return !(resBody['result']['offline'] as bool);
   }
 
   Future<bool> requestBitcoinElectrumServer() async {
diff --git a/lib/entities/record.dart b/lib/entities/record.dart
index 3c21441cc..1ca661684 100644
--- a/lib/entities/record.dart
+++ b/lib/entities/record.dart
@@ -5,6 +5,7 @@ import 'package:hive/hive.dart';
 
 abstract class Record<T extends HiveObject> with Keyable {
   Record(this._source, this.original) {
+    key = original.key;
     _listener?.cancel();
     _listener = _source.watch(key: original.key).listen((event) {
       if (!event.deleted) {
@@ -16,7 +17,7 @@ abstract class Record<T extends HiveObject> with Keyable {
     toBind(original);
   }
 
-  dynamic get key => original.key;
+  dynamic key;
 
   @override
   dynamic get keyIndex => key;
diff --git a/lib/main.dart b/lib/main.dart
index 66cca43a5..4a49b646a 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,66 +1,30 @@
-import 'package:cake_wallet/entities/fs_migration.dart';
-import 'package:cake_wallet/entities/transaction_description.dart';
-import 'package:cake_wallet/entities/transaction_description.dart';
-import 'package:cake_wallet/reactions/bootstrap.dart';
-import 'package:cake_wallet/routes.dart';
-import 'package:cake_wallet/store/app_store.dart';
-import 'package:cake_wallet/store/authentication_store.dart';
-import 'package:cake_wallet/core/auth_service.dart';
-import 'package:cake_wallet/bitcoin/bitcoin_wallet_service.dart';
-import 'package:cake_wallet/monero/monero_wallet_service.dart';
-import 'package:cake_wallet/core/wallet_creation_service.dart';
-import 'package:cake_wallet/di.dart';
-import 'package:cake_wallet/view_model/wallet_new_vm.dart';
-import 'package:flutter_localizations/flutter_localizations.dart';
-import 'package:get_it/get_it.dart';
-import 'package:path_provider/path_provider.dart';
-import 'package:shared_preferences/shared_preferences.dart';
-import 'package:flutter_secure_storage/flutter_secure_storage.dart';
-import 'package:provider/provider.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:hive/hive.dart';
+import 'package:cake_wallet/di.dart';
+import 'package:path_provider/path_provider.dart';
+import 'package:shared_preferences/shared_preferences.dart';
+import 'package:flutter_localizations/flutter_localizations.dart';
+import 'package:flutter_secure_storage/flutter_secure_storage.dart';
+import 'package:flutter_mobx/flutter_mobx.dart';
 import 'package:cw_monero/wallet.dart' as monero_wallet;
 import 'package:cake_wallet/router.dart';
-import 'theme_changer.dart';
-import 'themes.dart';
+import 'package:cake_wallet/routes.dart';
+import 'package:cake_wallet/generated/i18n.dart';
+import 'package:cake_wallet/reactions/bootstrap.dart';
+import 'package:cake_wallet/store/app_store.dart';
+import 'package:cake_wallet/store/authentication_store.dart';
+import 'package:cake_wallet/entities/transaction_description.dart';
 import 'package:cake_wallet/entities/get_encryption_key.dart';
 import 'package:cake_wallet/entities/contact.dart';
 import 'package:cake_wallet/entities/node.dart';
 import 'package:cake_wallet/entities/wallet_info.dart';
-import 'package:cake_wallet/exchange/trade.dart';
-
-// import 'package:cake_wallet/monero/transaction_description.dart';
-import 'package:cake_wallet/src/reactions/set_reactions.dart';
-
-// import 'package:cake_wallet/src/stores/login/login_store.dart';
-// import 'package:cake_wallet/src/stores/balance/balance_store.dart';
-// import 'package:cake_wallet/src/stores/sync/sync_store.dart';
-// import 'package:cake_wallet/src/stores/wallet/wallet_store.dart';
-// import 'package:cake_wallet/src/stores/send_template/send_template_store.dart';
-// import 'package:cake_wallet/src/stores/exchange_template/exchange_template_store.dart';
-import 'package:cake_wallet/src/screens/root/root.dart';
-
-//import 'package:cake_wallet/src/stores/authentication/authentication_store.dart';
-// import 'package:cake_wallet/src/stores/settings/settings_store.dart';
-// import 'package:cake_wallet/src/stores/price/price_store.dart';
-// import 'package:cake_wallet/src/domain/services/user_service.dart';
-// import 'package:cake_wallet/src/domain/services/wallet_list_service.dart';
-import 'package:cake_wallet/entities/balance_display_mode.dart';
 import 'package:cake_wallet/entities/default_settings_migration.dart';
-import 'package:cake_wallet/entities/fiat_currency.dart';
-import 'package:cake_wallet/entities/transaction_priority.dart';
 import 'package:cake_wallet/entities/wallet_type.dart';
 import 'package:cake_wallet/entities/template.dart';
+import 'package:cake_wallet/exchange/trade.dart';
 import 'package:cake_wallet/exchange/exchange_template.dart';
-
-// import 'package:cake_wallet/src/domain/services/wallet_service.dart';
-// import 'package:cake_wallet/src/domain/services/fiat_convertation_service.dart';
-import 'package:cake_wallet/generated/i18n.dart';
-import 'package:cake_wallet/entities/language.dart';
-// import 'package:cake_wallet/src/stores/seed_language/seed_language_store.dart';
-
-bool isThemeChangerRegistered = false;
+import 'package:cake_wallet/src/screens/root/root.dart';
 
 final navigatorKey = GlobalKey<NavigatorState>();
 
@@ -94,41 +58,6 @@ void main() async {
   final templates = await Hive.openBox<Template>(Template.boxName);
   final exchangeTemplates =
       await Hive.openBox<ExchangeTemplate>(ExchangeTemplate.boxName);
-
-  // final sharedPreferences = await SharedPreferences.getInstance();
-  // final walletService = WalletService();
-  // final fiatConvertationService = FiatConvertationService();
-  // final walletListService = WalletListService(
-  //     secureStorage: secureStorage,
-  //     walletInfoSource: walletInfoSource,
-  //     walletService: walletService,
-  //     sharedPreferences: sharedPreferences);
-  // final userService = UserService(
-  //     sharedPreferences: sharedPreferences, secureStorage: secureStorage);
-  // final settingsStore = await SettingsStoreBase.load(
-  //     nodes: nodes,
-  //     sharedPreferences: sharedPreferences,
-  //     initialFiatCurrency: FiatCurrency.usd,
-  //     initialTransactionPriority: TransactionPriority.slow,
-  //     initialBalanceDisplayMode: BalanceDisplayMode.availableBalance);
-  // final priceStore = PriceStore();
-  // final walletStore =
-  //     WalletStore(walletService: walletService, settingsStore: settingsStore);
-  // final syncStore = SyncStore(walletService: walletService);
-  // final balanceStore = BalanceStore(
-  //     walletService: walletService,
-  //     settingsStore: settingsStore,
-  //     priceStore: priceStore);
-  // final loginStore = LoginStore(
-  //     sharedPreferences: sharedPreferences, walletsService: walletListService);
-  // final seedLanguageStore = SeedLanguageStore();
-  // final sendTemplateStore = SendTemplateStore(templateSource: templates);
-  // final exchangeTemplateStore =
-  //     ExchangeTemplateStore(templateSource: exchangeTemplates);
-
-  // final walletCreationService = WalletCreationService();
-  // final authService = AuthService();
-
   await initialSetup(
       sharedPreferences: await SharedPreferences.getInstance(),
       nodes: nodes,
@@ -139,15 +68,7 @@ void main() async {
       templates: templates,
       exchangeTemplates: exchangeTemplates,
       initialMigrationVersion: 4);
-//   setReactions(
-//       settingsStore: settingsStore,
-//       priceStore: priceStore,
-//       syncStore: syncStore,
-//       walletStore: walletStore,
-//       walletService: walletService,
-// //      authenticationStore: authenticationStore,
-//       loginStore: loginStore);
-  runApp(CakeWalletApp());
+  runApp(App());
 }
 
 Future<void> initialSetup(
@@ -178,63 +99,25 @@ Future<void> initialSetup(
   monero_wallet.onStartup();
 }
 
-class CakeWalletApp extends StatelessWidget {
-  CakeWalletApp() {
+class App extends StatelessWidget {
+  App() {
     SystemChrome.setPreferredOrientations(
         [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
   }
 
-
   @override
   Widget build(BuildContext context) {
-    //final settingsStore = Provider.of<SettingsStore>(context);
     final settingsStore = getIt.get<AppStore>().settingsStore;
 
-    return ChangeNotifierProvider<ThemeChanger>(
-        create: (_) => ThemeChanger(
-            settingsStore.isDarkTheme ? Themes.darkTheme : Themes.lightTheme),
-        child: ChangeNotifierProvider<Language>(
-            create: (_) => Language(settingsStore.languageCode),
-            child: MaterialAppWithTheme()));
-  }
-}
-
-class MaterialAppWithTheme extends StatelessWidget {
-  MaterialAppWithTheme();
-
-  @override
-  Widget build(BuildContext context) {
-    // final sharedPreferences = Provider.of<SharedPreferences>(context);
-    // final walletService = Provider.of<WalletService>(context);
-    // final walletListService = Provider.of<WalletListService>(context);
-    // final userService = Provider.of<UserService>(context);
-    // final settingsStore = Provider.of<SettingsStore>(context);
-    // final priceStore = Provider.of<PriceStore>(context);
-    // final walletStore = Provider.of<WalletStore>(context);
-    // final syncStore = Provider.of<SyncStore>(context);
-    // final balanceStore = Provider.of<BalanceStore>(context);
-    final theme = Provider.of<ThemeChanger>(context);
-    final currentLanguage = Provider.of<Language>(context);
-    // final contacts = Provider.of<Box<Contact>>(context);
-    // final nodes = Provider.of<Box<Node>>(context);
-    // final trades = Provider.of<Box<Trade>>(context);
-    // final transactionDescriptions =
-    //     Provider.of<Box<TransactionDescription>>(context);
-
-    if (!isThemeChangerRegistered) {
-      setupThemeChangerStore(theme);
-      isThemeChangerRegistered = true;
+    if (settingsStore.theme == null) {
+      settingsStore.isDarkTheme = false;
     }
 
-    /*final statusBarColor =
-        settingsStore.isDarkTheme ? Colors.black : Colors.white;*/
-    final _settingsStore = getIt.get<AppStore>().settingsStore;
-
     final statusBarColor = Colors.transparent;
     final statusBarBrightness =
-        _settingsStore.isDarkTheme ? Brightness.light : Brightness.dark;
+        settingsStore.isDarkTheme ? Brightness.light : Brightness.dark;
     final statusBarIconBrightness =
-        _settingsStore.isDarkTheme ? Brightness.light : Brightness.dark;
+        settingsStore.isDarkTheme ? Brightness.light : Brightness.dark;
     final authenticationStore = getIt.get<AuthenticationStore>();
     final initialRoute = authenticationStore.state == AuthenticationState.denied
         ? Routes.welcome
@@ -245,22 +128,24 @@ class MaterialAppWithTheme extends StatelessWidget {
         statusBarBrightness: statusBarBrightness,
         statusBarIconBrightness: statusBarIconBrightness));
 
-    return Root(
-        authenticationStore: authenticationStore,
-        child: MaterialApp(
-          navigatorKey: navigatorKey,
-          debugShowCheckedModeBanner: false,
-          theme: theme.getTheme(),
-          localizationsDelegates: [
-            S.delegate,
-            GlobalCupertinoLocalizations.delegate,
-            GlobalMaterialLocalizations.delegate,
-            GlobalWidgetsLocalizations.delegate,
-          ],
-          supportedLocales: S.delegate.supportedLocales,
-          locale: Locale(currentLanguage.getCurrentLanguage()),
-          onGenerateRoute: (settings) => Router.generateRoute(settings),
-          initialRoute: initialRoute,
-        ));
+    return Observer(builder: (BuildContext context) {
+      return Root(
+          authenticationStore: authenticationStore,
+          child: MaterialApp(
+            navigatorKey: navigatorKey,
+            debugShowCheckedModeBanner: false,
+            theme: settingsStore.theme,
+            localizationsDelegates: [
+              S.delegate,
+              GlobalCupertinoLocalizations.delegate,
+              GlobalMaterialLocalizations.delegate,
+              GlobalWidgetsLocalizations.delegate,
+            ],
+            supportedLocales: S.delegate.supportedLocales,
+            locale: Locale(settingsStore.languageCode),
+            onGenerateRoute: (settings) => Router.generateRoute(settings),
+            initialRoute: initialRoute,
+          ));
+    });
   }
 }
diff --git a/lib/router.dart b/lib/router.dart
index cc660d9a0..7407e9b11 100644
--- a/lib/router.dart
+++ b/lib/router.dart
@@ -252,8 +252,8 @@ class Router {
 
       case Routes.addressBookAddContact:
         return CupertinoPageRoute<void>(
-            builder: (_) =>
-                getIt.get<ContactPage>(param1: settings.arguments as ContactRecord));
+            builder: (_) => getIt.get<ContactPage>(
+                param1: settings.arguments as ContactRecord));
 
       case Routes.showKeys:
         return MaterialPageRoute<void>(
@@ -297,10 +297,11 @@ class Router {
         return MaterialPageRoute<void>(builder: (_) => getIt.get<RescanPage>());
 
       case Routes.faq:
-        return MaterialPageRoute<void>(builder: (_) => FaqPage());
+        return MaterialPageRoute<void>(builder: (_) => getIt.get<FaqPage>());
 
       case Routes.changeLanguage:
-        return MaterialPageRoute<void>(builder: (_) => ChangeLanguage());
+        return MaterialPageRoute<void>(
+            builder: (_) => getIt.get<LanguageListPage>());
 
       default:
         return MaterialPageRoute<void>(
diff --git a/lib/src/reactions/set_reactions.dart b/lib/src/reactions/set_reactions.dart
deleted file mode 100644
index 788f3bcb1..000000000
--- a/lib/src/reactions/set_reactions.dart
+++ /dev/null
@@ -1,98 +0,0 @@
-// import 'dart:async';
-// import 'package:flutter/foundation.dart';
-// import 'package:mobx/mobx.dart';
-// import 'package:cake_wallet/entities/node.dart';
-// import 'package:cake_wallet/entities/sync_status.dart';
-// import 'package:cake_wallet/src/domain/services/wallet_service.dart';
-// import 'package:cake_wallet/src/start_updating_price.dart';
-// import 'package:cake_wallet/src/stores/sync/sync_store.dart';
-// import 'package:cake_wallet/src/stores/wallet/wallet_store.dart';
-// import 'package:cake_wallet/src/stores/settings/settings_store.dart';
-// import 'package:cake_wallet/src/stores/price/price_store.dart';
-// import 'package:cake_wallet/src/stores/authentication/authentication_store.dart';
-// import 'package:cake_wallet/src/stores/login/login_store.dart';
-//
-// Timer _reconnectionTimer;
-// ReactionDisposer _connectToNodeDisposer;
-// ReactionDisposer _onSyncStatusChangeDisposer;
-// ReactionDisposer _onCurrentWalletChangeDisposer;
-//
-// void setReactions(
-//     {@required SettingsStore settingsStore,
-//     @required PriceStore priceStore,
-//     @required SyncStore syncStore,
-//     @required WalletStore walletStore,
-//     @required WalletService walletService,
-// //    @required AuthenticationStore authenticationStore,
-//     @required LoginStore loginStore}) {
-//   connectToNode(settingsStore: settingsStore, walletStore: walletStore);
-//   onSyncStatusChange(
-//       syncStore: syncStore,
-//       walletStore: walletStore,
-//       settingsStore: settingsStore);
-//   onCurrentWalletChange(
-//       walletStore: walletStore,
-//       settingsStore: settingsStore,
-//       priceStore: priceStore);
-//   autorun((_) async {
-// //    if (authenticationStore.state == AuthenticationState.allowed) {
-// //      await loginStore.loadCurrentWallet();
-// //      authenticationStore.state = AuthenticationState.readyToLogin;
-// //    }
-//   });
-// }
-//
-// void connectToNode({SettingsStore settingsStore, WalletStore walletStore}) {
-//   _connectToNodeDisposer?.call();
-//
-//   _connectToNodeDisposer = reaction((_) => settingsStore.node,
-//       (Node node) async => await walletStore.connectToNode(node: node));
-// }
-//
-// void onCurrentWalletChange(
-//     {WalletStore walletStore,
-//     SettingsStore settingsStore,
-//     PriceStore priceStore}) {
-//   _onCurrentWalletChangeDisposer?.call();
-//
-//   reaction((_) => walletStore.name, (String _) {
-//     walletStore.connectToNode(node: settingsStore.node);
-//     startUpdatingPrice(settingsStore: settingsStore, priceStore: priceStore);
-//   });
-// }
-//
-// void onSyncStatusChange(
-//     {SyncStore syncStore,
-//     WalletStore walletStore,
-//     SettingsStore settingsStore}) {
-//   // _onSyncStatusChangeDisposer?.call();
-//
-//   // reaction((_) => syncStore.status, (SyncStatus status) async {
-//   //   if (status is ConnectedSyncStatus) {
-//   //     await walletStore.startSync();
-//   //   }
-//
-//   //   // Reconnect to the node if the app is not started sync after 30 seconds
-//   //   if (status is StartingSyncStatus) {
-//   //     startReconnectionObserver(syncStore: syncStore, walletStore: walletStore);
-//   //   }
-//   // });
-// }
-//
-// void startReconnectionObserver({SyncStore syncStore, WalletStore walletStore}) {
-//   if (_reconnectionTimer != null) {
-//     _reconnectionTimer.cancel();
-//   }
-//
-//   _reconnectionTimer = Timer.periodic(Duration(minutes: 1), (_) async {
-//     try {
-//       final isConnected = await walletStore.isConnected();
-//
-//       if (!isConnected) {
-//         await walletStore.reconnect();
-//       }
-//     } catch (e) {
-//       print(e);
-//     }
-//   });
-// }
diff --git a/lib/src/screens/base_page.dart b/lib/src/screens/base_page.dart
index bc6da2521..f8cfa5ae1 100644
--- a/lib/src/screens/base_page.dart
+++ b/lib/src/screens/base_page.dart
@@ -1,14 +1,22 @@
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
-import 'package:cake_wallet/src/widgets/nav_bar.dart';
-import 'package:provider/provider.dart';
-import 'package:cake_wallet/themes.dart';
-import 'package:cake_wallet/theme_changer.dart';
 import 'package:cake_wallet/palette.dart';
+import 'package:cake_wallet/di.dart';
+import 'package:cake_wallet/store/settings_store.dart';
+import 'package:cake_wallet/src/widgets/nav_bar.dart';
 
 enum AppBarStyle { regular, withShadow, transparent }
 
 abstract class BasePage extends StatelessWidget {
+  BasePage()
+      : _scaffoldKey = GlobalKey<ScaffoldState>(),
+        _closeButtonImage = Image.asset('assets/images/close_button.png'),
+        _closeButtonImageDarkTheme =
+            Image.asset('assets/images/close_button_dark_theme.png');
+  final GlobalKey<ScaffoldState> _scaffoldKey;
+  final Image _closeButtonImage;
+  final Image _closeButtonImageDarkTheme;
+
   String get title => null;
 
   bool get isModalBackButton => false;
@@ -29,11 +37,7 @@ abstract class BasePage extends StatelessWidget {
 
   Widget Function(BuildContext, Widget) get rootWrapper => null;
 
-  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
-
-  final _closeButtonImage = Image.asset('assets/images/close_button.png');
-  final _closeButtonImageDarkTheme =
-      Image.asset('assets/images/close_button_dark_theme.png');
+  bool get _isDarkTheme => getIt.get<SettingsStore>().isDarkTheme;
 
   void onOpenEndDrawer() => _scaffoldKey.currentState.openEndDrawer();
 
@@ -45,12 +49,9 @@ abstract class BasePage extends StatelessWidget {
     }
 
     final _backButton = Image.asset('assets/images/back_arrow.png',
-          color: titleColor ?? Theme.of(context).primaryTextTheme.title.color);
-
-    final _themeChanger = Provider.of<ThemeChanger>(context);
-    final _closeButton = _themeChanger.getTheme() == Themes.darkTheme
-    ? _closeButtonImageDarkTheme
-    : _closeButtonImage;
+        color: titleColor ?? Theme.of(context).primaryTextTheme.title.color);
+    final _closeButton =
+        _isDarkTheme ? _closeButtonImageDarkTheme : _closeButtonImage;
 
     return SizedBox(
       height: 37,
@@ -77,7 +78,7 @@ abstract class BasePage extends StatelessWidget {
                 fontWeight: FontWeight.bold,
                 fontFamily: 'Poppins',
                 color: titleColor ??
-                       Theme.of(context).primaryTextTheme.title.color),
+                    Theme.of(context).primaryTextTheme.title.color),
           );
   }
 
@@ -86,10 +87,8 @@ abstract class BasePage extends StatelessWidget {
   Widget floatingActionButton(BuildContext context) => null;
 
   ObstructingPreferredSizeWidget appBar(BuildContext context) {
-    final _themeChanger = Provider.of<ThemeChanger>(context);
-    final _isDarkTheme = _themeChanger.getTheme() == Themes.darkTheme;
-    final appBarColor = _isDarkTheme
-                        ? backgroundDarkColor : backgroundLightColor;
+    final appBarColor =
+        _isDarkTheme ? backgroundDarkColor : backgroundLightColor;
 
     switch (appBarStyle) {
       case AppBarStyle.regular:
@@ -131,9 +130,6 @@ abstract class BasePage extends StatelessWidget {
 
   @override
   Widget build(BuildContext context) {
-    final _themeChanger = Provider.of<ThemeChanger>(context);
-    final _isDarkTheme = _themeChanger.getTheme() == Themes.darkTheme;
-
     final root = Scaffold(
         key: _scaffoldKey,
         backgroundColor:
@@ -142,7 +138,7 @@ abstract class BasePage extends StatelessWidget {
         extendBodyBehindAppBar: extendBodyBehindAppBar,
         endDrawer: endDrawer,
         appBar: appBar(context),
-        body: body(context), //SafeArea(child: ),
+        body: body(context),
         floatingActionButton: floatingActionButton(context));
 
     return rootWrapper?.call(context, root) ?? root;
diff --git a/lib/src/screens/contact/contact_list_page.dart b/lib/src/screens/contact/contact_list_page.dart
index 37c37876f..5344c4736 100644
--- a/lib/src/screens/contact/contact_list_page.dart
+++ b/lib/src/screens/contact/contact_list_page.dart
@@ -164,10 +164,10 @@ class ContactListPage extends BasePage {
                                final isDelete =
                                    await showAlertDialog(context) ?? false;
 
-                               // if (isDelete) {
-                               //   await contactListViewModel
-                               //       .delete(contact);
-                               // }
+                               if (isDelete) {
+                                 await contactListViewModel
+                                     .delete(contact);
+                               }
                              },
                            ),
                          ],
diff --git a/lib/src/screens/dashboard/create_dashboard_page.dart b/lib/src/screens/dashboard/create_dashboard_page.dart
deleted file mode 100644
index a14c2498a..000000000
--- a/lib/src/screens/dashboard/create_dashboard_page.dart
+++ /dev/null
@@ -1,33 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:hive/hive.dart';
-import 'package:provider/provider.dart';
-import 'package:cake_wallet/exchange/trade.dart';
-// import 'package:cake_wallet/monero/transaction_description.dart';
-// import 'package:cake_wallet/src/domain/services/wallet_service.dart';
-// import 'package:cake_wallet/src/screens/dashboard/dashboard_page.dart';
-// import 'package:cake_wallet/src/stores/action_list/action_list_store.dart';
-// import 'package:cake_wallet/src/stores/action_list/trade_filter_store.dart';
-// import 'package:cake_wallet/src/stores/action_list/transaction_filter_store.dart';
-// import 'package:cake_wallet/src/stores/price/price_store.dart';
-// import 'package:cake_wallet/src/stores/settings/settings_store.dart';
-// import 'package:cake_wallet/src/stores/wallet/wallet_store.dart';
-
-// FIXME: Remove me.
-
-// Widget createDashboardPage(
-//         {@required WalletService walletService,
-//         @required PriceStore priceStore,
-//         @required Box<TransactionDescription> transactionDescriptions,
-//         @required SettingsStore settingsStore,
-//         @required Box<Trade> trades,
-//         @required WalletStore walletStore}) =>
-//     Provider(
-//         create: (_) => ActionListStore(
-//             walletService: walletService,
-//             settingsStore: settingsStore,
-//             priceStore: priceStore,
-//             tradesSource: trades,
-//             transactionFilterStore: TransactionFilterStore(),
-//             tradeFilterStore: TradeFilterStore(walletStore: walletStore),
-//             transactionDescriptions: transactionDescriptions),
-//         child: DashboardPage());
diff --git a/lib/src/screens/dashboard/dashboard_page.dart b/lib/src/screens/dashboard/dashboard_page.dart
index fecaec430..0d7347d24 100644
--- a/lib/src/screens/dashboard/dashboard_page.dart
+++ b/lib/src/screens/dashboard/dashboard_page.dart
@@ -105,7 +105,7 @@ class DashboardPage extends BasePage {
         Container(
           padding: EdgeInsets.only(left: 45, right: 45, bottom: 24),
           child: Row(
-            mainAxisAlignment: MainAxisAlignment.spaceBetween,
+            mainAxisAlignment: MainAxisAlignment.spaceAround,
             children: <Widget>[
               ActionButton(
                   image: sendImage,
diff --git a/lib/src/screens/dashboard/widgets/balance_page.dart b/lib/src/screens/dashboard/widgets/balance_page.dart
index e6c0ccef7..4410fc3ff 100644
--- a/lib/src/screens/dashboard/widgets/balance_page.dart
+++ b/lib/src/screens/dashboard/widgets/balance_page.dart
@@ -11,44 +11,41 @@ class BalancePage extends StatelessWidget {
   Widget build(BuildContext context) {
     return Container(
       padding: EdgeInsets.all(24),
-      child: Center(
-        child: Container(
-          height: 160,
-          child: Column(
-            mainAxisAlignment: MainAxisAlignment.spaceBetween,
-            crossAxisAlignment: CrossAxisAlignment.center,
-            children: <Widget>[
-              Observer(builder: (_) {
-                return Text(
-                  dashboardViewModel.balanceViewModel.currency.toString(),
-                  style: TextStyle(
-                      fontSize: 40,
-                      fontWeight: FontWeight.bold,
-                      color: Theme.of(context).indicatorColor,
-                      height: 1),
-                );
-              }),
-              Observer(builder: (_) {
-                return Text(dashboardViewModel.balanceViewModel.cryptoBalance,
-                    style: TextStyle(
-                        fontSize: 54,
-                        fontWeight: FontWeight.bold,
-                        color: Colors.white,
-                        height: 1),
-                    textAlign: TextAlign.center);
-              }),
-              Observer(builder: (_) {
-                return Text(dashboardViewModel.balanceViewModel.fiatBalance,
-                    style: TextStyle(
-                        fontSize: 18,
-                        fontWeight: FontWeight.w500,
-                        color: Theme.of(context).indicatorColor,
-                        height: 1),
-                    textAlign: TextAlign.center);
-              }),
-            ],
-          ),
-        ),
+      child: Column(
+        mainAxisAlignment: MainAxisAlignment.center,
+        crossAxisAlignment: CrossAxisAlignment.center,
+        children: <Widget>[
+          Observer(builder: (_) {
+            return Text(
+              dashboardViewModel.balanceViewModel.currency.toString(),
+              style: TextStyle(
+                  fontSize: 40,
+                  fontWeight: FontWeight.bold,
+                  color: Theme.of(context).indicatorColor,
+                  height: 1),
+            );
+          }),
+          SizedBox(height: 10),
+          Observer(builder: (_) {
+            return Text(dashboardViewModel.balanceViewModel.cryptoBalance,
+                style: TextStyle(
+                    fontSize: 54,
+                    fontWeight: FontWeight.bold,
+                    color: Colors.white,
+                    height: 1),
+                textAlign: TextAlign.center);
+          }),
+          SizedBox(height: 10),
+          Observer(builder: (_) {
+            return Text(dashboardViewModel.balanceViewModel.fiatBalance,
+                style: TextStyle(
+                    fontSize: 18,
+                    fontWeight: FontWeight.w500,
+                    color: Theme.of(context).indicatorColor,
+                    height: 1),
+                textAlign: TextAlign.center);
+          }),
+        ],
       ),
     );
   }
diff --git a/lib/src/screens/exchange/widgets/exchange_card.dart b/lib/src/screens/exchange/widgets/exchange_card.dart
index 28c7980f8..cd2fa6527 100644
--- a/lib/src/screens/exchange/widgets/exchange_card.dart
+++ b/lib/src/screens/exchange/widgets/exchange_card.dart
@@ -146,11 +146,11 @@ class ExchangeCardState extends State<ExchangeCard> {
                   textAlign: TextAlign.left,
                   keyboardType: TextInputType.numberWithOptions(
                       signed: false, decimal: true),
-                  inputFormatters: [
-                    LengthLimitingTextInputFormatter(15),
-                    BlacklistingTextInputFormatter(
-                        RegExp('[\\-|\\ |\\,]'))
-                  ],
+                  // inputFormatters: [
+                  //   LengthLimitingTextInputFormatter(15),
+                  //   BlacklistingTextInputFormatter(
+                  //       RegExp('[\\-|\\ |\\,]'))
+                  // ],
                   hintText: '0.0000',
                   borderColor: widget.borderColor,
                   textStyle: TextStyle(
diff --git a/lib/src/screens/faq/faq_item.dart b/lib/src/screens/faq/faq_item.dart
new file mode 100644
index 000000000..5463b3f1c
--- /dev/null
+++ b/lib/src/screens/faq/faq_item.dart
@@ -0,0 +1,61 @@
+import 'package:flutter/material.dart';
+import 'package:cake_wallet/palette.dart';
+
+class FAQItem extends StatefulWidget {
+  FAQItem(this.title, this.text);
+
+  final String title;
+  final String text;
+
+  @override
+  State<StatefulWidget> createState() => FAQItemState();
+}
+
+class FAQItemState extends State<FAQItem> {
+  bool isActive;
+
+  @override
+  void initState() {
+    isActive = false;
+    super.initState();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final addIcon =
+        Icon(Icons.add, color: Theme.of(context).primaryTextTheme.title.color);
+    final removeIcon = Icon(Icons.remove, color: Palette.blueCraiola);
+    final icon = isActive ? removeIcon : addIcon;
+    final color = isActive
+        ? Palette.blueCraiola
+        : Theme.of(context).primaryTextTheme.title.color;
+
+    return ListTileTheme(
+      contentPadding: EdgeInsets.fromLTRB(0, 6, 24, 6),
+      child: ExpansionTile(
+        title: Text(widget.title,
+            style: TextStyle(
+                fontSize: 14, fontWeight: FontWeight.w500, color: color)),
+        trailing: icon,
+        onExpansionChanged: (value) => setState(() => isActive = value),
+        children: <Widget>[
+          Row(mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[
+            Expanded(
+                child: Container(
+              padding: EdgeInsets.only(
+                right: 24.0,
+              ),
+              child: Text(
+                widget.text,
+                style: TextStyle(
+                    fontSize: 14,
+                    fontWeight: FontWeight.normal,
+                    color: Theme.of(context).primaryTextTheme.title.color),
+              ),
+            ))
+          ])
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/src/screens/faq/faq_page.dart b/lib/src/screens/faq/faq_page.dart
index b68c95732..467431e18 100644
--- a/lib/src/screens/faq/faq_page.dart
+++ b/lib/src/screens/faq/faq_page.dart
@@ -1,46 +1,30 @@
 import 'dart:convert';
-import 'package:cake_wallet/palette.dart';
-import 'package:cake_wallet/src/widgets/standard_list.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
-import 'package:provider/provider.dart';
 import 'package:cake_wallet/generated/i18n.dart';
-import 'package:cake_wallet/store/settings_store.dart';
+import 'package:cake_wallet/src/screens/faq/faq_item.dart';
 import 'package:cake_wallet/src/screens/base_page.dart';
+import 'package:cake_wallet/src/widgets/standard_list.dart';
+import 'package:cake_wallet/store/settings_store.dart';
 
 class FaqPage extends BasePage {
+  FaqPage(this.settingsStore);
+
+  final SettingsStore settingsStore;
+
   @override
   String get title => S.current.faq;
 
-  @override
-  Widget body(BuildContext context) => FaqForm();
-}
-
-class FaqForm extends StatefulWidget {
-  @override
-  FaqFormState createState() => FaqFormState();
-}
-
-class FaqFormState extends State<FaqForm> {
-  List<Icon> icons;
-  List<Color> colors;
-  bool isLoaded = false;
+  String get path => 'assets/faq/faq_' + settingsStore.languageCode + '.json';
 
   @override
-  Widget build(BuildContext context) {
-    final addIcon = Icon(Icons.add, color: Theme.of(context).primaryTextTheme.title.color);
-    final removeIcon = Icon(Icons.remove, color: Palette.blueCraiola);
-
+  Widget body(BuildContext context) {
     return Container(
       padding: EdgeInsets.only(top: 12, left: 24),
       child: FutureBuilder(
         builder: (context, snapshot) {
           final faqItems = jsonDecode(snapshot.data.toString()) as List;
 
-          if (snapshot.hasData) {
-            setIconsAndColors(context, faqItems.length, addIcon);
-          }
-
           return SingleChildScrollView(
             child: Column(
               children: <Widget>[
@@ -49,112 +33,20 @@ class FaqFormState extends State<FaqForm> {
                   shrinkWrap: true,
                   physics: NeverScrollableScrollPhysics(),
                   itemBuilder: (BuildContext context, int index) {
-                    final itemTitle = faqItems[index]["question"].toString();
-                    final itemChild = faqItems[index]["answer"].toString();
+                    final title = faqItems[index]["question"].toString();
+                    final text = faqItems[index]["answer"].toString();
 
-                    return ListTileTheme(
-                      contentPadding: EdgeInsets.fromLTRB(0, 6, 24, 6),
-                      child: ExpansionTile(
-                        title: Text(
-                          itemTitle,
-                          style: TextStyle(
-                              fontSize: 14,
-                              fontWeight: FontWeight.w500,
-                              color: colors[index]
-                          ),
-                        ),
-                        trailing: icons[index],
-                        onExpansionChanged: (value) {
-                          setState(() {
-                            if (value) {
-                              icons[index] = removeIcon;
-                              colors[index] = Palette.blueCraiola;
-                            } else {
-                              icons[index] = addIcon;
-                              colors[index] = Theme.of(context).primaryTextTheme.title.color;
-                            }
-                          });
-                        },
-                        children: <Widget>[
-                          Row(
-                            mainAxisAlignment: MainAxisAlignment.start,
-                            children: <Widget>[
-                              Expanded(
-                                  child: Container(
-                                    padding: EdgeInsets.only(
-                                        right: 24.0,
-                                    ),
-                                    child: Text(
-                                      itemChild,
-                                      style: TextStyle(
-                                          fontSize: 14,
-                                          fontWeight: FontWeight.normal,
-                                          color: Theme.of(context).primaryTextTheme.title.color
-                                      ),
-                                    ),
-                                  ))
-                            ],
-                          )
-                        ],
-                      ),
-                    );
+                    return FAQItem(title, text);
                   },
-                  separatorBuilder: (_, __) =>
-                      StandardListSeparator(),
-                  itemCount: faqItems == null ? 0 : faqItems.length,
+                  separatorBuilder: (_, __) => StandardListSeparator(),
+                  itemCount: faqItems?.length ?? 0,
                 )
               ],
             ),
           );
         },
-        future: rootBundle.loadString(getFaqPath(context)),
+        future: rootBundle.loadString(path),
       ),
     );
   }
-
-  void setIconsAndColors(BuildContext context, int index, Icon icon) {
-    if (isLoaded) {
-      return;
-    }
-
-    icons = List.generate(index, (int i) => icon);
-    colors = List.generate(index, (int i) => Theme.of(context).primaryTextTheme.title.color);
-
-    isLoaded = true;
-  }
-
-  String getFaqPath(BuildContext context) {
-    // FIXME: FIXME
-    // final settingsStore = Provider.of<SettingsStore>(context);
-    //
-    // switch (settingsStore.languageCode) {
-    //   case 'en':
-    //     return 'assets/faq/faq_en.json';
-    //   case 'uk':
-    //     return 'assets/faq/faq_uk.json';
-    //   case 'ru':
-    //     return 'assets/faq/faq_ru.json';
-    //   case 'es':
-    //     return 'assets/faq/faq_es.json';
-    //   case 'ja':
-    //     return 'assets/faq/faq_ja.json';
-    //   case 'ko':
-    //     return 'assets/faq/faq_ko.json';
-    //   case 'hi':
-    //     return 'assets/faq/faq_hi.json';
-    //   case 'de':
-    //     return 'assets/faq/faq_de.json';
-    //   case 'zh':
-    //     return 'assets/faq/faq_zh.json';
-    //   case 'pt':
-    //     return 'assets/faq/faq_pt.json';
-    //   case 'pl':
-    //     return 'assets/faq/faq_pl.json';
-    //   case 'nl':
-    //     return 'assets/faq/faq_nl.json';
-    //   default:
-    //     return 'assets/faq/faq_en.json';
-    // }
-    return '';
-  }
-}
\ No newline at end of file
+}
diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart
index d62b14ead..1bc42ccca 100644
--- a/lib/src/screens/send/send_page.dart
+++ b/lib/src/screens/send/send_page.dart
@@ -1,4 +1,5 @@
 import 'dart:ui';
+
 // import 'package:cake_wallet/src/domain/common/transaction_priority.dart';
 import 'package:cake_wallet/core/execution_state.dart';
 import 'package:cake_wallet/src/screens/base_page.dart';
@@ -20,6 +21,7 @@ import 'package:dotted_border/dotted_border.dart';
 import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
 import 'package:cake_wallet/src/screens/send/widgets/confirm_sending_alert.dart';
+
 // import 'package:cake_wallet/src/screens/send/widgets/sending_alert.dart';
 import 'package:cake_wallet/src/widgets/template_tile.dart';
 import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
@@ -70,8 +72,7 @@ class SendPage extends BasePage {
                 decoration: BoxDecoration(
                   borderRadius: BorderRadius.only(
                       bottomLeft: Radius.circular(24),
-                      bottomRight: Radius.circular(24)
-                  ),
+                      bottomRight: Radius.circular(24)),
                   gradient: LinearGradient(colors: [
                     Theme.of(context).primaryTextTheme.subhead.color,
                     Theme.of(context).primaryTextTheme.subhead.decorationColor,
@@ -106,10 +107,14 @@ class SendPage extends BasePage {
                               AddressTextFieldOption.qrCode,
                               AddressTextFieldOption.addressBook
                             ],
-                            buttonColor:
-                            Theme.of(context).primaryTextTheme.display1.color,
-                            borderColor:
-                            Theme.of(context).primaryTextTheme.headline.color,
+                            buttonColor: Theme.of(context)
+                                .primaryTextTheme
+                                .display1
+                                .color,
+                            borderColor: Theme.of(context)
+                                .primaryTextTheme
+                                .headline
+                                .color,
                             textStyle: TextStyle(
                                 fontSize: 14,
                                 fontWeight: FontWeight.w500,
@@ -123,83 +128,76 @@ class SendPage extends BasePage {
                                     .decorationColor),
                             validator: sendViewModel.addressValidator,
                           ),
-                          Observer(builder: (_) {
-                            return Padding(
-                                padding: const EdgeInsets.only(top: 20),
-                                child: BaseTextFormField(
-                                    controller: _cryptoAmountController,
-                                    keyboardType: TextInputType.numberWithOptions(
-                                        signed: false, decimal: true),
-                                    inputFormatters: [
-                                      BlacklistingTextInputFormatter(
-                                          RegExp('[\\-|\\ |\\,]'))
-                                    ],
-                                    prefixIcon: Padding(
-                                      padding: EdgeInsets.only(top: 9),
-                                      child:
-                                      Text(sendViewModel.currency.title + ':',
-                                          style: TextStyle(
-                                            fontSize: 16,
-                                            fontWeight: FontWeight.w600,
-                                            color: Colors.white,
-                                          )),
-                                    ),
-                                    suffixIcon: Container(
-                                      height: 32,
-                                      width: 32,
-                                      margin: EdgeInsets.only(
-                                          left: 14, top: 4, bottom: 10),
-                                      decoration: BoxDecoration(
-                                          color: Theme.of(context)
-                                              .primaryTextTheme
-                                              .display1
-                                              .color,
-                                          borderRadius: BorderRadius.all(
-                                              Radius.circular(6))),
-                                      child: InkWell(
-                                        onTap: () =>
-                                            sendViewModel.setSendAll(),
-                                        child: Center(
-                                          child: Text(S.of(context).all,
-                                              textAlign: TextAlign.center,
-                                              style: TextStyle(
-                                                  fontSize: 12,
-                                                  fontWeight: FontWeight.bold,
-                                                  color: Theme.of(context)
-                                                      .primaryTextTheme
-                                                      .display1
-                                                      .decorationColor)),
-                                        ),
-                                      ),
-                                    ),
-                                    hintText: '0.0000',
-                                    borderColor: Theme.of(context)
-                                        .primaryTextTheme
-                                        .headline
-                                        .color,
-                                    textStyle: TextStyle(
-                                        fontSize: 14,
-                                        fontWeight: FontWeight.w500,
-                                        color: Colors.white),
-                                    placeholderTextStyle: TextStyle(
+                          Padding(
+                              padding: const EdgeInsets.only(top: 20),
+                              child: BaseTextFormField(
+                                  controller: _cryptoAmountController,
+                                  keyboardType: TextInputType.numberWithOptions(
+                                      signed: false, decimal: true),
+                                  prefixIcon: Padding(
+                                    padding: EdgeInsets.only(top: 9),
+                                    child:
+                                        Text(sendViewModel.currency.title + ':',
+                                            style: TextStyle(
+                                              fontSize: 16,
+                                              fontWeight: FontWeight.w600,
+                                              color: Colors.white,
+                                            )),
+                                  ),
+                                  suffixIcon: Container(
+                                    height: 32,
+                                    width: 32,
+                                    margin: EdgeInsets.only(
+                                        left: 14, top: 4, bottom: 10),
+                                    decoration: BoxDecoration(
                                         color: Theme.of(context)
                                             .primaryTextTheme
-                                            .headline
-                                            .decorationColor,
-                                        fontWeight: FontWeight.w500,
-                                        fontSize: 14),
-                                    validator: sendViewModel.amountValidator));
-                          }),
+                                            .display1
+                                            .color,
+                                        borderRadius: BorderRadius.all(
+                                            Radius.circular(6))),
+                                    child: InkWell(
+                                      onTap: () => sendViewModel.setSendAll(),
+                                      child: Center(
+                                        child: Text(S.of(context).all,
+                                            textAlign: TextAlign.center,
+                                            style: TextStyle(
+                                                fontSize: 12,
+                                                fontWeight: FontWeight.bold,
+                                                color: Theme.of(context)
+                                                    .primaryTextTheme
+                                                    .display1
+                                                    .decorationColor)),
+                                      ),
+                                    ),
+                                  ),
+                                  hintText: '0.0000',
+                                  borderColor: Theme.of(context)
+                                      .primaryTextTheme
+                                      .headline
+                                      .color,
+                                  textStyle: TextStyle(
+                                      fontSize: 14,
+                                      fontWeight: FontWeight.w500,
+                                      color: Colors.white),
+                                  placeholderTextStyle: TextStyle(
+                                      color: Theme.of(context)
+                                          .primaryTextTheme
+                                          .headline
+                                          .decorationColor,
+                                      fontWeight: FontWeight.w500,
+                                      fontSize: 14),
+                                  validator: sendViewModel.amountValidator)),
                           Observer(
                               builder: (_) => Padding(
-                                padding: EdgeInsets.only(top: 10),
-                                child: Row(
-                                  mainAxisSize: MainAxisSize.max,
-                                  mainAxisAlignment:
-                                  MainAxisAlignment.spaceBetween,
-                                  children: <Widget>[
-                                    Expanded(
-                                        child: Text(
+                                    padding: EdgeInsets.only(top: 10),
+                                    child: Row(
+                                      mainAxisSize: MainAxisSize.max,
+                                      mainAxisAlignment:
+                                          MainAxisAlignment.spaceBetween,
+                                      children: <Widget>[
+                                        Expanded(
+                                            child: Text(
                                           S.of(context).available_balance + ':',
                                           style: TextStyle(
                                               fontSize: 12,
@@ -209,29 +207,25 @@ class SendPage extends BasePage {
                                                   .headline
                                                   .decorationColor),
                                         )),
-                                    Text(
-                                      sendViewModel.balance,
-                                      style: TextStyle(
-                                          fontSize: 12,
-                                          fontWeight: FontWeight.w600,
-                                          color: Theme.of(context)
-                                              .primaryTextTheme
-                                              .headline
-                                              .decorationColor),
-                                    )
-                                  ],
-                                ),
-                              )),
+                                        Text(
+                                          sendViewModel.balance,
+                                          style: TextStyle(
+                                              fontSize: 12,
+                                              fontWeight: FontWeight.w600,
+                                              color: Theme.of(context)
+                                                  .primaryTextTheme
+                                                  .headline
+                                                  .decorationColor),
+                                        )
+                                      ],
+                                    ),
+                                  )),
                           Padding(
                               padding: const EdgeInsets.only(top: 20),
                               child: BaseTextFormField(
                                 controller: _fiatAmountController,
                                 keyboardType: TextInputType.numberWithOptions(
                                     signed: false, decimal: true),
-                                inputFormatters: [
-                                  BlacklistingTextInputFormatter(
-                                      RegExp('[\\-|\\ |\\,]'))
-                                ],
                                 prefixIcon: Padding(
                                   padding: EdgeInsets.only(top: 9),
                                   child: Text(sendViewModel.fiat.title + ':',
@@ -260,51 +254,51 @@ class SendPage extends BasePage {
                               )),
                           Observer(
                               builder: (_) => GestureDetector(
-                                onTap: () =>
-                                    _setTransactionPriority(context),
-                                child: Container(
-                                  padding: EdgeInsets.only(top: 24),
-                                  child: Row(
-                                    mainAxisAlignment:
-                                    MainAxisAlignment.spaceBetween,
-                                    children: <Widget>[
-                                      Text(S.of(context).send_estimated_fee,
-                                          style: TextStyle(
-                                              fontSize: 12,
-                                              fontWeight: FontWeight.w500,
-                                              //color: Theme.of(context).primaryTextTheme.display2.color,
-                                              color: Colors.white)),
-                                      Container(
-                                        child: Row(
-                                          children: <Widget>[
-                                            Text(
-                                                sendViewModel.estimatedFee
-                                                    .toString() +
-                                                    ' ' +
-                                                    sendViewModel
-                                                        .currency.title,
-                                                style: TextStyle(
-                                                    fontSize: 12,
-                                                    fontWeight:
-                                                    FontWeight.w600,
-                                                    //color: Theme.of(context).primaryTextTheme.display2.color,
-                                                    color: Colors.white)),
-                                            Padding(
-                                              padding:
-                                              EdgeInsets.only(left: 5),
-                                              child: Icon(
-                                                Icons.arrow_forward_ios,
-                                                size: 12,
-                                                color: Colors.white,
-                                              ),
-                                            )
-                                          ],
-                                        ),
-                                      )
-                                    ],
-                                  ),
-                                ),
-                              ))
+                                    onTap: () =>
+                                        _setTransactionPriority(context),
+                                    child: Container(
+                                      padding: EdgeInsets.only(top: 24),
+                                      child: Row(
+                                        mainAxisAlignment:
+                                            MainAxisAlignment.spaceBetween,
+                                        children: <Widget>[
+                                          Text(S.of(context).send_estimated_fee,
+                                              style: TextStyle(
+                                                  fontSize: 12,
+                                                  fontWeight: FontWeight.w500,
+                                                  //color: Theme.of(context).primaryTextTheme.display2.color,
+                                                  color: Colors.white)),
+                                          Container(
+                                            child: Row(
+                                              children: <Widget>[
+                                                Text(
+                                                    sendViewModel.estimatedFee
+                                                            .toString() +
+                                                        ' ' +
+                                                        sendViewModel
+                                                            .currency.title,
+                                                    style: TextStyle(
+                                                        fontSize: 12,
+                                                        fontWeight:
+                                                            FontWeight.w600,
+                                                        //color: Theme.of(context).primaryTextTheme.display2.color,
+                                                        color: Colors.white)),
+                                                Padding(
+                                                  padding:
+                                                      EdgeInsets.only(left: 5),
+                                                  child: Icon(
+                                                    Icons.arrow_forward_ios,
+                                                    size: 12,
+                                                    color: Colors.white,
+                                                  ),
+                                                )
+                                              ],
+                                            ),
+                                          )
+                                        ],
+                                      ),
+                                    ),
+                                  ))
                         ],
                       ),
                     )
@@ -358,7 +352,7 @@ class SendPage extends BasePage {
                                 alignment: Alignment.center,
                                 decoration: BoxDecoration(
                                   borderRadius:
-                                  BorderRadius.all(Radius.circular(20)),
+                                      BorderRadius.all(Radius.circular(20)),
                                   color: Colors.transparent,
                                 ),
                                 child: Text(
@@ -427,13 +421,12 @@ class SendPage extends BasePage {
               )
             ],
           ),
-          bottomSectionPadding: EdgeInsets.only(left: 24, right: 24, bottom: 24),
+          bottomSectionPadding:
+              EdgeInsets.only(left: 24, right: 24, bottom: 24),
           bottomSection: Observer(builder: (_) {
             return LoadingPrimaryButton(
                 onPressed: () {
-                  if (_formKey.currentState.validate()) {
-
-                  }
+                  if (_formKey.currentState.validate()) {}
                 },
                 text: S.of(context).send,
                 color: Theme.of(context).accentTextTheme.body2.color,
@@ -441,10 +434,9 @@ class SendPage extends BasePage {
                 isLoading: sendViewModel.state is IsExecutingState ||
                     sendViewModel.state is TransactionCommitting,
                 isDisabled:
-                false // FIXME !(syncStore.status is SyncedSyncStatus),
-            );
-          })
-      ),
+                    false // FIXME !(syncStore.status is SyncedSyncStatus),
+                );
+          })),
     );
   }
 
@@ -514,7 +506,7 @@ class SendPage extends BasePage {
                     alertTitle: S.of(context).confirm_sending,
                     amount: S.of(context).send_amount,
                     amountValue:
-                    sendViewModel.pendingTransaction.amountFormatted,
+                        sendViewModel.pendingTransaction.amountFormatted,
                     fee: S.of(context).send_fee,
                     feeValue: sendViewModel.pendingTransaction.feeFormatted,
                     leftButtonText: S.of(context).ok,
@@ -565,7 +557,10 @@ class SendPage extends BasePage {
                                             onPressed: () =>
                                                 Navigator.of(context).pop(),
                                             text: S.of(context).send_got_it,
-                                            color: Theme.of(context).accentTextTheme.body2.color,
+                                            color: Theme.of(context)
+                                                .accentTextTheme
+                                                .body2
+                                                .color,
                                             textColor: Colors.white))
                                   ],
                                 );
diff --git a/lib/src/screens/settings/change_language.dart b/lib/src/screens/settings/change_language.dart
index 3b06aefa8..37801802a 100644
--- a/lib/src/screens/settings/change_language.dart
+++ b/lib/src/screens/settings/change_language.dart
@@ -1,67 +1,67 @@
 import 'package:cake_wallet/src/screens/settings/widgets/language_row.dart';
 import 'package:cake_wallet/src/widgets/standard_list.dart';
+import 'package:cake_wallet/store/settings_store.dart';
+import 'package:cake_wallet/utils/show_pop_up.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/cupertino.dart';
+import 'package:flutter_mobx/flutter_mobx.dart';
 import 'package:provider/provider.dart';
 import 'package:cake_wallet/generated/i18n.dart';
-import 'package:cake_wallet/entities/language.dart';
+import 'package:cake_wallet/entities/language_service.dart';
+
 // import 'package:cake_wallet/src/stores/settings/settings_store.dart';
 import 'package:cake_wallet/src/screens/base_page.dart';
 import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
 
-// FIXME: FIXME
+class LanguageListPage extends BasePage {
+  LanguageListPage(this.settingsStore);
+
+  final SettingsStore settingsStore;
 
-class ChangeLanguage extends BasePage {
   @override
   String get title => S.current.settings_change_language;
 
   @override
   Widget body(BuildContext context) {
-    // final settingsStore = Provider.of<SettingsStore>(context);
-    // final currentLanguage = Provider.of<Language>(context);
-    //
-    // return Container(
-    //     padding: EdgeInsets.only(top: 10.0),
-    //     child: SectionStandardList(
-    //       sectionCount: 1,
-    //       context: context,
-    //       itemCounter: (int sectionIndex) => languages.values.length,
-    //       itemBuilder: (_, sectionIndex, index) {
-    //         final item = languages.values.elementAt(index);
-    //         final code = languages.keys.elementAt(index);
-    //
-    //         final isCurrent = settingsStore.languageCode == null
-    //             ? false
-    //             : code == settingsStore.languageCode;
-    //
-    //         return LanguageRow(
-    //           title: item,
-    //           isSelected: isCurrent,
-    //           handler: (context) async {
-    //             if (!isCurrent) {
-    //               await showPopUp<void>(
-    //                   context: context,
-    //                   builder: (BuildContext context) {
-    //                     return AlertWithTwoActions(
-    //                         alertTitle: S.of(context).change_language,
-    //                         alertContent: S.of(context).change_language_to(item),
-    //                         rightButtonText: S.of(context).change,
-    //                         leftButtonText: S.of(context).cancel,
-    //                         actionRightButton: () {
-    //                           settingsStore.saveLanguageCode(
-    //                               languageCode: code);
-    //                           currentLanguage.setCurrentLanguage(code);
-    //                           Navigator.of(context).pop();
-    //                         },
-    //                         actionLeftButton: () => Navigator.of(context).pop()
-    //                     );
-    //                   });
-    //             }
-    //           },
-    //         );
-    //       },
-    //     )
-    // );
+    return Container(
+        padding: EdgeInsets.only(top: 10.0),
+        child: SectionStandardList(
+          sectionCount: 1,
+          context: context,
+          itemCounter: (int sectionIndex) => LanguageService.list.values.length,
+          itemBuilder: (_, sectionIndex, index) {
+            return Observer(builder: (BuildContext context) {
+              final item = LanguageService.list.values.elementAt(index);
+              final code = LanguageService.list.keys.elementAt(index);
+              final isCurrent = code == settingsStore.languageCode ?? false;
+
+              return LanguageRow(
+                title: item,
+                isSelected: isCurrent,
+                handler: (context) async {
+                  if (!isCurrent) {
+                    await showPopUp<void>(
+                        context: context,
+                        builder: (BuildContext context) {
+                          return AlertWithTwoActions(
+                              alertTitle: S.of(context).change_language,
+                              alertContent:
+                                  S.of(context).change_language_to(item),
+                              rightButtonText: S.of(context).change,
+                              leftButtonText: S.of(context).cancel,
+                              actionRightButton: () {
+                                settingsStore.languageCode = code;
+                                Navigator.of(context).pop();
+                              },
+                              actionLeftButton: () =>
+                                  Navigator.of(context).pop());
+                        });
+                  }
+                },
+              );
+            });
+          },
+        ));
 
     return null;
   }
diff --git a/lib/src/widgets/alert_close_button.dart b/lib/src/widgets/alert_close_button.dart
index 0f21be5df..9349eb5b7 100644
--- a/lib/src/widgets/alert_close_button.dart
+++ b/lib/src/widgets/alert_close_button.dart
@@ -8,7 +8,7 @@ class AlertCloseButton extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
     return Positioned(
-        bottom: 24,
+        bottom: 60,
         child: GestureDetector(
           onTap: () => Navigator.of(context).pop(),
           child: Container(
diff --git a/lib/store/app_store.dart b/lib/store/app_store.dart
index 7b0cefe74..7421fa54e 100644
--- a/lib/store/app_store.dart
+++ b/lib/store/app_store.dart
@@ -4,7 +4,6 @@ import 'package:cake_wallet/store/wallet_list_store.dart';
 import 'package:cake_wallet/store/authentication_store.dart';
 import 'package:cake_wallet/store/settings_store.dart';
 import 'package:cake_wallet/store/node_list_store.dart';
-import 'package:cake_wallet/store/contact_list_store.dart';
 
 part 'app_store.g.dart';
 
@@ -15,7 +14,6 @@ abstract class AppStoreBase with Store {
       {this.authenticationStore,
       this.walletList,
       this.settingsStore,
-      this.contactListStore,
       this.nodeListStore});
 
   AuthenticationStore authenticationStore;
@@ -27,7 +25,5 @@ abstract class AppStoreBase with Store {
 
   SettingsStore settingsStore;
 
-  ContactListStore contactListStore;
-
   NodeListStore nodeListStore;
 }
diff --git a/lib/store/contact_list_store.dart b/lib/store/contact_list_store.dart
deleted file mode 100644
index 85194e0d6..000000000
--- a/lib/store/contact_list_store.dart
+++ /dev/null
@@ -1,12 +0,0 @@
-import 'package:mobx/mobx.dart';
-import 'package:cake_wallet/entities/contact_record.dart';
-
-part 'contact_list_store.g.dart';
-
-class ContactListStore = ContactListStoreBase with _$ContactListStore;
-
-abstract class ContactListStoreBase with Store {
-  ContactListStoreBase() : contacts = ObservableList<ContactRecord>();
-
-  final ObservableList<ContactRecord> contacts;
-}
diff --git a/lib/store/settings_store.dart b/lib/store/settings_store.dart
index d4f6bf95a..399cae107 100644
--- a/lib/store/settings_store.dart
+++ b/lib/store/settings_store.dart
@@ -1,5 +1,7 @@
 import 'package:cake_wallet/entities/preferences_key.dart';
+import 'package:cake_wallet/themes.dart';
 import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
 import 'package:hive/hive.dart';
 import 'package:mobx/mobx.dart';
 import 'package:package_info/package_info.dart';
@@ -7,7 +9,7 @@ import 'package:devicelocale/devicelocale.dart';
 import 'package:cake_wallet/di.dart';
 import 'package:cake_wallet/entities/wallet_type.dart';
 import 'package:shared_preferences/shared_preferences.dart';
-import 'package:cake_wallet/entities/language.dart';
+import 'package:cake_wallet/entities/language_service.dart';
 import 'package:cake_wallet/entities/balance_display_mode.dart';
 import 'package:cake_wallet/entities/fiat_currency.dart';
 import 'package:cake_wallet/entities/node.dart';
@@ -29,7 +31,7 @@ abstract class SettingsStoreBase with Store {
       @required bool initialDarkTheme,
       @required int initialPinLength,
       @required String initialLanguageCode,
-      @required String initialCurrentLocale,
+      // @required String initialCurrentLocale,
       @required this.appVersion,
       @required Map<WalletType, Node> nodes,
       this.actionlistDisplayMode}) {
@@ -41,7 +43,6 @@ abstract class SettingsStoreBase with Store {
     isDarkTheme = initialDarkTheme;
     pinCodeLength = initialPinLength;
     languageCode = initialLanguageCode;
-    currentLocale = initialCurrentLocale;
     currentNode = nodes[WalletType.monero];
     this.nodes = ObservableMap<WalletType, Node>.of(nodes);
     _sharedPreferences = sharedPreferences;
@@ -59,6 +60,10 @@ abstract class SettingsStoreBase with Store {
 
     reaction((_) => currentNode,
         (Node node) => _saveCurrentNode(node, WalletType.monero));
+
+    reaction((_) => languageCode,
+            (String languageCode) => sharedPreferences.setString(
+                PreferencesKey.currentLanguageCode, languageCode));
   }
 
   static const defaultPinLength = 4;
@@ -91,9 +96,11 @@ abstract class SettingsStoreBase with Store {
   @observable
   Node currentNode;
 
-  String languageCode;
+  @computed
+  ThemeData get theme => isDarkTheme ? Themes.darkTheme : Themes.lightTheme;
 
-  String currentLocale;
+  @observable
+  String languageCode;
 
   String appVersion;
 
@@ -135,8 +142,7 @@ abstract class SettingsStoreBase with Store {
             defaultPinLength;
     final savedLanguageCode =
         sharedPreferences.getString(PreferencesKey.currentLanguageCode) ??
-            await Language.localeDetection();
-    final initialCurrentLocale = await Devicelocale.currentLocale;
+            await LanguageService.localeDetection();
     final nodeId = sharedPreferences.getInt(PreferencesKey.currentNodeIdKey);
     final bitcoinElectrumServerId = sharedPreferences
         .getInt(PreferencesKey.currentBitcoinElectrumSererIdKey);
@@ -159,8 +165,8 @@ abstract class SettingsStoreBase with Store {
         initialDarkTheme: savedDarkTheme,
         actionlistDisplayMode: actionListDisplayMode,
         initialPinLength: pinLength,
-        initialLanguageCode: savedLanguageCode,
-        initialCurrentLocale: initialCurrentLocale);
+        initialLanguageCode: savedLanguageCode
+    );
   }
 
   Future<void> _saveCurrentNode(Node node, WalletType walletType) async {
diff --git a/lib/store/theme_changer_store.dart b/lib/store/theme_changer_store.dart
deleted file mode 100644
index 8c2e366ca..000000000
--- a/lib/store/theme_changer_store.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-import 'package:cake_wallet/theme_changer.dart';
-import 'package:mobx/mobx.dart';
-
-part 'theme_changer_store.g.dart';
-
-class ThemeChangerStore = ThemeChangerStoreBase with _$ThemeChangerStore;
-
-abstract class ThemeChangerStoreBase with Store {
-  ThemeChangerStoreBase({this.themeChanger});
-
-  @observable
-  ThemeChanger themeChanger;
-}
\ No newline at end of file
diff --git a/lib/theme_changer.dart b/lib/theme_changer.dart
deleted file mode 100644
index c26e0722c..000000000
--- a/lib/theme_changer.dart
+++ /dev/null
@@ -1,16 +0,0 @@
-import 'package:flutter/material.dart';
-
-class ThemeChanger with ChangeNotifier {
-  
-  ThemeChanger(this._themeData);
-
-  ThemeData _themeData;
-
-  ThemeData getTheme() => _themeData;
-
-  void setTheme(ThemeData theme){
-    _themeData = theme;
-
-    notifyListeners();
-  }
-}
\ No newline at end of file
diff --git a/lib/utils/date_formatter.dart b/lib/utils/date_formatter.dart
index cd64ef910..9707a9a70 100644
--- a/lib/utils/date_formatter.dart
+++ b/lib/utils/date_formatter.dart
@@ -4,7 +4,7 @@ import 'package:cake_wallet/store/settings_store.dart';
 
 class DateFormatter {
   static String get currentLocalFormat {
-    final isUSA = getIt.get<SettingsStore>().currentLocale == 'en_US';
+    final isUSA = getIt.get<SettingsStore>().languageCode.toLowerCase() == 'en';
     final format = isUSA ? 'yyyy.MM.dd, HH:mm' : 'dd.MM.yyyy, HH:mm';
 
     return format;
diff --git a/lib/utils/mobx.dart b/lib/utils/mobx.dart
index b11922f8e..344e16b64 100644
--- a/lib/utils/mobx.dart
+++ b/lib/utils/mobx.dart
@@ -84,7 +84,8 @@ extension MobxBindable<T extends Keyable> on Box<T> {
         return;
       }
 
-      dest.acceptBoxChange(event, transformed: transform(event.value as T));
+      dest.acceptBoxChange(event,
+          transformed: event.deleted ? null : transform(event.value as T));
     });
   }
 }
@@ -111,7 +112,8 @@ extension HiveBindable<T extends Keyable> on ObservableList<T> {
         }
 
         final value = change.newValue as T;
-        controller.add(EntityChange(value, type));
+        controller.add(EntityChange(value, type,
+            key: type == ChangeType.delete ? change.index : value.keyIndex));
       });
     });
 
diff --git a/lib/view_model/contact_list/contact_list_view_model.dart b/lib/view_model/contact_list/contact_list_view_model.dart
index aa3a5e2c7..8a59a0589 100644
--- a/lib/view_model/contact_list/contact_list_view_model.dart
+++ b/lib/view_model/contact_list/contact_list_view_model.dart
@@ -1,9 +1,7 @@
 import 'dart:async';
-import 'package:cake_wallet/entities/contact_record.dart';
 import 'package:hive/hive.dart';
 import 'package:mobx/mobx.dart';
-import 'package:cake_wallet/core/contact_service.dart';
-import 'package:cake_wallet/store/contact_list_store.dart';
+import 'package:cake_wallet/entities/contact_record.dart';
 import 'package:cake_wallet/entities/contact.dart';
 import 'package:cake_wallet/utils/mobx.dart';
 
@@ -13,24 +11,16 @@ class ContactListViewModel = ContactListViewModelBase
     with _$ContactListViewModel;
 
 abstract class ContactListViewModelBase with Store {
-  ContactListViewModelBase(
-      this.addressBookStore, this.contactService, this.contactSource) {
-    _subscription = contactSource.bindToListWithTransform(addressBookStore.contacts,
-        (Contact contact) => ContactRecord(contactSource, contact),
+  ContactListViewModelBase(this.contactSource)
+      : contacts = ObservableList<ContactRecord>() {
+    _subscription = contactSource.bindToListWithTransform(
+        contacts, (Contact contact) => ContactRecord(contactSource, contact),
         initialFire: true);
   }
 
-  final ContactListStore addressBookStore;
-  final ContactService contactService;
   final Box<Contact> contactSource;
-
-  ObservableList<ContactRecord>  get contacts => addressBookStore.contacts;
-
+  final ObservableList<ContactRecord> contacts;
   StreamSubscription<BoxEvent> _subscription;
 
-  void dispose() {
-    // _subscription.cancel();
-  }
-
-  Future<void> delete(Contact contact) async => contactService.delete(contact);
+  Future<void> delete(ContactRecord contact) async => contact.original.delete();
 }
diff --git a/lib/view_model/contact_list/contact_view_model.dart b/lib/view_model/contact_list/contact_view_model.dart
index cb48260b5..7e6312d1d 100644
--- a/lib/view_model/contact_list/contact_view_model.dart
+++ b/lib/view_model/contact_list/contact_view_model.dart
@@ -3,7 +3,6 @@ import 'package:hive/hive.dart';
 import 'package:mobx/mobx.dart';
 import 'package:cake_wallet/core/execution_state.dart';
 import 'package:cake_wallet/core/wallet_base.dart';
-import 'package:cake_wallet/core/contact_service.dart';
 import 'package:cake_wallet/entities/contact.dart';
 import 'package:cake_wallet/entities/crypto_currency.dart';
 
@@ -12,13 +11,13 @@ part 'contact_view_model.g.dart';
 class ContactViewModel = ContactViewModelBase with _$ContactViewModel;
 
 abstract class ContactViewModelBase with Store {
-  ContactViewModelBase(this._contacts, this._wallet, {ContactRecord contact})
+  ContactViewModelBase(this._contacts,  {ContactRecord contact})
       : state = InitialExecutionState(),
         currencies = CryptoCurrency.all,
         _contact = contact {
     name = _contact?.name;
     address = _contact?.address;
-    currency = _contact?.type; //_wallet.currency;
+    currency = _contact?.type;
   }
 
   @observable
@@ -40,7 +39,6 @@ abstract class ContactViewModelBase with Store {
       (address?.isNotEmpty ?? false);
 
   final List<CryptoCurrency> currencies;
-  final WalletBase _wallet;
   final Box<Contact> _contacts;
   final ContactRecord _contact;
 
@@ -60,10 +58,7 @@ abstract class ContactViewModelBase with Store {
         _contact.address = address;
         _contact.type = currency;
         await _contact.save();
-        // await _contacts.put(_contact.key, _contact);
       } else {
-        // final contact = ContactRecordBase.create(_contacts, name, address, currency);
-        // await contact.save();
         await _contacts
             .add(Contact(name: name, address: address, type: currency));
       }
diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart
index a664690de..19678cd03 100644
--- a/lib/view_model/send/send_view_model.dart
+++ b/lib/view_model/send/send_view_model.dart
@@ -70,15 +70,17 @@ abstract class SendViewModelBase with Store {
 
   @computed
   String get balance {
+    String balance = '0.0';
+
     if (_wallet is MoneroWallet) {
-      _wallet.balance.formattedUnlockedBalance;
+      balance = _wallet.balance.formattedUnlockedBalance as String ?? '';
     }
 
     if (_wallet is BitcoinWallet) {
-      _wallet.balance.confirmedFormatted;
+      balance = _wallet.balance.confirmedFormatted as String ?? '';
     }
 
-    return '0.0';
+    return balance;
   }
 
   @computed
diff --git a/lib/view_model/settings/settings_view_model.dart b/lib/view_model/settings/settings_view_model.dart
index bac456e79..e0ce07738 100644
--- a/lib/view_model/settings/settings_view_model.dart
+++ b/lib/view_model/settings/settings_view_model.dart
@@ -1,27 +1,24 @@
-import 'package:cake_wallet/core/wallet_base.dart';
-import 'package:cake_wallet/entities/biometric_auth.dart';
-import 'package:cake_wallet/entities/wallet_type.dart';
-import 'package:cake_wallet/di.dart';
-import 'package:cake_wallet/store/theme_changer_store.dart';
-import 'package:cake_wallet/themes.dart';
-import 'package:cake_wallet/view_model/settings/version_list_item.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:mobx/mobx.dart';
+import 'package:package_info/package_info.dart';
 import 'package:cake_wallet/routes.dart';
 import 'package:cake_wallet/generated/i18n.dart';
+import 'package:cake_wallet/core/wallet_base.dart';
 import 'package:cake_wallet/store/settings_store.dart';
+import 'package:cake_wallet/entities/biometric_auth.dart';
+import 'package:cake_wallet/entities/wallet_type.dart';
 import 'package:cake_wallet/entities/balance_display_mode.dart';
 import 'package:cake_wallet/entities/fiat_currency.dart';
 import 'package:cake_wallet/entities/node.dart';
 import 'package:cake_wallet/entities/transaction_priority.dart';
 import 'package:cake_wallet/entities/action_list_display_mode.dart';
-import 'package:cake_wallet/src/screens/auth/auth_page.dart';
+import 'package:cake_wallet/view_model/settings/version_list_item.dart';
 import 'package:cake_wallet/view_model/settings/link_list_item.dart';
 import 'package:cake_wallet/view_model/settings/picker_list_item.dart';
 import 'package:cake_wallet/view_model/settings/regular_list_item.dart';
 import 'package:cake_wallet/view_model/settings/settings_list_item.dart';
 import 'package:cake_wallet/view_model/settings/switcher_list_item.dart';
-import 'package:package_info/package_info.dart';
+import 'package:cake_wallet/src/screens/auth/auth_page.dart';
 
 part 'settings_view_model.g.dart';
 
@@ -111,13 +108,8 @@ abstract class SettingsViewModelBase with Store {
         SwitcherListItem(
             title: S.current.settings_dark_mode,
             value: () => _settingsStore.isDarkTheme,
-            onValueChange: (_, bool value) {
-              _settingsStore.isDarkTheme = value;
-              getIt
-                  .get<ThemeChangerStore>()
-                  .themeChanger
-                  .setTheme(value ? Themes.darkTheme : Themes.lightTheme);
-            })
+            onValueChange: (_, bool value) =>
+                _settingsStore.isDarkTheme = value)
       ],
       [
         LinkListItem(
diff --git a/test/widget_test.dart b/test/widget_test.dart
index 175df3eb4..2c7ba24a5 100644
--- a/test/widget_test.dart
+++ b/test/widget_test.dart
@@ -13,7 +13,7 @@ import 'package:cake_wallet/main.dart';
 void main() {
   testWidgets('Counter increments smoke test', (WidgetTester tester) async {
     // Build our app and trigger a frame.
-    await tester.pumpWidget(CakeWalletApp());
+    await tester.pumpWidget(App());
 
     // Verify that our counter starts at 0.
     expect(find.text('0'), findsOneWidget);