stack_wallet/lib/widgets/trade_card.dart
2022-08-26 16:11:35 +08:00

115 lines
3.8 KiB
Dart

import 'package:decimal/decimal.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
import 'package:stackwallet/models/exchange/change_now/exchange_transaction.dart';
import 'package:stackwallet/models/exchange/change_now/exchange_transaction_status.dart';
import 'package:stackwallet/utilities/assets.dart';
import 'package:stackwallet/utilities/format.dart';
import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/widgets/rounded_white_container.dart';
class TradeCard extends ConsumerWidget {
const TradeCard({
Key? key,
required this.trade,
required this.onTap,
}) : super(key: key);
final ExchangeTransaction trade;
final VoidCallback onTap;
String _fetchIconAssetForStatus(String statusString) {
ChangeNowTransactionStatus? status;
try {
if (statusString.toLowerCase().startsWith("waiting")) {
statusString = "waiting";
}
status = changeNowTransactionStatusFromStringIgnoreCase(statusString);
} on ArgumentError catch (_) {
status = ChangeNowTransactionStatus.Failed;
}
switch (status) {
case ChangeNowTransactionStatus.New:
case ChangeNowTransactionStatus.Waiting:
case ChangeNowTransactionStatus.Confirming:
case ChangeNowTransactionStatus.Exchanging:
case ChangeNowTransactionStatus.Sending:
case ChangeNowTransactionStatus.Refunded:
case ChangeNowTransactionStatus.Verifying:
return Assets.svg.txExchangePending;
case ChangeNowTransactionStatus.Finished:
return Assets.svg.txExchange;
case ChangeNowTransactionStatus.Failed:
return Assets.svg.txExchangeFailed;
}
}
@override
Widget build(BuildContext context, WidgetRef ref) {
return GestureDetector(
onTap: onTap,
child: RoundedWhiteContainer(
child: Row(
children: [
Container(
width: 32,
height: 32,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(32),
),
child: Center(
child: SvgPicture.asset(
_fetchIconAssetForStatus(
trade.statusObject?.status.name ?? trade.statusString),
width: 32,
height: 32,
),
),
),
const SizedBox(
width: 12,
),
Expanded(
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"${trade.fromCurrency.toUpperCase()}${trade.toCurrency.toUpperCase()}",
style: STextStyles.itemSubtitle12,
),
Text(
"${Decimal.tryParse(trade.statusObject?.amountSendDecimal ?? "") ?? "..."} ${trade.fromCurrency.toUpperCase()}",
style: STextStyles.itemSubtitle12,
),
],
),
const SizedBox(
height: 2,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"ChangeNOW",
style: STextStyles.label,
),
Text(
Format.extractDateFrom(
trade.date.millisecondsSinceEpoch ~/ 1000),
style: STextStyles.label,
),
],
),
],
),
)
],
),
),
);
}
}