dev
dart 97 lines 3.56 KB
Raw
1 import 'package:cake_wallet/src/screens/order_details/cake_pay_detail_list_card_item.dart';
2 import 'package:cake_wallet/src/screens/trade_details/trade_details_status_item.dart';
3 import 'package:cake_wallet/src/widgets/cake_pay_order_list_card.dart';
4 import 'package:cake_wallet/src/widgets/standard_list.dart';
5 import 'package:cake_wallet/src/widgets/standard_list_status_row.dart';
6 import 'package:cake_wallet/themes/core/material_base_theme.dart';
7 import 'package:cake_wallet/utils/show_bar.dart';
8 import 'package:cake_wallet/view_model/order_details_view_model.dart';
9 import 'package:flutter/material.dart';
10 import 'package:flutter/cupertino.dart';
11 import 'package:flutter/services.dart';
12 import 'package:flutter_mobx/flutter_mobx.dart';
13 import 'package:cake_wallet/generated/i18n.dart';
14 import 'package:cake_wallet/src/screens/base_page.dart';
15 import 'package:cake_wallet/src/widgets/list_row.dart';
16 import 'package:cake_wallet/src/screens/trade_details/track_trade_list_item.dart';
17
18 class OrderDetailsPage extends BasePage {
19 OrderDetailsPage(this.orderDetailsViewModel);
20
21 @override
22 String get title => 'Order Details';
23
24 final OrderDetailsViewModel orderDetailsViewModel;
25
26 @override
27 Widget body(BuildContext context) => OrderDetailsPageBody(orderDetailsViewModel, currentTheme);
28 }
29
30 class OrderDetailsPageBody extends StatefulWidget {
31 OrderDetailsPageBody(this.orderDetailsViewModel, this.currentTheme);
32
33 final OrderDetailsViewModel orderDetailsViewModel;
34 final MaterialThemeBase currentTheme;
35
36 @override
37 OrderDetailsPageBodyState createState() =>
38 OrderDetailsPageBodyState(orderDetailsViewModel, currentTheme);
39 }
40
41 class OrderDetailsPageBodyState extends State<OrderDetailsPageBody> {
42 OrderDetailsPageBodyState(this.orderDetailsViewModel, this.currentTheme);
43
44 final OrderDetailsViewModel orderDetailsViewModel;
45 final MaterialThemeBase currentTheme;
46
47 @override
48 void dispose() {
49 super.dispose();
50 orderDetailsViewModel.timer?.cancel();
51 }
52
53 @override
54 Widget build(BuildContext context) {
55 return Observer(builder: (_) {
56 final itemsCount = orderDetailsViewModel.items.length;
57 return SectionStandardList(
58 sectionCount: 1,
59 itemCounter: (int _) => itemsCount,
60 itemBuilder: (__, index) {
61 final item = orderDetailsViewModel.items[index];
62
63 if (item is DetailsListStatusItem) {
64 return StandardListStatusRow(title: item.title, value: item.value);
65 }
66
67 if (item is CakePayDetailsListCardItem) {
68 final cardImagePath = (item.cards.isNotEmpty) ? item.cards.first.cardImagePath : null;
69
70 return CakePayOrderListCard(
71 id: item.id,
72 create: item.createdAt,
73 price: item.price,
74 quantity: item.quantity,
75 pair: '${item.from}${item.to}',
76 currentTheme: widget.currentTheme.type,
77 onTap: item.onTap,
78 backgroundImage: cardImagePath,
79 );
80 }
81
82 if (item is TrackTradeListItem) {
83 return GestureDetector(
84 onTap: item.onTap,
85 child: ListRow(title: '${item.title}', value: '${item.value}'));
86 } else {
87 return GestureDetector(
88 onTap: () {
89 Clipboard.setData(ClipboardData(text: '${item.value}'));
90 showBar<void>(context, S.of(context).copied_to_clipboard);
91 },
92 child: ListRow(title: '${item.title}', value: '${item.value}'));
93 }
94 });
95 });
96 }
97 }