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/pages/nft_listing_page.dart';
5
import 'package:cake_wallet/src/screens/dashboard/widgets/home_screen_account_widget.dart';
6
import 'package:cake_wallet/src/screens/exchange_trade/information_page.dart';
7
import 'package:cake_wallet/src/widgets/introducing_card.dart';
12
import 'package:cake_wallet/utils/feature_flag.dart';
13
import 'package:cake_wallet/utils/show_pop_up.dart';
14
import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
15
+import 'package:cake_wallet/view_model/dashboard/nft_view_model.dart';
16
+import 'package:cw_core/wallet_type.dart';
17
import 'package:flutter/material.dart';
18
import 'package:flutter_mobx/flutter_mobx.dart';
19
20
class BalancePage extends StatelessWidget {
18
- BalancePage({required this.dashboardViewModel, required this.settingsStore});
21
+ BalancePage({
22
+ required this.dashboardViewModel,
23
+ required this.settingsStore,
24
+ required this.nftViewModel,
25
+ });
26
27
final DashboardViewModel dashboardViewModel;
28
+ final NFTViewModel nftViewModel;
29
final SettingsStore settingsStore;
30
31
+ @override
32
+ Widget build(BuildContext context) {
33
+ return Observer(
34
+ builder: (context) {
35
+ final isEthereumWallet = dashboardViewModel.type == WalletType.ethereum;
36
+ return DefaultTabController(
37
+ length: isEthereumWallet ? 2 : 1,
38
+ child: Column(
39
+ children: [
40
+ if (isEthereumWallet)
41
+ Align(
42
+ alignment: Alignment.centerLeft,
43
+ child: Padding(
44
+ padding: const EdgeInsets.only(left: 8),
45
+ child: TabBar(
46
+ indicatorSize: TabBarIndicatorSize.label,
47
+ isScrollable: true,
48
+ physics: NeverScrollableScrollPhysics(),
49
+ labelStyle: TextStyle(
50
+ fontSize: 18,
51
+ fontFamily: 'Lato',
52
+ fontWeight: FontWeight.w600,
53
+ color:
54
+ Theme.of(context).extension<DashboardPageTheme>()!.pageTitleTextColor,
55
+ height: 1,
56
+ ),
57
+ tabs: [
58
+ Tab(text: 'My Crypto'),
59
+ Tab(text: 'My NFTs'),
60
+ ],
61
+ ),
62
+ ),
63
+ ),
64
+ Expanded(
65
+ child: TabBarView(
66
+ physics: NeverScrollableScrollPhysics(),
67
+ children: [
68
+ CryptoBalanceWidget(dashboardViewModel: dashboardViewModel),
69
+ if (isEthereumWallet) NFTListingPage(nftViewModel: nftViewModel)
70
+ ],
71
+ ),
72
+ ),
73
+ ],
74
+ ),
75
+ );
76
+ },
77
+ );
78
+ }
79
+}
80
+
81
+class CryptoBalanceWidget extends StatelessWidget {
82
+ const CryptoBalanceWidget({
83
+ super.key,
84
+ required this.dashboardViewModel,
85
+ });
86
+
87
+ final DashboardViewModel dashboardViewModel;
88
+
89
@override
90
Widget build(BuildContext context) {
91
return GestureDetector(
104
accountName: dashboardViewModel.subname)
105
: Column(
106
children: [
41
- SizedBox(height: 56),
107
+ SizedBox(height: 16),
108
Container(
109
margin: const EdgeInsets.only(left: 24, bottom: 16),
110
child: Observer(
171
itemBuilder: (__, index) {
172
final balance =
173
dashboardViewModel.balanceViewModel.formattedBalances.elementAt(index);
108
- return buildBalanceRow(
109
- context,
174
+ return BalanceRowWidget(
175
availableBalanceLabel:
176
'${dashboardViewModel.balanceViewModel.availableBalanceLabel}',
177
availableBalance: balance.availableBalance,
195
),
196
);
197
}
198
+}
199
134
- Widget buildBalanceRow(
135
- BuildContext context, {
136
- required String availableBalanceLabel,
137
- required String availableBalance,
138
- required String availableFiatBalance,
139
- required String additionalBalanceLabel,
140
- required String additionalBalance,
141
- required String additionalFiatBalance,
142
- required String frozenBalance,
143
- required String frozenFiatBalance,
144
- required String currency,
145
- required bool hasAdditionalBalance,
146
- }) {
200
+class BalanceRowWidget extends StatelessWidget {
201
+ const BalanceRowWidget({
202
+ required this.availableBalanceLabel,
203
+ required this.availableBalance,
204
+ required this.availableFiatBalance,
205
+ required this.additionalBalanceLabel,
206
+ required this.additionalBalance,
207
+ required this.additionalFiatBalance,
208
+ required this.frozenBalance,
209
+ required this.frozenFiatBalance,
210
+ required this.currency,
211
+ required this.hasAdditionalBalance,
212
+ super.key,
213
+ });
214
+
215
+ final String availableBalanceLabel;
216
+ final String availableBalance;
217
+ final String availableFiatBalance;
218
+ final String additionalBalanceLabel;
219
+ final String additionalBalance;
220
+ final String additionalFiatBalance;
221
+ final String frozenBalance;
222
+ final String frozenFiatBalance;
223
+ final String currency;
224
+ final bool hasAdditionalBalance;
225
+
226
+ // void _showBalanceDescription(BuildContext context) {
227
+ // showPopUp<void>(
228
+ // context: context,
229
+ // builder: (_) =>
230
+ // InformationPage(information: S.current.available_balance_description),
231
+ // );
232
+ // }
233
+
234
+ @override
235
+ Widget build(BuildContext context) {
236
return Container(
237
margin: const EdgeInsets.only(left: 16, right: 16),
238
decoration: BoxDecoration(
254
children: [
255
GestureDetector(
256
behavior: HitTestBehavior.opaque,
168
- onTap: hasAdditionalBalance ? () =>
169
- _showBalanceDescription(context, S.current.available_balance_description)
257
+ onTap: hasAdditionalBalance
258
+ ? () =>
259
+ _showBalanceDescription(context, S.current.available_balance_description)
260
: null,
261
child: Column(
262
crossAxisAlignment: CrossAxisAlignment.start,
319
if (frozenBalance.isNotEmpty)
320
GestureDetector(
321
behavior: HitTestBehavior.opaque,
232
- onTap: hasAdditionalBalance ?
233
- () => _showBalanceDescription(context, S.current.unavailable_balance_description)
322
+ onTap: hasAdditionalBalance
323
+ ? () =>
324
+ _showBalanceDescription(context, S.current.unavailable_balance_description)
325
: null,
326
child: Column(
327
crossAxisAlignment: CrossAxisAlignment.start,
344
padding: const EdgeInsets.symmetric(horizontal: 4),
345
child: Icon(Icons.help_outline,
346
size: 16,
256
- color: Theme.of(context)
257
- .extension<BalancePageTheme>()!
258
- .labelTextColor),
347
+ color:
348
+ Theme.of(context).extension<BalancePageTheme>()!.labelTextColor),
349
),
350
],
351
),
427
}
428
429
void _showBalanceDescription(BuildContext context, String content) {
340
- showPopUp<void>(
341
- context: context,
342
- builder: (_) => InformationPage(information: content));
430
+ showPopUp<void>(context: context, builder: (_) => InformationPage(information: content));
431
}
432
}