diff --git a/assets/.env b/assets/.env index 7edc98b..d82ce26 100644 --- a/assets/.env +++ b/assets/.env @@ -1,5 +1,5 @@ -BASE_URL=https://peakapi.qantra.co.zw/api -; BASE_URL=http://192.168.100.26:6950/api +; BASE_URL=https://peakapi.qantra.co.zw/api +BASE_URL=http://192.168.100.138:6950/api ; BASE_URL=http://173.212.247.232:6950/api ; BASE_URL=http://10.69.5.201:6950/api ; BASE_URL=http://192.168.120.160:6950/api @@ -7,5 +7,5 @@ BASE_URL=https://peakapi.qantra.co.zw/api ; BASE_URL=http://172.20.5.105:6950/api ; BASE_URL=http://10.10.3.92:6950/api CLIENTID=77433712483-ng7pntvcpf6tnjccriuqm8dbna8vvp3b.apps.googleusercontent.com -SIMULATE_PAYMENT_SUCCESS=false -; SIMULATE_PAYMENT_SUCCESS=true +; SIMULATE_PAYMENT_SUCCESS=false +SIMULATE_PAYMENT_SUCCESS=true diff --git a/lib/http/http.dart b/lib/http/http.dart index 8bcd3e5..fd0359c 100644 --- a/lib/http/http.dart +++ b/lib/http/http.dart @@ -11,9 +11,9 @@ class Http { Http() { dio.options.baseUrl = baseUrl; - dio.options.connectTimeout = const Duration(seconds: 120); - dio.options.receiveTimeout = const Duration(seconds: 120); - dio.options.sendTimeout = const Duration(seconds: 120); + // dio.options.connectTimeout = const Duration(seconds: 120); + // dio.options.receiveTimeout = const Duration(seconds: 120); + // dio.options.sendTimeout = const Duration(seconds: 120); dio.interceptors.add( LogInterceptor( request: true, diff --git a/lib/screens/confirm/confirm_controller.dart b/lib/screens/confirm/confirm_controller.dart index ea7a0c5..514289d 100644 --- a/lib/screens/confirm/confirm_controller.dart +++ b/lib/screens/confirm/confirm_controller.dart @@ -53,7 +53,7 @@ class ConfirmController extends ChangeNotifier { }); } - Future doTransaction() async { + Future?> doTransaction() async { try { model.isLoading = true; notifyListeners(); @@ -82,20 +82,9 @@ class ConfirmController extends ChangeNotifier { transactionController.updateReceiptData(response); - if (transactionController.model.selectedPaymentProcessor.authType == "WEB") { - if (context.mounted) { - if(kIsWeb){ - // the one we use here depends on when mpgs embedded bug will be fixed - context.push('/gateway-web'); - // context.push('/gateway-redirect'); - }else { - context.push('/gateway'); - } - } - } else { - await pollTransaction(transactionController.model.receiptData?['id']); - context.push('/poll'); - } + model.isLoading = false; + notifyListeners(); + return response; } else { model.status = response['status']; model.errorMessage = response['errorMessage']; @@ -111,6 +100,7 @@ class ConfirmController extends ChangeNotifier { model.isLoading = false; notifyListeners(); + return null; } Future pollTransaction(String uid) async { @@ -125,6 +115,7 @@ class ConfirmController extends ChangeNotifier { if (response['status'] == 'SUCCESS') { model.status = response['status']; transactionController.updateReceiptData(response); + model.isCancelled = true; notifyListeners(); break; } @@ -145,6 +136,5 @@ class ConfirmController extends ChangeNotifier { void dispose() { // TODO: implement dispose super.dispose(); - model.isCancelled = true; } } diff --git a/lib/screens/confirm/confirm_screen.dart b/lib/screens/confirm/confirm_screen.dart index 125bf5a..9081701 100644 --- a/lib/screens/confirm/confirm_screen.dart +++ b/lib/screens/confirm/confirm_screen.dart @@ -1,3 +1,4 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:qpay/models/responsive_policy.dart'; @@ -59,6 +60,36 @@ class _ConfirmScreenState extends State super.dispose(); } + void _handlePayment() async { + try { + if (controller.model.isLoading) return; + + final response = await controller.doTransaction(); + if (response!['status'] == 'FAILED') { + return; + } + + if (!mounted) return; + + if (controller.transactionController.model.selectedPaymentProcessor.authType == "WEB") { + if(kIsWeb){ + // the one we use here depends on when mpgs embedded bug will be fixed + context.push('/gateway-web'); + // context.push('/gateway-redirect'); + }else { + context.push('/gateway'); + } + } else { + if (!mounted) return; + context.push('/poll'); + } + }catch (e,s) { + print(e); + print(s); + } + } + + @override Widget build(BuildContext context) { return Scaffold( @@ -384,9 +415,7 @@ class _ConfirmScreenState extends State borderRadius: BorderRadius.circular(12), ), onTap: () async { - if (controller.model.isLoading) return; - - await controller.doTransaction(); + _handlePayment(); }, child: ListTile( leading: Container( diff --git a/lib/screens/gateway/gateway_controller.dart b/lib/screens/gateway/gateway_controller.dart index 0298a85..e7c51f7 100644 --- a/lib/screens/gateway/gateway_controller.dart +++ b/lib/screens/gateway/gateway_controller.dart @@ -62,17 +62,18 @@ class GatewayController extends ChangeNotifier { model.status = response['status']; transactionController.model.paymentStatus = response['paymentStatus']; + finishLoading(); if(model.status == 'SUCCESS') { transactionController.updateReceiptData(response); } notifyListeners(); } catch (e) { + finishLoading(); logger.e(e); _showErrorSnackBar( "Network error. Please try again or contact support", ); } - finishLoading(); } Future pollTransaction(String uid) async { diff --git a/lib/screens/poll/poll_screen.dart b/lib/screens/poll/poll_screen.dart index 9774aad..8f22f89 100644 --- a/lib/screens/poll/poll_screen.dart +++ b/lib/screens/poll/poll_screen.dart @@ -104,6 +104,7 @@ class _PollScreenState extends State { child: OutlinedButton( child: Text('Retry'), onPressed: () { + controller.model.isCancelled = false; controller.pollTransaction(transactionController.model.confirmationData['id']); }, ), diff --git a/web/index.html b/web/index.html index db4a7d5..a9f9c7e 100644 --- a/web/index.html +++ b/web/index.html @@ -33,10 +33,10 @@ Velocity - - + +