All checks were successful
ci/woodpecker/push/billing_fees Pipeline was successful
ci/woodpecker/push/db Pipeline was successful
ci/woodpecker/push/bff Pipeline was successful
ci/woodpecker/push/discovery Pipeline was successful
ci/woodpecker/push/fx_ingestor Pipeline was successful
ci/woodpecker/push/fx_oracle Pipeline was successful
ci/woodpecker/push/frontend Pipeline was successful
ci/woodpecker/push/gateway_mntx Pipeline was successful
ci/woodpecker/push/gateway_chain Pipeline was successful
ci/woodpecker/push/gateway_tgsettle Pipeline was successful
ci/woodpecker/push/nats Pipeline was successful
ci/woodpecker/push/ledger Pipeline was successful
ci/woodpecker/push/notification Pipeline was successful
ci/woodpecker/push/payments_orchestrator Pipeline was successful
86 lines
2.6 KiB
Dart
86 lines
2.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import 'package:pshared/models/ledger/account.dart';
|
|
import 'package:pshared/utils/currency.dart';
|
|
|
|
import 'package:pweb/generated/i18n/app_localizations.dart';
|
|
import 'package:pweb/pages/dashboard/buttons/balance/config.dart';
|
|
import 'package:pweb/pages/dashboard/buttons/balance/header.dart';
|
|
import 'package:pweb/widgets/refresh_balance/ledger.dart';
|
|
|
|
|
|
class LedgerAccountCard extends StatelessWidget {
|
|
final LedgerAccount account;
|
|
|
|
const LedgerAccountCard({
|
|
super.key,
|
|
required this.account,
|
|
});
|
|
|
|
String _formatBalance() {
|
|
final money = account.balance?.balance;
|
|
if (money == null) return '--';
|
|
|
|
final amount = double.tryParse(money.amount);
|
|
if (amount == null) {
|
|
return '${money.amount} ${money.currency}';
|
|
}
|
|
|
|
try {
|
|
final currency = currencyStringToCode(money.currency);
|
|
final symbol = currencyCodeToSymbol(currency);
|
|
if (symbol.trim().isEmpty) {
|
|
return '${amountToString(amount)} ${money.currency}';
|
|
}
|
|
return '${amountToString(amount)} $symbol';
|
|
} catch (_) {
|
|
return '${amountToString(amount)} ${money.currency}';
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final textTheme = Theme.of(context).textTheme;
|
|
final colorScheme = Theme.of(context).colorScheme;
|
|
final loc = AppLocalizations.of(context)!;
|
|
final subtitle = account.name.isNotEmpty ? account.name : account.accountCode;
|
|
final badge = account.currency.trim().isEmpty ? null : account.currency.toUpperCase();
|
|
|
|
return Card(
|
|
color: colorScheme.onSecondary,
|
|
elevation: WalletCardConfig.elevation,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(WalletCardConfig.borderRadius),
|
|
),
|
|
child: Padding(
|
|
padding: WalletCardConfig.contentPadding,
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
BalanceHeader(
|
|
title: loc.paymentTypeLedger,
|
|
subtitle: subtitle.isNotEmpty ? subtitle : null,
|
|
badge: badge,
|
|
),
|
|
Row(
|
|
children: [
|
|
Text(
|
|
_formatBalance(),
|
|
style: textTheme.headlineSmall?.copyWith(
|
|
fontWeight: FontWeight.bold,
|
|
color: colorScheme.onSurface,
|
|
),
|
|
),
|
|
const SizedBox(width: 12),
|
|
LedgerBalanceRefreshButton(
|
|
ledgerAccountRef: account.ledgerAccountRef,
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|