showReclaimDialog function

Future<void> showReclaimDialog(
  1. BuildContext context,
  2. NdkFlutter ndkFlutter,
  3. List<CashuWalletTransaction> reclaimable
)

Runs Cashu.retrieveFunds for each reclaimable funding transaction and shows live per-transaction status in a dialog.

Implementation

Future<void> showReclaimDialog(
  BuildContext context,
  NdkFlutter ndkFlutter,
  List<CashuWalletTransaction> reclaimable,
) async {
  final l10n = AppLocalizations.of(context)!;

  // Start the reclaim stream for each transaction exactly once so the
  // StreamBuilder tiles don't restart the process on every rebuild.
  final streams = <CashuWalletTransaction, Stream<CashuWalletTransaction>>{
    for (final tx in reclaimable)
      tx: ndkFlutter.ndk.cashu
          .retrieveFunds(draftTransaction: tx)
          .asBroadcastStream(),
  };

  await showDialog(
    context: context,
    builder: (dialogContext) {
      return AlertDialog(
        title: Text(l10n.reclaimPendingTitle),
        content: SizedBox(
          width: double.maxFinite,
          child: ListView(
            shrinkWrap: true,
            children: [
              for (final tx in reclaimable)
                ReclaimPendingTile(transaction: tx, stream: streams[tx]!),
            ],
          ),
        ),
        actions: [
          TextButton(
            onPressed: () => Navigator.of(dialogContext).pop(),
            child: Text(l10n.close),
          ),
        ],
      );
    },
  );
}