From 664cefcecd87232b1c56305dbab1180c480b869d Mon Sep 17 00:00:00 2001 From: Vusa Date: Thu, 25 Jun 2026 00:28:45 +0200 Subject: [PATCH] improving error handling --- lib/main.dart | 1 - lib/navbar.dart | 9 +++++---- lib/screens/contact/contact_screen.dart | 13 +++++++++--- lib/screens/pay/pay_screen.dart | 27 +++++++++++++++++++------ 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 23afa56..831448a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -13,7 +13,6 @@ import 'package:qpay/screens/accounts/account_provider.dart'; import 'package:qpay/theme/app_theme.dart'; import 'package:firebase_core/firebase_core.dart'; import 'firebase_options.dart'; -import 'config/app_config.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); diff --git a/lib/navbar.dart b/lib/navbar.dart index 8a7a263..fe7610f 100644 --- a/lib/navbar.dart +++ b/lib/navbar.dart @@ -15,7 +15,6 @@ class ScaffoldWithNavBar extends StatefulWidget { } class _ScaffoldWithNavBarState extends State { - bool _isLoggedIn = false; late String initials; @override @@ -29,7 +28,6 @@ class _ScaffoldWithNavBarState extends State { if (prefs.getString("token") != null) { setState(() { - _isLoggedIn = true; initials = prefs.getString("initials")!; }); } @@ -56,7 +54,7 @@ class _ScaffoldWithNavBarState extends State { child: Padding( padding: const EdgeInsets.symmetric( vertical: 12.0, - horizontal: 8 + horizontal: 8, ), child: Image( image: AssetImage('assets/velocity.png'), @@ -186,7 +184,10 @@ class _ScaffoldWithNavBarState extends State { final String location = GoRouterState.of(context).uri.path; if (location.startsWith('/groups')) return 1; if (location.startsWith('/history')) return 2; - if (location.startsWith('/more') || location.startsWith('/users') || location.startsWith('/uptime')) return 3; + if (location.startsWith('/more') || + location.startsWith('/users') || + location.startsWith('/uptime')) + return 3; return 0; } diff --git a/lib/screens/contact/contact_screen.dart b/lib/screens/contact/contact_screen.dart index b537890..4030906 100644 --- a/lib/screens/contact/contact_screen.dart +++ b/lib/screens/contact/contact_screen.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:qpay/models/responsive_policy.dart'; +import 'package:url_launcher/url_launcher.dart'; class ContactScreen extends StatelessWidget { const ContactScreen({super.key}); @@ -186,7 +187,10 @@ class ContactScreen extends StatelessWidget { title: 'Instagram', subtitle: 'Follow us for updates', onTap: () { - // Instagram link will be added later + launchUrl( + Uri.parse('https://www.instagram.com/velocityafrica/'), + mode: LaunchMode.externalApplication, + ); }, ), const SizedBox(height: 8), @@ -200,7 +204,10 @@ class ContactScreen extends StatelessWidget { title: 'WhatsApp', subtitle: 'Chat with us directly', onTap: () { - // WhatsApp link will be added later + launchUrl( + Uri.parse('https://wa.me/263787770295'), + mode: LaunchMode.externalApplication, + ); }, ), ], @@ -293,4 +300,4 @@ class ContactScreen extends StatelessWidget { ), ); } -} \ No newline at end of file +} diff --git a/lib/screens/pay/pay_screen.dart b/lib/screens/pay/pay_screen.dart index d1d2604..fc849b1 100644 --- a/lib/screens/pay/pay_screen.dart +++ b/lib/screens/pay/pay_screen.dart @@ -170,13 +170,28 @@ class _PayScreenState extends State with TickerProviderStateMixin { final apiResponse = await controller.doTransaction(); if (!apiResponse.isSuccess) { - if (context.mounted) { - AppSnackBar.showError( - context, + String errorMessage = controller.model.errorMessage ?? - apiResponse.error ?? - "Transaction failed", - ); + apiResponse.error ?? + "Transaction failed"; + if (context.mounted) { + if (errorMessage.contains( + "We can't process that transaction right now", + )) { + AppSnackBar.show( + context, + errorMessage, + action: SnackBarAction( + label: 'Check uptime', + textColor: Colors.yellow, // Optional custom styling + onPressed: () { + context.push('/uptime'); + }, + ), + ); + } else { + AppSnackBar.showError(context, errorMessage); + } } } else if (controller.model.status == "SUCCESS" && context.mounted) { context.push('/confirm');