dev
dart 80 lines 2.75 KB
Raw
1 import 'package:cake_wallet/generated/i18n.dart';
2 import 'package:cake_wallet/src/screens/base_page.dart';
3 import 'package:cake_wallet/src/screens/trade_details/trade_details_list_card.dart';
4 import 'package:cake_wallet/src/screens/trade_details/trade_details_status_item.dart';
5 import 'package:cake_wallet/src/widgets/list_row.dart';
6 import 'package:cake_wallet/src/widgets/standard_list.dart';
7 import 'package:cake_wallet/src/widgets/standard_list_card.dart';
8 import 'package:cake_wallet/src/widgets/standard_list_status_row.dart';
9 import 'package:cake_wallet/themes/core/material_base_theme.dart';
10 import 'package:cake_wallet/utils/show_bar.dart';
11 import 'package:cake_wallet/view_model/payjoin_details_view_model.dart';
12 import 'package:flutter/material.dart';
13 import 'package:flutter/services.dart';
14
15 class PayjoinDetailsPage extends BasePage {
16 PayjoinDetailsPage({required this.payjoinDetailsViewModel});
17
18 @override
19 String get title => S.current.payjoin_details;
20
21 final PayjoinDetailsViewModel payjoinDetailsViewModel;
22
23 @override
24 Widget body(BuildContext context) =>
25 PayjoinDetailsPageBody(payjoinDetailsViewModel, currentTheme);
26 }
27
28 class PayjoinDetailsPageBody extends StatefulWidget {
29 PayjoinDetailsPageBody(this.payjoinDetailsViewModel, this.currentTheme);
30
31 final PayjoinDetailsViewModel payjoinDetailsViewModel;
32 final MaterialThemeBase currentTheme;
33
34 @override
35 State<PayjoinDetailsPageBody> createState() => _PayjoinDetailsPageBodyState();
36 }
37
38 class _PayjoinDetailsPageBodyState extends State<PayjoinDetailsPageBody> {
39 @override
40 void dispose() {
41 super.dispose();
42 widget.payjoinDetailsViewModel.listener.cancel();
43 }
44
45 @override
46 Widget build(BuildContext context) {
47 return SectionStandardList(
48 sectionCount: 1,
49 itemCounter: (int _) => widget.payjoinDetailsViewModel.items.length,
50 itemBuilder: (__, index) {
51 final item = widget.payjoinDetailsViewModel.items[index];
52
53 if (item is DetailsListStatusItem) {
54 return StandardListStatusRow(
55 title: item.title,
56 value: item.value,
57 status: item.status,
58 );
59 }
60
61 if (item is TradeDetailsListCardItem) {
62 return TradeDetailsStandardListCard(
63 id: item.id,
64 create: item.createdAt,
65 pair: item.pair,
66 currentTheme: widget.currentTheme.type,
67 onTap: item.onTap,
68 );
69 }
70
71 return GestureDetector(
72 onTap: () {
73 Clipboard.setData(ClipboardData(text: item.value));
74 showBar<void>(context, S.of(context).transaction_details_copied(item.title));
75 },
76 child: ListRow(title: '${item.title}:', value: item.value),
77 );
78 });
79 }
80 }