From 3fc07b1a06c37cb41f796b73a05f908f1aed0030 Mon Sep 17 00:00:00 2001 From: yaso Date: Tue, 14 Jan 2025 10:34:55 +0200 Subject: [PATCH 1/9] increase time access is valid for --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 84c3ab07..4becb763 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -45,8 +45,8 @@ services: ports: - 3567:3567 environment: - REFRESH_TOKEN_VALIDITY: '1440' - ACCESS_TOKEN_VALIDITY: '3600' + REFRESH_TOKEN_VALIDITY: '43200' + ACCESS_TOKEN_VALIDITY: '43200' PASSWORD_RESET_TOKEN_LIFETIME: '7200000' MYSQL_USER: ${SQL_USER} MYSQL_PASSWORD: ${SQL_USER_PW} From 8437b87a9ef20d9ef3f63808ee5c489239d904f3 Mon Sep 17 00:00:00 2001 From: yaso Date: Tue, 14 Jan 2025 10:52:55 +0200 Subject: [PATCH 2/9] add local_auth package --- Frontend/pubspec.lock | 40 ++++++++++++++++++++++++++++++++++++++++ Frontend/pubspec.yaml | 1 + 2 files changed, 41 insertions(+) diff --git a/Frontend/pubspec.lock b/Frontend/pubspec.lock index bfb79a6a..d6983355 100644 --- a/Frontend/pubspec.lock +++ b/Frontend/pubspec.lock @@ -645,6 +645,46 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + local_auth: + dependency: "direct main" + description: + name: local_auth + sha256: "434d854cf478f17f12ab29a76a02b3067f86a63a6d6c4eb8fbfdcfe4879c1b7b" + url: "https://pub.dev" + source: hosted + version: "2.3.0" + local_auth_android: + dependency: transitive + description: + name: local_auth_android + sha256: "6763aaf8965f21822624cb2fd3c03d2a8b3791037b5efb0fe4b13e110f5afc92" + url: "https://pub.dev" + source: hosted + version: "1.0.46" + local_auth_darwin: + dependency: transitive + description: + name: local_auth_darwin + sha256: "5c5127061107278ab4cafa1ac51b3b6760282bf1a2abf011270908a429d1634b" + url: "https://pub.dev" + source: hosted + version: "1.4.2" + local_auth_platform_interface: + dependency: transitive + description: + name: local_auth_platform_interface + sha256: "1b842ff177a7068442eae093b64abe3592f816afd2a533c0ebcdbe40f9d2075a" + url: "https://pub.dev" + source: hosted + version: "1.0.10" + local_auth_windows: + dependency: transitive + description: + name: local_auth_windows + sha256: bc4e66a29b0fdf751aafbec923b5bed7ad6ed3614875d8151afe2578520b2ab5 + url: "https://pub.dev" + source: hosted + version: "1.0.11" logging: dependency: transitive description: diff --git a/Frontend/pubspec.yaml b/Frontend/pubspec.yaml index cdf8ea90..e0e03ba9 100644 --- a/Frontend/pubspec.yaml +++ b/Frontend/pubspec.yaml @@ -67,6 +67,7 @@ dependencies: barcode_widget: ^2.0.4 url_launcher: ^6.3.1 fl_downloader: ^2.0.2 + local_auth: ^2.3.0 dev_dependencies: flutter_test: From 3cb1b7eb8f12710e876be6f8385e1dfebdd797a3 Mon Sep 17 00:00:00 2001 From: yaso Date: Tue, 14 Jan 2025 10:53:25 +0200 Subject: [PATCH 3/9] add IOS & Android permissions --- Frontend/android/app/src/main/AndroidManifest.xml | 1 + .../main/kotlin/com/example/patient_manager/MainActivity.kt | 4 ++-- Frontend/ios/Runner/Info.plist | 2 ++ Frontend/macos/Flutter/GeneratedPluginRegistrant.swift | 2 ++ Frontend/windows/flutter/generated_plugin_registrant.cc | 3 +++ Frontend/windows/flutter/generated_plugins.cmake | 1 + 6 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Frontend/android/app/src/main/AndroidManifest.xml b/Frontend/android/app/src/main/AndroidManifest.xml index d3c0f4c8..8470431f 100644 --- a/Frontend/android/app/src/main/AndroidManifest.xml +++ b/Frontend/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ + diff --git a/Frontend/android/app/src/main/kotlin/com/example/patient_manager/MainActivity.kt b/Frontend/android/app/src/main/kotlin/com/example/patient_manager/MainActivity.kt index 92177449..57ffce9d 100644 --- a/Frontend/android/app/src/main/kotlin/com/example/patient_manager/MainActivity.kt +++ b/Frontend/android/app/src/main/kotlin/com/example/patient_manager/MainActivity.kt @@ -1,6 +1,6 @@ package za.co.mzansiinnovationhub.mih -import io.flutter.embedding.android.FlutterActivity +import io.flutter.embedding.android.FlutterFragmentActivity -class MainActivity: FlutterActivity() { +class MainActivity: FlutterFragmentActivity() { } diff --git a/Frontend/ios/Runner/Info.plist b/Frontend/ios/Runner/Info.plist index beac0123..9b8ee3e4 100644 --- a/Frontend/ios/Runner/Info.plist +++ b/Frontend/ios/Runner/Info.plist @@ -2,6 +2,8 @@ + NSFaceIDUsageDescription + Why is my app authenticating using face id? LSSupportsOpeningDocumentsInPlace UIFileSharingEnabled diff --git a/Frontend/macos/Flutter/GeneratedPluginRegistrant.swift b/Frontend/macos/Flutter/GeneratedPluginRegistrant.swift index d1416358..ae2d0f30 100644 --- a/Frontend/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/Frontend/macos/Flutter/GeneratedPluginRegistrant.swift @@ -8,6 +8,7 @@ import Foundation import device_info_plus import firebase_core import geolocator_apple +import local_auth_darwin import mobile_scanner import no_screenshot import printing @@ -20,6 +21,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) + FLALocalAuthPlugin.register(with: registry.registrar(forPlugin: "FLALocalAuthPlugin")) MobileScannerPlugin.register(with: registry.registrar(forPlugin: "MobileScannerPlugin")) NoScreenshotPlugin.register(with: registry.registrar(forPlugin: "NoScreenshotPlugin")) PrintingPlugin.register(with: registry.registrar(forPlugin: "PrintingPlugin")) diff --git a/Frontend/windows/flutter/generated_plugin_registrant.cc b/Frontend/windows/flutter/generated_plugin_registrant.cc index ef659127..4d868f3a 100644 --- a/Frontend/windows/flutter/generated_plugin_registrant.cc +++ b/Frontend/windows/flutter/generated_plugin_registrant.cc @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -22,6 +23,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("FlDownloaderPluginCApi")); GeolocatorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("GeolocatorWindows")); + LocalAuthPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("LocalAuthPlugin")); PermissionHandlerWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); PrintingPluginRegisterWithRegistrar( diff --git a/Frontend/windows/flutter/generated_plugins.cmake b/Frontend/windows/flutter/generated_plugins.cmake index 0335c59d..7aeca6fd 100644 --- a/Frontend/windows/flutter/generated_plugins.cmake +++ b/Frontend/windows/flutter/generated_plugins.cmake @@ -6,6 +6,7 @@ list(APPEND FLUTTER_PLUGIN_LIST firebase_core fl_downloader geolocator_windows + local_auth_windows permission_handler_windows printing syncfusion_pdfviewer_windows From 7a8f18f2194c7763b0a5fe3efca0b0ca2f16300e Mon Sep 17 00:00:00 2001 From: yaso Date: Tue, 14 Jan 2025 12:55:49 +0200 Subject: [PATCH 4/9] After email password auth add new logic for biometric auth --- Frontend/lib/mih_packages/authentication/auth_check.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Frontend/lib/mih_packages/authentication/auth_check.dart b/Frontend/lib/mih_packages/authentication/auth_check.dart index ad50f62d..9bc72592 100644 --- a/Frontend/lib/mih_packages/authentication/auth_check.dart +++ b/Frontend/lib/mih_packages/authentication/auth_check.dart @@ -1,15 +1,17 @@ +import 'package:Mzansi_Innovation_Hub/mih_packages/authentication/biometric_check.dart'; import 'package:flutter/material.dart'; import 'package:supertokens_flutter/supertokens.dart'; import 'package:no_screenshot/no_screenshot.dart'; -import '../mih_home/mih_profile_getter.dart'; import 'signin_or_register.dart'; class AuthCheck extends StatefulWidget { final bool personalSelected; + final bool firstBoot; const AuthCheck({ super.key, required this.personalSelected, + required this.firstBoot, }); @override @@ -53,8 +55,9 @@ class _AuthCheckState extends State { builder: (context, snapshot) { //print(snapshot.data); if (snapshot.data == true) { - return MIHProfileGetter( + return BiometricCheck( personalSelected: widget.personalSelected, + firstBoot: widget.firstBoot, ); } else if (snapshot.data == false) { return const SignInOrRegister(); From 0b663ef4cc3c9af6f818c7e26c27164aff7f9382 Mon Sep 17 00:00:00 2001 From: yaso Date: Tue, 14 Jan 2025 12:56:08 +0200 Subject: [PATCH 5/9] add safearea when pull down is enabled --- .../mih_layout/mih_layout_builder.dart | 80 ++++++++++--------- 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/Frontend/lib/mih_components/mih_layout/mih_layout_builder.dart b/Frontend/lib/mih_components/mih_layout/mih_layout_builder.dart index 9030a7c6..8be3adbd 100644 --- a/Frontend/lib/mih_components/mih_layout/mih_layout_builder.dart +++ b/Frontend/lib/mih_components/mih_layout/mih_layout_builder.dart @@ -67,46 +67,48 @@ class _MIHLayoutBuilderState extends State { Widget getBody(double width, double height) { if (widget.pullDownToRefresh == true) { - return LayoutBuilder(builder: (context, BoxConstraints constraints) { - double newheight = constraints.maxHeight; - //print(newheight); - return RefreshIndicator( - onRefresh: widget.onPullDown, - child: ListView.builder( - itemCount: 1, - itemBuilder: (BuildContext context, int index) { - return SafeArea( - child: SizedBox( - width: width, - height: newheight, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - const SizedBox(height: 5), - getLayoutHeader(), - const SizedBox(height: 5), - Expanded(child: widget.body), - ], + return SafeArea( + child: LayoutBuilder(builder: (context, BoxConstraints constraints) { + double newheight = constraints.maxHeight; + //print(newheight); + return RefreshIndicator( + onRefresh: widget.onPullDown, + child: ListView.builder( + itemCount: 1, + itemBuilder: (BuildContext context, int index) { + return SafeArea( + child: SizedBox( + width: width, + height: newheight, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + const SizedBox(height: 5), + getLayoutHeader(), + const SizedBox(height: 5), + Expanded(child: widget.body), + ], + ), ), - ), - ); - }, - // child: SafeArea( - // child: SizedBox( - // width: width, - // height: height, - // child: Column( - // mainAxisAlignment: MainAxisAlignment.start, - // children: [ - // getLayoutHeader(), - // Expanded(child: widget.body), - // ], - // ), - // ), - // ), - ), - ); - }); + ); + }, + // child: SafeArea( + // child: SizedBox( + // width: width, + // height: height, + // child: Column( + // mainAxisAlignment: MainAxisAlignment.start, + // children: [ + // getLayoutHeader(), + // Expanded(child: widget.body), + // ], + // ), + // ), + // ), + ), + ); + }), + ); } else { return SafeArea( child: SizedBox( From 1fb3fcb1e65444f3293e236c86ba6e34d4e1ce87 Mon Sep 17 00:00:00 2001 From: yaso Date: Tue, 14 Jan 2025 12:56:38 +0200 Subject: [PATCH 6/9] add Biometric screen --- .../authentication/biometric_check.dart | 205 ++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 Frontend/lib/mih_packages/authentication/biometric_check.dart diff --git a/Frontend/lib/mih_packages/authentication/biometric_check.dart b/Frontend/lib/mih_packages/authentication/biometric_check.dart new file mode 100644 index 00000000..c49a5bef --- /dev/null +++ b/Frontend/lib/mih_packages/authentication/biometric_check.dart @@ -0,0 +1,205 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_inputs_and_buttons/mih_button.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_action.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_body.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_header.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_layout_builder.dart'; +import 'package:Mzansi_Innovation_Hub/mih_packages/mih_home/mih_profile_getter.dart'; +import 'package:flutter/material.dart'; +import 'package:local_auth/local_auth.dart'; +import 'package:supertokens_flutter/supertokens.dart'; + +class BiometricCheck extends StatefulWidget { + final bool personalSelected; + final bool firstBoot; + const BiometricCheck({ + super.key, + required this.personalSelected, + required this.firstBoot, + }); + + @override + State createState() => _BiometricCheckState(); +} + +class _BiometricCheckState extends State { + bool _isBioAuthenticated = false; + final LocalAuthentication _auth = LocalAuthentication(); + + MIHAction getActionButton() { + return MIHAction( + icon: Padding( + padding: const EdgeInsets.all(10.0), + child: SizedBox( + height: 50, + child: Image.asset('images/logo_light.png'), + ), + ), + iconSize: 35, + onTap: () async { + await SuperTokens.signOut(completionHandler: (error) { + print(error); + }); + if (await SuperTokens.doesSessionExist() == false) { + Navigator.of(context).popAndPushNamed('/'); + } + // Navigator.of(context).pushNamed( + // '/about', + // //arguments: widget.signedInUser, + // ); + }, + ); + } + + MIHHeader getHeader() { + return const MIHHeader( + headerAlignment: MainAxisAlignment.center, + headerItems: [ + Text( + "", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 25, + ), + ), + ], + ); + } + + void authenticateUser() async { + final bool canAuthWithBio = await _auth.canCheckBiometrics; + print("Biomentric Available: $canAuthWithBio"); + if (canAuthWithBio) { + try { + final bool didBioAuth = await _auth.authenticate( + localizedReason: "Authenticate to access MIH", + options: const AuthenticationOptions( + biometricOnly: false, + ), + ); + if (didBioAuth) { + setState(() { + _isBioAuthenticated = true; + }); + } + print("Authenticated: $didBioAuth"); + } catch (error) { + print(error); + } + } + } + + MIHBody getBody() { + return MIHBody( + borderOn: false, + bodyItems: [ + SafeArea( + child: Center( + child: Padding( + padding: const EdgeInsets.all(25.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + //logo + Icon( + Icons.fingerprint, + size: 100, + color: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + ), + //spacer + const SizedBox(height: 10), + //Heading + Text( + 'Biomentric Authentication', + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzanziInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + ), + //spacer + const SizedBox(height: 25), + if (!_isBioAuthenticated) + Icon( + Icons.lock, + size: 200, + color: MzanziInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + if (_isBioAuthenticated) + Icon( + Icons.lock_open, + size: 200, + color: MzanziInnovationHub.of(context)! + .theme + .secondaryColor(), + ), + const SizedBox(height: 30), + Container( + alignment: Alignment.bottomCenter, + child: SizedBox( + width: 500.0, + height: 50.0, + child: MIHButton( + buttonText: "Unlock", + buttonColor: MzanziInnovationHub.of(context)! + .theme + .secondaryColor(), + textColor: MzanziInnovationHub.of(context)! + .theme + .primaryColor(), + onTap: () async { + //Check Biometrics + authenticateUser(); + }, + ), + ), + ), + ], + ), + ), + ), + ), + ], + ); + } + + Widget getBiomentricAuthScreen() { + return MIHLayoutBuilder( + actionButton: getActionButton(), + header: getHeader(), + secondaryActionButton: null, + body: getBody(), + actionDrawer: null, + secondaryActionDrawer: null, + bottomNavBar: null, + pullDownToRefresh: false, + onPullDown: () async {}, + ); + } + + @override + Widget build(BuildContext context) { + if (MzanziInnovationHub.of(context)!.theme.getPlatform() == "Web") { + return MIHProfileGetter( + personalSelected: widget.personalSelected, + ); + } else if (!widget.firstBoot) { + return MIHProfileGetter( + personalSelected: widget.personalSelected, + ); + } else { + if (_isBioAuthenticated) { + return MIHProfileGetter( + personalSelected: widget.personalSelected, + ); + } else { + return getBiomentricAuthScreen(); + } + } + } +} From 02e894d00b7f503751c0d9b697517ba909a48a6f Mon Sep 17 00:00:00 2001 From: yaso Date: Tue, 14 Jan 2025 12:57:11 +0200 Subject: [PATCH 7/9] Create AuthCheckArguments andf add it to / route --- Frontend/lib/mih_objects/arguments.dart | 10 ++++++++++ Frontend/lib/mih_router/routeGenerator.dart | 14 +++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Frontend/lib/mih_objects/arguments.dart b/Frontend/lib/mih_objects/arguments.dart index 8ed94de4..5256ca96 100644 --- a/Frontend/lib/mih_objects/arguments.dart +++ b/Frontend/lib/mih_objects/arguments.dart @@ -159,3 +159,13 @@ class ClaimStatementGenerationArguments { this.sig_path, ); } + +class AuthArguments { + final bool personalSelected; + final bool firstBoot; + + AuthArguments( + this.personalSelected, + this.firstBoot, + ); +} diff --git a/Frontend/lib/mih_router/routeGenerator.dart b/Frontend/lib/mih_router/routeGenerator.dart index 7257b086..39128829 100644 --- a/Frontend/lib/mih_router/routeGenerator.dart +++ b/Frontend/lib/mih_router/routeGenerator.dart @@ -54,21 +54,16 @@ class RouteGenerator { switch (settings.name) { // Authgentication case '/': - if (args is bool) { + if (args is AuthArguments) { return MaterialPageRoute( settings: settings, builder: (_) => AuthCheck( - personalSelected: args, - ), - ); - } else { - return MaterialPageRoute( - settings: settings, - builder: (_) => const AuthCheck( - personalSelected: true, + personalSelected: args.personalSelected, + firstBoot: args.firstBoot, ), ); } + return _errorRoute(); case '/notifications': if (args is NotificationArguments) { return MaterialPageRoute( @@ -284,6 +279,7 @@ Route _errorRoute() { settings: const RouteSettings(name: '/'), builder: (_) => const AuthCheck( personalSelected: true, + firstBoot: true, )); // return MaterialPageRoute(builder: (_) { // return const Scaffold( From 1c6f00b5b89b8381bd9dee1d5a5dfda7e33c6b16 Mon Sep 17 00:00:00 2001 From: yaso Date: Tue, 14 Jan 2025 12:57:29 +0200 Subject: [PATCH 8/9] add new authcheck args to action buttons --- Frontend/lib/mih_packages/about_mih/mih_about.dart | 3 ++- .../mih_packages/access_review/patient_access_review.dart | 3 ++- Frontend/lib/mih_packages/appointment/appointments.dart | 3 ++- .../manage_business/manage_business_profile.dart | 2 +- .../lib/mih_packages/mih_policy_tos/mih_privacy_polocy.dart | 3 ++- .../mih_packages/mih_policy_tos/mih_terms_of_service.dart | 6 ++++-- .../mih_packages/mzansi_profile/profile_user_update.dart | 2 +- Frontend/lib/mih_packages/mzansi_wallet/mzansi_wallet.dart | 3 ++- .../lib/mih_packages/patient_profile/patient_manager.dart | 2 +- Frontend/lib/mih_packages/patient_profile/patient_view.dart | 2 +- 10 files changed, 18 insertions(+), 11 deletions(-) diff --git a/Frontend/lib/mih_packages/about_mih/mih_about.dart b/Frontend/lib/mih_packages/about_mih/mih_about.dart index 75d83674..93e4063c 100644 --- a/Frontend/lib/mih_packages/about_mih/mih_about.dart +++ b/Frontend/lib/mih_packages/about_mih/mih_about.dart @@ -1,3 +1,4 @@ +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; import 'package:flutter/material.dart'; import '../../mih_components/mih_inputs_and_buttons/mih_button.dart'; import '../../mih_components/mih_layout/mih_action.dart'; @@ -42,7 +43,7 @@ class _MIHAboutState extends State { onTap: () { Navigator.of(context).pushNamedAndRemoveUntil( '/', - arguments: true, + arguments: AuthArguments(true, false), (route) => false, ); }, diff --git a/Frontend/lib/mih_packages/access_review/patient_access_review.dart b/Frontend/lib/mih_packages/access_review/patient_access_review.dart index 073f3bb3..ec024b93 100644 --- a/Frontend/lib/mih_packages/access_review/patient_access_review.dart +++ b/Frontend/lib/mih_packages/access_review/patient_access_review.dart @@ -1,3 +1,4 @@ +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; import 'package:flutter/material.dart'; import '../../main.dart'; import '../../mih_apis/mih_api_calls.dart'; @@ -105,7 +106,7 @@ class _PatientAccessRequestState extends State { Navigator.of(context).popAndPushNamed( '/', - arguments: true, + arguments: AuthArguments(true, false), ); }, ); diff --git a/Frontend/lib/mih_packages/appointment/appointments.dart b/Frontend/lib/mih_packages/appointment/appointments.dart index c41026a2..3509ca31 100644 --- a/Frontend/lib/mih_packages/appointment/appointments.dart +++ b/Frontend/lib/mih_packages/appointment/appointments.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; import 'package:flutter/material.dart'; import '../../main.dart'; import 'package:supertokens_flutter/http.dart' as http; @@ -268,7 +269,7 @@ class _PatientAccessRequestState extends State { Navigator.of(context).popAndPushNamed( '/', - arguments: true, + arguments: AuthArguments(true, false), ); }, ); diff --git a/Frontend/lib/mih_packages/manage_business/manage_business_profile.dart b/Frontend/lib/mih_packages/manage_business/manage_business_profile.dart index 92360a42..d7464c32 100644 --- a/Frontend/lib/mih_packages/manage_business/manage_business_profile.dart +++ b/Frontend/lib/mih_packages/manage_business/manage_business_profile.dart @@ -296,7 +296,7 @@ class _ManageBusinessProfileState extends State { Navigator.of(context).popAndPushNamed( '/', - arguments: false, + arguments: AuthArguments(false, false), ); }, ); diff --git a/Frontend/lib/mih_packages/mih_policy_tos/mih_privacy_polocy.dart b/Frontend/lib/mih_packages/mih_policy_tos/mih_privacy_polocy.dart index 93cd8adb..54996152 100644 --- a/Frontend/lib/mih_packages/mih_policy_tos/mih_privacy_polocy.dart +++ b/Frontend/lib/mih_packages/mih_policy_tos/mih_privacy_polocy.dart @@ -2,6 +2,7 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_action.dart' import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_body.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_header.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_layout_builder.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; import 'package:Mzansi_Innovation_Hub/mih_packages/mih_policy_tos/policy_and_terms_text.dart'; import 'package:flutter/material.dart'; @@ -20,7 +21,7 @@ class _MIHPrivacyPolocyState extends State { onTap: () { Navigator.of(context).pushNamedAndRemoveUntil( '/', - arguments: true, + arguments: AuthArguments(true, false), (route) => false, ); }, diff --git a/Frontend/lib/mih_packages/mih_policy_tos/mih_terms_of_service.dart b/Frontend/lib/mih_packages/mih_policy_tos/mih_terms_of_service.dart index ddab9968..3c914ad5 100644 --- a/Frontend/lib/mih_packages/mih_policy_tos/mih_terms_of_service.dart +++ b/Frontend/lib/mih_packages/mih_policy_tos/mih_terms_of_service.dart @@ -2,6 +2,7 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_action.dart' import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_body.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_header.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_layout_builder.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; import 'package:Mzansi_Innovation_Hub/mih_packages/mih_policy_tos/policy_and_terms_text.dart'; import 'package:flutter/material.dart'; @@ -18,9 +19,10 @@ class _MIHTermsOfServiceState extends State { icon: const Icon(Icons.arrow_back), iconSize: 35, onTap: () { - Navigator.of(context).pushNamed( + Navigator.of(context).pushNamedAndRemoveUntil( '/', - arguments: true, + arguments: AuthArguments(true, false), + (route) => false, ); }, ); diff --git a/Frontend/lib/mih_packages/mzansi_profile/profile_user_update.dart b/Frontend/lib/mih_packages/mzansi_profile/profile_user_update.dart index c2935cba..d62a1e3d 100644 --- a/Frontend/lib/mih_packages/mzansi_profile/profile_user_update.dart +++ b/Frontend/lib/mih_packages/mzansi_profile/profile_user_update.dart @@ -247,7 +247,7 @@ class _ProfileUserUpdateState extends State { Navigator.of(context).popAndPushNamed( '/', - arguments: true, + arguments: AuthArguments(true, false), ); }, ); diff --git a/Frontend/lib/mih_packages/mzansi_wallet/mzansi_wallet.dart b/Frontend/lib/mih_packages/mzansi_wallet/mzansi_wallet.dart index 02089d2e..f8cc7dc1 100644 --- a/Frontend/lib/mih_packages/mzansi_wallet/mzansi_wallet.dart +++ b/Frontend/lib/mih_packages/mzansi_wallet/mzansi_wallet.dart @@ -3,6 +3,7 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_body.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_header.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_layout_builder.dart'; import 'package:Mzansi_Innovation_Hub/mih_objects/app_user.dart'; +import 'package:Mzansi_Innovation_Hub/mih_objects/arguments.dart'; import 'package:Mzansi_Innovation_Hub/mih_packages/mzansi_wallet/loyalty_cards.dart'; import 'package:flutter/material.dart'; @@ -28,7 +29,7 @@ class _MzansiWalletState extends State { Navigator.of(context).pop(); Navigator.of(context).popAndPushNamed( '/', - arguments: true, + arguments: AuthArguments(true, false), ); }, ); diff --git a/Frontend/lib/mih_packages/patient_profile/patient_manager.dart b/Frontend/lib/mih_packages/patient_profile/patient_manager.dart index 71f3c573..795add30 100644 --- a/Frontend/lib/mih_packages/patient_profile/patient_manager.dart +++ b/Frontend/lib/mih_packages/patient_profile/patient_manager.dart @@ -532,7 +532,7 @@ class _PatientManagerState extends State { Navigator.of(context).popAndPushNamed( '/', - arguments: false, + arguments: AuthArguments(false, false), ); }, ); diff --git a/Frontend/lib/mih_packages/patient_profile/patient_view.dart b/Frontend/lib/mih_packages/patient_profile/patient_view.dart index 4144506f..0fbc9277 100644 --- a/Frontend/lib/mih_packages/patient_profile/patient_view.dart +++ b/Frontend/lib/mih_packages/patient_profile/patient_view.dart @@ -125,7 +125,7 @@ class _PatientViewState extends State { Navigator.of(context).pop(); Navigator.of(context).popAndPushNamed( '/', - arguments: true, + arguments: AuthArguments(true, false), ); }, ); From 4d29f3f5b4ef8c2dd1f527b5ab43f9c9296cf0cd Mon Sep 17 00:00:00 2001 From: yaso Date: Tue, 14 Jan 2025 13:02:09 +0200 Subject: [PATCH 9/9] remove loading if user alreadfy exists --- Frontend/lib/mih_packages/authentication/register.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/Frontend/lib/mih_packages/authentication/register.dart b/Frontend/lib/mih_packages/authentication/register.dart index 1c9746b2..22f5fdcc 100644 --- a/Frontend/lib/mih_packages/authentication/register.dart +++ b/Frontend/lib/mih_packages/authentication/register.dart @@ -89,6 +89,7 @@ class _RegisterState extends State { if (response.statusCode == 200) { var userExists = jsonDecode(response.body); if (userExists["exists"]) { + Navigator.of(context).pop(); signUpError(); } else { var response2 = await http.post(