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