From abb428e891560d7511f49fad666b7ee7884305cb Mon Sep 17 00:00:00 2001 From: Arseni Date: Wed, 14 Jan 2026 18:51:40 +0300 Subject: [PATCH] Added dialog window to confirm or reject processed payment --- .../pweb/lib/pages/payment_methods/page.dart | 13 +++---- .../dialogs/payment_status_dialog.dart | 34 +++++++++++++++++++ 2 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 frontend/pweb/lib/widgets/dialogs/payment_status_dialog.dart diff --git a/frontend/pweb/lib/pages/payment_methods/page.dart b/frontend/pweb/lib/pages/payment_methods/page.dart index 5598647..a1d4ced 100644 --- a/frontend/pweb/lib/pages/payment_methods/page.dart +++ b/frontend/pweb/lib/pages/payment_methods/page.dart @@ -13,6 +13,7 @@ import 'package:pshared/provider/payment/wallets.dart'; import 'package:pweb/pages/payment_methods/payment_page/body.dart'; import 'package:pweb/widgets/sidebar/destinations.dart'; import 'package:pweb/services/posthog.dart'; +import 'package:pweb/widgets/dialogs/payment_status_dialog.dart'; class PaymentPage extends StatefulWidget { @@ -83,13 +84,13 @@ class _PaymentPageState extends State { final paymentProvider = context.read(); if (paymentProvider.isLoading) return; - paymentProvider.pay().then((_) { - PosthogService.paymentInitiated(method: flowProvider.selectedType); - }).catchError((error) { + paymentProvider.pay().then((payment) { if (!mounted) return; - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(error.toString())), - ); + final isSuccess = payment != null && paymentProvider.error == null; + showPaymentStatusDialog(context, isSuccess: isSuccess); + if (isSuccess) { + PosthogService.paymentInitiated(method: flowProvider.selectedType); + } }); } diff --git a/frontend/pweb/lib/widgets/dialogs/payment_status_dialog.dart b/frontend/pweb/lib/widgets/dialogs/payment_status_dialog.dart new file mode 100644 index 0000000..3230976 --- /dev/null +++ b/frontend/pweb/lib/widgets/dialogs/payment_status_dialog.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; + +import 'package:pweb/generated/i18n/app_localizations.dart'; + + +Future showPaymentStatusDialog(BuildContext context, {required bool isSuccess}) { + return showDialog( + context: context, + builder: (dialogContext) { + final l10n = AppLocalizations.of(dialogContext)!; + return AlertDialog( + icon: isSuccess + ? const Icon(Icons.check_circle, color: Colors.green, size: 48) + : const Icon(Icons.error, color: Colors.red, size: 48), + title: Text( + isSuccess + ? l10n.paymentStatusSuccessTitle + : l10n.paymentStatusFailureTitle, + ), + content: Text( + isSuccess + ? l10n.paymentStatusSuccessMessage + : l10n.paymentStatusFailureMessage, + ), + actions: [ + TextButton( + onPressed: () => Navigator.of(dialogContext).pop(), + child: Text(l10n.ok), + ), + ], + ); + }, + ); +}