Files
sendico/frontend/pweb/lib/pages/wallet_top_up/page.dart
2026-02-04 02:01:22 +03:00

77 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:collection/collection.dart';
import 'package:provider/provider.dart';
import 'package:pshared/controllers/balance_mask/wallets.dart';
import 'package:pshared/controllers/payment/source.dart';
import 'package:pshared/models/payment/source.dart';
import 'package:pshared/provider/ledger.dart';
import 'package:pweb/pages/wallet_top_up/content.dart';
import 'package:pweb/pages/wallet_top_up/ledger_content.dart';
import 'package:pweb/generated/i18n/app_localizations.dart';
class WalletTopUpPage extends StatelessWidget {
final VoidCallback onBack;
const WalletTopUpPage({super.key, required this.onBack});
@override
Widget build(BuildContext context) {
final loc = AppLocalizations.of(context)!;
final source = context.watch<PaymentSourceController>().selectedSource;
if (source == null) {
return Center(child: Text(loc.noWalletSelected));
}
return switch (source.type) {
PaymentSourceType.wallet => Consumer<WalletsController>(
builder: (context, provider, child) {
if (provider.isLoading) {
return const Center(child: CircularProgressIndicator());
}
if (provider.error != null) {
return Center(
child: Text(loc.notificationError(provider.error.toString())),
);
}
final wallet = provider.selectedWallet;
if (wallet == null) {
return Center(child: Text(loc.noWalletSelected));
}
return WalletTopUpContent(wallet: wallet, onBack: onBack);
},
),
PaymentSourceType.ledger => Consumer<LedgerAccountsProvider>(
builder: (context, provider, child) {
if (provider.isLoading) {
return const Center(child: CircularProgressIndicator());
}
if (provider.error != null) {
return Center(
child: Text(loc.notificationError(provider.error.toString())),
);
}
final account = provider.accounts.firstWhereOrNull(
(item) => item.ledgerAccountRef == source.id,
);
if (account == null) {
return Center(child: Text(loc.noWalletSelected));
}
return LedgerTopUpContent(account: account, onBack: onBack);
},
),
};
}
}