CW-502-Add-Monero-Account-Management-to-Home-Screen (#1140)

* Add the monero account widget on the Home screen * [skip ci] add hasAccounts variable

Serhii committed Nov 3, 2023 at 07:41 UTC 7710a19e827483ccab4ac40e1c0cf5f1543a66dd
3 files changed +129 -44
lib/src/screens/dashboard/widgets/balance_page.dart
+57 -44
@@ -1,17 +1,18 @@
1 +import 'package:auto_size_text/auto_size_text.dart';
2 +import 'package:cake_wallet/generated/i18n.dart';
3 import 'package:cake_wallet/routes.dart';
4 +import 'package:cake_wallet/src/screens/dashboard/widgets/home_screen_account_widget.dart';
5 import 'package:cake_wallet/src/screens/exchange_trade/information_page.dart';
6 +import 'package:cake_wallet/src/widgets/introducing_card.dart';
7 import 'package:cake_wallet/store/settings_store.dart';
8 +import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
9 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
10 import 'package:cake_wallet/themes/extensions/sync_indicator_theme.dart';
11 import 'package:cake_wallet/utils/feature_flag.dart';
12 import 'package:cake_wallet/utils/show_pop_up.dart';
7 -import 'package:flutter/material.dart';
13 import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
14 +import 'package:flutter/material.dart';
15 import 'package:flutter_mobx/flutter_mobx.dart';
10 -import 'package:auto_size_text/auto_size_text.dart';
11 -import 'package:cake_wallet/src/widgets/introducing_card.dart';
12 -import 'package:cake_wallet/generated/i18n.dart';
13 -import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
14 -import 'package:cake_wallet/themes/extensions/balance_page_theme.dart';
16
17 class BalancePage extends StatelessWidget {
18 BalancePage({required this.dashboardViewModel, required this.settingsStore});
@@ -28,47 +29,59 @@ class BalancePage extends StatelessWidget {
29 !dashboardViewModel.balanceViewModel.isReversing,
30 child: SingleChildScrollView(
31 child: Column(
31 - crossAxisAlignment: CrossAxisAlignment.start,
32 + crossAxisAlignment: CrossAxisAlignment.center,
33 children: [
33 - SizedBox(height: 56),
34 - Container(
35 - margin: const EdgeInsets.only(left: 24, bottom: 16),
36 - child: Observer(
37 - builder: (_) {
38 - return Row(
39 - children: [
40 - Text(
41 - dashboardViewModel.balanceViewModel.asset,
42 - style: TextStyle(
43 - fontSize: 24,
44 - fontFamily: 'Lato',
45 - fontWeight: FontWeight.w600,
46 - color:
47 - Theme.of(context).extension<DashboardPageTheme>()!.pageTitleTextColor,
48 - height: 1,
49 - ),
50 - maxLines: 1,
51 - textAlign: TextAlign.center,
52 - ),
53 - if (dashboardViewModel.balanceViewModel.isHomeScreenSettingsEnabled)
54 - InkWell(
55 - onTap: () => Navigator.pushNamed(context, Routes.homeSettings,
56 - arguments: dashboardViewModel.balanceViewModel),
57 - child: Padding(
58 - padding: const EdgeInsets.all(8.0),
59 - child: Image.asset(
60 - 'assets/images/home_screen_settings_icon.png',
61 - color: Theme.of(context)
62 - .extension<DashboardPageTheme>()!
63 - .pageTitleTextColor,
34 + Observer(
35 + builder: (_) => dashboardViewModel.balanceViewModel.hasAccounts
36 + ? HomeScreenAccountWidget(
37 + walletName: dashboardViewModel.name,
38 + accountName: dashboardViewModel.subname)
39 + : Column(
40 + children: [
41 + SizedBox(height: 56),
42 + Container(
43 + margin: const EdgeInsets.only(left: 24, bottom: 16),
44 + child: Observer(
45 + builder: (_) {
46 + return Row(
47 + children: [
48 + Text(
49 + dashboardViewModel.balanceViewModel.asset,
50 + style: TextStyle(
51 + fontSize: 24,
52 + fontFamily: 'Lato',
53 + fontWeight: FontWeight.w600,
54 + color: Theme.of(context)
55 + .extension<DashboardPageTheme>()!
56 + .pageTitleTextColor,
57 + height: 1,
58 + ),
59 + maxLines: 1,
60 + textAlign: TextAlign.center,
61 + ),
62 + if (dashboardViewModel
63 + .balanceViewModel.isHomeScreenSettingsEnabled)
64 + InkWell(
65 + onTap: () => Navigator.pushNamed(
66 + context, Routes.homeSettings,
67 + arguments: dashboardViewModel.balanceViewModel),
68 + child: Padding(
69 + padding: const EdgeInsets.all(8.0),
70 + child: Image.asset(
71 + 'assets/images/home_screen_settings_icon.png',
72 + color: Theme.of(context)
73 + .extension<DashboardPageTheme>()!
74 + .pageTitleTextColor,
75 + ),
76 + ),
77 + ),
78 + ],
79 + );
80 + },
81 ),
82 ),
66 - ),
67 - ],
68 - );
69 - },
70 - ),
71 - ),
83 + ],
84 + )),
85 Observer(
86 builder: (_) {
87 if (dashboardViewModel.balanceViewModel.isShowCard &&
lib/src/screens/dashboard/widgets/home_screen_account_widget.dart new
+69
@@ -0,0 +1,69 @@
1 +import 'package:cake_wallet/di.dart';
2 +import 'package:cake_wallet/src/screens/monero_accounts/monero_account_list_page.dart';
3 +import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
4 +import 'package:cake_wallet/utils/show_pop_up.dart';
5 +import 'package:flutter/material.dart';
6 +
7 +class HomeScreenAccountWidget extends StatelessWidget {
8 + HomeScreenAccountWidget({this.walletName, this.accountName});
9 +
10 + final String? walletName;
11 + final String? accountName;
12 +
13 + @override
14 + Widget build(BuildContext context) {
15 + return GestureDetector(
16 + onTap: () async {
17 + await showPopUp<void>(
18 + context: context,
19 + builder: (_) => getIt.get<MoneroAccountListPage>());
20 + },
21 + child: Container(
22 + height: 100.0,
23 + child: Row(
24 + mainAxisSize: MainAxisSize.min,
25 + mainAxisAlignment: MainAxisAlignment.center,
26 + crossAxisAlignment: CrossAxisAlignment.center,
27 + children: [
28 + Column(
29 + mainAxisAlignment: MainAxisAlignment.center,
30 + children: [
31 + Container(
32 + child: Text(
33 + walletName ?? '',
34 + style: TextStyle(
35 + fontSize: 22.0,
36 + fontWeight: FontWeight.bold,
37 + fontFamily: 'Lato',
38 + color: Theme.of(context).extension<DashboardPageTheme>()!.pageTitleTextColor,
39 + ),
40 + ),
41 + ),
42 + SizedBox(
43 + height: 5.0,
44 + ),
45 + Container(
46 + child: Text(
47 + accountName ?? '',
48 + style: TextStyle(
49 + fontSize: 14.0,
50 + fontWeight: FontWeight.bold,
51 + fontFamily: 'Lato',
52 + color: Theme.of(context).extension<DashboardPageTheme>()!.pageTitleTextColor,
53 + ),
54 + ),
55 + ),
56 + ],
57 + ),
58 + Container(
59 + child: Icon(
60 + Icons.keyboard_arrow_down,
61 + color: Theme.of(context).extension<DashboardPageTheme>()!.pageTitleTextColor,
62 + ),
63 + ),
64 + ],
65 + ),
66 + ),
67 + );
68 + }
69 +}
lib/view_model/dashboard/balance_view_model.dart
+3
@@ -83,6 +83,9 @@ abstract class BalanceViewModelBase with Store {
83 @computed
84 bool get isHomeScreenSettingsEnabled => wallet.type == WalletType.ethereum;
85
86 + @computed
87 + bool get hasAccounts => wallet.type == WalletType.monero;
88 +
89 @computed
90 SortBalanceBy get sortBalanceBy => settingsStore.sortBalanceBy;
91