77 lines
2.3 KiB
Dart
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);
|
|
},
|
|
),
|
|
};
|
|
}
|
|
}
|