dev
dart 79 lines 3.01 KB
Raw
1 import 'dart:async';
2
3 import 'package:cake_wallet/anonpay/anonpay_api.dart';
4 import 'package:cake_wallet/anonpay/anonpay_invoice_info.dart';
5 import 'package:cake_wallet/generated/i18n.dart';
6 import 'package:cake_wallet/src/screens/trade_details/track_trade_list_item.dart';
7 import 'package:cake_wallet/src/screens/trade_details/trade_details_list_card.dart';
8 import 'package:cake_wallet/src/screens/trade_details/trade_details_status_item.dart';
9 import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
10 import 'package:cake_wallet/themes/core/theme_store.dart';
11 import 'package:cake_wallet/utils/date_formatter.dart';
12 import 'package:cake_wallet/utils/show_bar.dart';
13 import 'package:cw_core/crypto_currency.dart';
14 import 'package:cw_core/utils/print_verbose.dart';
15 import 'package:flutter/material.dart';
16 import 'package:flutter/services.dart';
17 import 'package:mobx/mobx.dart';
18 import 'package:url_launcher/url_launcher_string.dart';
19
20 part 'anonpay_details_view_model.g.dart';
21
22 class AnonpayDetailsViewModel = AnonpayDetailsViewModelBase with _$AnonpayDetailsViewModel;
23
24 abstract class AnonpayDetailsViewModelBase with Store {
25 AnonpayDetailsViewModelBase(
26 {required this.anonPayApi,
27 required AnonpayInvoiceInfo anonpayInvoiceInfo,
28 required this.themeStore})
29 : items = ObservableList<StandartListItem>(),
30 invoiceDetail = anonpayInvoiceInfo {
31 _updateItems();
32 _updateInvoiceDetail();
33 timer = Timer.periodic(Duration(seconds: 20), (_) async => _updateInvoiceDetail());
34 }
35
36 final AnonPayApi anonPayApi;
37 final ThemeStore themeStore;
38 final AnonpayInvoiceInfo invoiceDetail;
39
40 final ObservableList<StandartListItem> items;
41
42 Timer? timer;
43
44 @action
45 Future<void> _updateInvoiceDetail() async {
46 try {
47 final data = await anonPayApi.paymentStatus(invoiceDetail.invoiceId);
48 invoiceDetail.status = data.status;
49 _updateItems();
50 } catch (e) {
51 printV(e.toString());
52 }
53 }
54
55 void _updateItems() {
56 final dateFormat = DateFormatter.withCurrentLocal();
57 items.clear();
58 items.addAll([
59 DetailsListStatusItem(title: S.current.status, value: invoiceDetail.status),
60 TradeDetailsListCardItem(
61 id: invoiceDetail.invoiceId,
62 createdAt: dateFormat.format(invoiceDetail.createdAt).toString(),
63 pair: (invoiceDetail.fiatAmount != null)
64 ? "→ ${invoiceDetail.fiatAmount} ${invoiceDetail.fiatEquiv ?? ''}"
65 : '→ ${invoiceDetail.amountTo ?? ''} ${CryptoCurrency.fromFullName(invoiceDetail.coinTo).name.toUpperCase()}',
66 onTap: (BuildContext context) {
67 Clipboard.setData(ClipboardData(text: '${invoiceDetail.invoiceId}'));
68 showBar<void>(context, S.of(context).copied_to_clipboard);
69 },
70 ),
71 StandartListItem(title: S.current.trade_details_provider, value: invoiceDetail.provider)
72 ]);
73
74 items.add(TrackTradeListItem(
75 title: S.current.track,
76 value: invoiceDetail.clearnetStatusUrl,
77 onTap: () => launchUrlString(invoiceDetail.clearnetStatusUrl)));
78 }
79 }