WIP: integration with ledger

This commit is contained in:
Arseni
2026-02-04 02:01:22 +03:00
parent f1f16a30e6
commit f44ef56ff3
32 changed files with 1226 additions and 405 deletions

View File

@@ -1,10 +1,15 @@
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';
@@ -17,27 +22,55 @@ class WalletTopUpPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final loc = AppLocalizations.of(context)!;
final source = context.watch<PaymentSourceController>().selectedSource;
return Consumer<WalletsController>(builder: (context, provider, child) {
if (provider.isLoading) {
return const Center(child: CircularProgressIndicator());
}
if (source == null) {
return Center(child: Text(loc.noWalletSelected));
}
if (provider.error != null) {
return Center(
child: Text(loc.notificationError(provider.error.toString())),
);
}
return switch (source.type) {
PaymentSourceType.wallet => Consumer<WalletsController>(
builder: (context, provider, child) {
if (provider.isLoading) {
return const Center(child: CircularProgressIndicator());
}
final wallet = provider.selectedWallet;
if (wallet == null) {
return Center(child: Text(loc.noWalletSelected));
}
if (provider.error != null) {
return Center(
child: Text(loc.notificationError(provider.error.toString())),
);
}
return WalletTopUpContent(
wallet: wallet,
onBack: onBack,
);
});
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);
},
),
};
}
}