cake_wallet/lib/src/screens/transaction_details/transaction_details_page.dart

117 lines
4.2 KiB
Dart
Raw Normal View History

2020-11-06 18:54:00 +00:00
import 'package:cake_wallet/entities/transaction_description.dart';
2020-09-30 18:23:15 +00:00
import 'package:cake_wallet/utils/show_bar.dart';
2020-01-04 19:31:52 +00:00
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:cake_wallet/generated/i18n.dart';
2020-07-06 20:09:03 +00:00
import 'package:cake_wallet/bitcoin/bitcoin_transaction_info.dart';
2020-09-21 11:50:26 +00:00
import 'package:cake_wallet/monero/monero_transaction_info.dart';
import 'package:cake_wallet/entities/transaction_info.dart';
import 'package:cake_wallet/src/widgets/standart_list_row.dart';
2020-07-06 20:09:03 +00:00
import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
2020-01-04 19:31:52 +00:00
import 'package:cake_wallet/src/screens/base_page.dart';
2020-09-21 11:50:26 +00:00
import 'package:cake_wallet/utils/date_formatter.dart';
2020-11-06 18:54:00 +00:00
import 'package:hive/hive.dart';
2020-01-04 19:31:52 +00:00
class TransactionDetailsPage extends BasePage {
2020-11-06 18:54:00 +00:00
TransactionDetailsPage(this.transactionInfo, bool showRecipientAddress, Box<TransactionDescription> transactionDescriptionBox)
: _items = [] {
2020-09-21 11:50:26 +00:00
final dateFormat = DateFormatter.withCurrentLocal();
2020-07-06 20:09:03 +00:00
final tx = transactionInfo;
2020-05-12 12:04:54 +00:00
if (tx is MoneroTransactionInfo) {
final items = [
StandartListItem(
title: S.current.transaction_details_transaction_id, value: tx.id),
StandartListItem(
title: S.current.transaction_details_date,
2020-07-06 20:09:03 +00:00
value: dateFormat.format(tx.date)),
2020-05-12 12:04:54 +00:00
StandartListItem(
title: S.current.transaction_details_height, value: '${tx.height}'),
StandartListItem(
title: S.current.transaction_details_amount,
2020-11-10 22:24:50 +00:00
value: tx.amountFormatted()),
StandartListItem(
title: S.current.send_fee,
value: tx.feeFormatted())
2020-05-12 12:04:54 +00:00
];
2020-11-06 18:54:00 +00:00
if (showRecipientAddress) {
final recipientAddress = transactionDescriptionBox.values.firstWhere((val) => val.id == transactionInfo.id, orElse: () => null)?.recipientAddress;
if (recipientAddress?.isNotEmpty ?? false) {
items.add(StandartListItem(
title: S.current.transaction_details_recipient_address,
value: recipientAddress));
}
}
if (tx.key?.isNotEmpty ?? null) {
2020-09-24 15:11:29 +00:00
// FIXME: add translation
items.add(StandartListItem(title: 'Transaction Key', value: tx.key));
}
2020-05-12 12:04:54 +00:00
_items.addAll(items);
2020-01-04 19:31:52 +00:00
}
2020-07-06 20:09:03 +00:00
if (tx is BitcoinTransactionInfo) {
final items = [
StandartListItem(
title: S.current.transaction_details_transaction_id, value: tx.id),
StandartListItem(
title: S.current.transaction_details_date,
value: dateFormat.format(tx.date)),
2020-08-29 10:19:27 +00:00
StandartListItem(
2020-09-21 11:50:26 +00:00
title: 'Confirmations', value: tx.confirmations?.toString()),
2020-07-06 20:09:03 +00:00
StandartListItem(
title: S.current.transaction_details_height, value: '${tx.height}'),
StandartListItem(
title: S.current.transaction_details_amount,
value: tx.amountFormatted())
];
2020-01-04 19:31:52 +00:00
2020-07-06 20:09:03 +00:00
_items.addAll(items);
}
2020-01-04 19:31:52 +00:00
}
@override
2020-07-06 20:09:03 +00:00
String get title => S.current.transaction_details_title;
2020-01-04 19:31:52 +00:00
2020-07-06 20:09:03 +00:00
final TransactionInfo transactionInfo;
2020-01-04 19:31:52 +00:00
2020-07-06 20:09:03 +00:00
final List<StandartListItem> _items;
2020-01-04 19:31:52 +00:00
@override
2020-07-06 20:09:03 +00:00
Widget body(BuildContext context) {
2020-01-04 19:31:52 +00:00
return Container(
child: ListView.separated(
separatorBuilder: (context, index) => Container(
2020-07-06 20:09:03 +00:00
height: 1,
padding: EdgeInsets.only(left: 24),
color: Theme.of(context).backgroundColor,
2020-07-06 20:09:03 +00:00
child: Container(
height: 1,
2020-09-21 11:50:26 +00:00
color:
Theme.of(context).primaryTextTheme.title.backgroundColor,
2020-07-06 20:09:03 +00:00
),
),
2020-01-04 19:31:52 +00:00
itemCount: _items.length,
itemBuilder: (context, index) {
final item = _items[index];
final isDrawBottom = index == _items.length - 1 ? true : false;
2020-01-04 19:31:52 +00:00
return GestureDetector(
onTap: () {
Clipboard.setData(ClipboardData(text: item.value));
2020-09-30 18:23:15 +00:00
showBar<void>(context,
S.of(context).transaction_details_copied(item.title));
2020-01-04 19:31:52 +00:00
},
2020-07-06 20:09:03 +00:00
child: StandartListRow(
title: '${item.title}:',
value: item.value,
isDrawBottom: isDrawBottom),
2020-01-04 19:31:52 +00:00
);
}),
);
}
}