From 86e6aa005a386a5ec3b759bbae55ecb3c54165b2 Mon Sep 17 00:00:00 2001 From: yaso-meth Date: Tue, 27 Aug 2024 14:55:35 +0200 Subject: [PATCH] have path route show up in url bar & change routes to make logical sense --- .../lib/components/homeTileGrid.dart | 15 +- .../lib/components/mihAppDrawer.dart | 6 +- .../lib/components/patientDetails.dart | 9 +- Frontend/patient_manager/lib/main_dev.dart | 3 + .../lib/objects/arguments.dart | 10 + .../lib/pages/patientEdit.dart | 18 +- .../lib/pages/patientView.dart | 1 + .../lib/pages/profileBusinessAdd.dart | 3 +- .../lib/pages/profileBusinessUpdate.dart | 2 +- .../lib/router/routeGenerator.dart | 187 +++++++++--------- Frontend/patient_manager/pubspec.lock | 8 + Frontend/patient_manager/pubspec.yaml | 2 + Frontend/patient_manager/web/index.html | 2 +- 13 files changed, 158 insertions(+), 108 deletions(-) diff --git a/Frontend/patient_manager/lib/components/homeTileGrid.dart b/Frontend/patient_manager/lib/components/homeTileGrid.dart index 65389a29..15075e01 100644 --- a/Frontend/patient_manager/lib/components/homeTileGrid.dart +++ b/Frontend/patient_manager/lib/components/homeTileGrid.dart @@ -43,7 +43,7 @@ class _HomeTileGridState extends State { tileList.add(HomeTile( onTap: () { Navigator.of(context) - .pushNamed('/profile', arguments: widget.signedInUser); + .pushNamed('/user-profile', arguments: widget.signedInUser); // Navigator.of(context).pushNamedAndRemoveUntil( // '/profile', // (route) => false, @@ -62,7 +62,7 @@ class _HomeTileGridState extends State { tileList.add(HomeTile( onTap: () { Navigator.of(context).popAndPushNamed( - '/business/add', + '/business-profile/set-up', arguments: widget.signedInUser, ); // Navigator.of(context).pushNamedAndRemoveUntil( @@ -104,7 +104,7 @@ class _HomeTileGridState extends State { tileList.add(HomeTile( onTap: () { Navigator.of(context).pushNamed( - '/patient-access-review', + '/access-review', arguments: widget.signedInUser, ); // Navigator.of(context).pushNamedAndRemoveUntil( @@ -196,7 +196,7 @@ class _HomeTileGridState extends State { tileList.add(HomeTile( onTap: () { Navigator.of(context).pushNamed( - '/business/add', + '/business-profile/set-up', arguments: widget.signedInUser, ); // Navigator.of(context).pushNamedAndRemoveUntil( @@ -212,7 +212,7 @@ class _HomeTileGridState extends State { )); tileList.add(HomeTile( onTap: () { - Navigator.of(context).pushNamed('/patient-manager/add', + Navigator.of(context).pushNamed('/patient-profile/set-up', arguments: widget.signedInUser); // Navigator.of(context).pushNamedAndRemoveUntil( // '/patient-manager/add', @@ -229,9 +229,8 @@ class _HomeTileGridState extends State { onTap: () { // Navigator.of(context) // .popAndPushNamed('/profile', arguments: widget.signedInUser); - Navigator.of(context).pushNamedAndRemoveUntil( - '/profile', - (route) => false, + Navigator.of(context).pushNamed( + '/user-profile', arguments: widget.signedInUser, ); }, diff --git a/Frontend/patient_manager/lib/components/mihAppDrawer.dart b/Frontend/patient_manager/lib/components/mihAppDrawer.dart index af4cb2a8..dc3431c3 100644 --- a/Frontend/patient_manager/lib/components/mihAppDrawer.dart +++ b/Frontend/patient_manager/lib/components/mihAppDrawer.dart @@ -139,7 +139,7 @@ class _MIHAppDrawerState extends State { ), onTap: () { Navigator.of(context) - .pushNamedAndRemoveUntil('/home', (route) => false); + .pushNamedAndRemoveUntil('/', (route) => false); }, ), ListTile( @@ -166,7 +166,7 @@ class _MIHAppDrawerState extends State { onTap: () { //signedInUser = snapshot.data!; //print("MIHAppDrawer: ${signedInUser.runtimeType}"); - Navigator.of(context).popAndPushNamed('/profile', + Navigator.of(context).popAndPushNamed('/user-profile', arguments: widget.signedInUser); }, ), @@ -219,7 +219,7 @@ class _MIHAppDrawerState extends State { MzanziInnovationHub.of(context)!.changeTheme(ThemeMode.dark); //print("Dark Mode: $darkm"); } - Navigator.of(context).popAndPushNamed('/home'); + Navigator.of(context).popAndPushNamed('/'); }); }, icon: Icon( diff --git a/Frontend/patient_manager/lib/components/patientDetails.dart b/Frontend/patient_manager/lib/components/patientDetails.dart index 2bf2e6b9..a3088396 100644 --- a/Frontend/patient_manager/lib/components/patientDetails.dart +++ b/Frontend/patient_manager/lib/components/patientDetails.dart @@ -1,13 +1,17 @@ import 'package:flutter/material.dart'; import 'package:patient_manager/components/inputsAndButtons/mihTextInput.dart'; import 'package:patient_manager/main.dart'; +import 'package:patient_manager/objects/appUser.dart'; +import 'package:patient_manager/objects/arguments.dart'; import 'package:patient_manager/objects/patients.dart'; class PatientDetails extends StatefulWidget { + final AppUser signedInUser; final Patient selectedPatient; final String type; const PatientDetails({ super.key, + required this.signedInUser, required this.selectedPatient, required this.type, }); @@ -194,8 +198,9 @@ class _PatientDetailsState extends State { alignment: Alignment.topRight, color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), onPressed: () { - Navigator.of(context).pushNamed('/patient-manager/patient/edit', - arguments: widget.selectedPatient); + Navigator.of(context).pushNamed('/patient-profile/edit', + arguments: PatientEditArguments( + widget.signedInUser, widget.selectedPatient)); }, ) ]; diff --git a/Frontend/patient_manager/lib/main_dev.dart b/Frontend/patient_manager/lib/main_dev.dart index d1552898..cc8f47a0 100644 --- a/Frontend/patient_manager/lib/main_dev.dart +++ b/Frontend/patient_manager/lib/main_dev.dart @@ -3,6 +3,7 @@ import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:patient_manager/env/env.dart'; import 'package:patient_manager/main.dart'; import 'package:supertokens_flutter/supertokens.dart'; +import 'package:url_strategy/url_strategy.dart'; void main() async { WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized(); @@ -12,6 +13,8 @@ void main() async { apiDomain: AppEnviroment.baseApiUrl, apiBasePath: "/auth", ); + setPathUrlStrategy(); + (); FlutterNativeSplash.remove(); runApp(const MzanziInnovationHub()); } diff --git a/Frontend/patient_manager/lib/objects/arguments.dart b/Frontend/patient_manager/lib/objects/arguments.dart index 43330758..3bc1a0ef 100644 --- a/Frontend/patient_manager/lib/objects/arguments.dart +++ b/Frontend/patient_manager/lib/objects/arguments.dart @@ -40,3 +40,13 @@ class PatientViewArguments { this.type, ); } + +class PatientEditArguments { + final AppUser signedInUser; + final Patient selectedPatient; + + PatientEditArguments( + this.signedInUser, + this.selectedPatient, + ); +} diff --git a/Frontend/patient_manager/lib/pages/patientEdit.dart b/Frontend/patient_manager/lib/pages/patientEdit.dart index c05c852c..371f5db2 100644 --- a/Frontend/patient_manager/lib/pages/patientEdit.dart +++ b/Frontend/patient_manager/lib/pages/patientEdit.dart @@ -10,16 +10,19 @@ import 'package:patient_manager/components/inputsAndButtons/mihTextInput.dart'; import 'package:patient_manager/components/inputsAndButtons/mihButton.dart'; import 'package:patient_manager/env/env.dart'; import 'package:patient_manager/main.dart'; +import 'package:patient_manager/objects/appUser.dart'; +import 'package:patient_manager/objects/arguments.dart'; import 'package:patient_manager/objects/patients.dart'; import 'package:supertokens_flutter/supertokens.dart'; import 'package:supertokens_flutter/http.dart' as http; class EditPatient extends StatefulWidget { final Patient selectedPatient; - + final AppUser signedInUser; const EditPatient({ super.key, required this.selectedPatient, + required this.signedInUser, }); @override @@ -101,7 +104,12 @@ class _EditPatientState extends State { // print("Here4"); // print(response.statusCode); if (response.statusCode == 200) { - Navigator.of(context).pushNamed('/home'); + Navigator.of(context).pop(); + Navigator.of(context).pop(); + Navigator.of(context).pushNamed('/patient-profile', + arguments: PatientViewArguments( + widget.signedInUser, null, null, null, "personal")); + //Navigator.of(context).pushNamed('/'); String message = "${fnameController.text} ${lnameController.text}'s information has been updated successfully! Their medical records and details are now current."; successPopUp(message); @@ -130,7 +138,11 @@ class _EditPatientState extends State { //print("Here4"); //print(response.statusCode); if (response.statusCode == 200) { - Navigator.of(context).pushNamed('/home'); + Navigator.of(context).pop(); + Navigator.of(context).pop(); + Navigator.of(context).popAndPushNamed('/patient-profile', + arguments: PatientViewArguments( + widget.signedInUser, null, null, null, "personal")); String message = "${fnameController.text} ${lnameController.text}'s record has been deleted successfully. This means it will no longer be visible in patient manager and cannot be used for future appointments."; successPopUp(message); diff --git a/Frontend/patient_manager/lib/pages/patientView.dart b/Frontend/patient_manager/lib/pages/patientView.dart index b66a4b6a..4cec1470 100644 --- a/Frontend/patient_manager/lib/pages/patientView.dart +++ b/Frontend/patient_manager/lib/pages/patientView.dart @@ -60,6 +60,7 @@ class _PatientViewState extends State { Widget showSelection(int index) { if (index == 0) { return PatientDetails( + signedInUser: widget.arguments.signedInUser, selectedPatient: widget.arguments.selectedPatient!, type: widget.arguments.type, ); diff --git a/Frontend/patient_manager/lib/pages/profileBusinessAdd.dart b/Frontend/patient_manager/lib/pages/profileBusinessAdd.dart index 226f64ff..81f5efec 100644 --- a/Frontend/patient_manager/lib/pages/profileBusinessAdd.dart +++ b/Frontend/patient_manager/lib/pages/profileBusinessAdd.dart @@ -38,6 +38,7 @@ class _ProfileBusinessAddState extends State { final nameController = TextEditingController(); final typeController = TextEditingController(); final regController = TextEditingController(); + final addressController = TextEditingController(); final logonameController = TextEditingController(); final fnameController = TextEditingController(); final lnameController = TextEditingController(); @@ -87,7 +88,7 @@ class _ProfileBusinessAddState extends State { ); if (response.statusCode == 201) { uploadSelectedFile(selectedSignature, signtureController); - Navigator.of(context).pushNamed('/home'); + Navigator.of(context).pushNamed('/'); String message = "Your business profile is now live! You can now start connecting with customers and growing your business."; successPopUp(message); diff --git a/Frontend/patient_manager/lib/pages/profileBusinessUpdate.dart b/Frontend/patient_manager/lib/pages/profileBusinessUpdate.dart index 44e69b3d..f3d8a40b 100644 --- a/Frontend/patient_manager/lib/pages/profileBusinessUpdate.dart +++ b/Frontend/patient_manager/lib/pages/profileBusinessUpdate.dart @@ -149,7 +149,7 @@ class _ProfileBusinessUpdateState extends State { deleteFileApiCall(oldSigPath); } - Navigator.of(context).pushNamed('/home'); + Navigator.of(context).pushNamed('/'); String message = "Your business profile is now live! You can now start connecting with customers and growing your business."; successPopUp(message); diff --git a/Frontend/patient_manager/lib/router/routeGenerator.dart b/Frontend/patient_manager/lib/router/routeGenerator.dart index f85a8a3b..58ffeb40 100644 --- a/Frontend/patient_manager/lib/router/routeGenerator.dart +++ b/Frontend/patient_manager/lib/router/routeGenerator.dart @@ -2,12 +2,9 @@ import 'package:flutter/material.dart'; import 'package:patient_manager/Authentication/authCheck.dart'; import 'package:patient_manager/components/addOrViewPatient.dart'; import 'package:patient_manager/components/mihAppBar.dart'; -import 'package:patient_manager/components/signInOrRegister.dart'; import 'package:patient_manager/objects/appUser.dart'; import 'package:patient_manager/objects/arguments.dart'; -import 'package:patient_manager/objects/patients.dart'; import 'package:patient_manager/pages/fullScreenFile.dart'; -import 'package:patient_manager/pages/home.dart'; import 'package:patient_manager/pages/patientAccessReview.dart'; import 'package:patient_manager/pages/patientAdd.dart'; import 'package:patient_manager/pages/patientEdit.dart'; @@ -22,120 +19,132 @@ class RouteGenerator { final args = settings.arguments; switch (settings.name) { + // Home or Sign in or Register Pages case '/': - return MaterialPageRoute(builder: (_) => const AuthCheck()); + return MaterialPageRoute( + settings: settings, builder: (_) => const AuthCheck()); + //=============================================================== - case '/home': - return MaterialPageRoute(builder: (_) => const Home()); - - case '/patient-profile': - if (args is PatientViewArguments) { - //print("route generator: $args"); - return MaterialPageRoute( - builder: (_) => AddOrViewPatient( - arguments: args, - ), - ); - } - return _errorRoute(); - - case '/patient-access-review': - if (args is AppUser) { - //print("route generator: $args"); - return MaterialPageRoute( - builder: (_) => PatientAccessRequest( - signedInUser: args, - ), - ); - } - return _errorRoute(); - - case '/patient-manager': - if (args is BusinessArguments) { - //print("route generator: $args"); - return MaterialPageRoute( - builder: (_) => PatientManager( - arguments: args, - ), - ); - } - return _errorRoute(); - - case '/patient-manager/add': - if (args is AppUser) { - return MaterialPageRoute( - builder: (_) => AddPatient( - signedInUser: args, - ), - ); - } - return _errorRoute(); - - case '/patient-manager/patient': - if (args is PatientViewArguments) { - return MaterialPageRoute( - builder: (_) => PatientView( - arguments: args, - ), - ); - } - return _errorRoute(); - - case '/patient-manager/patient/edit': - if (args is Patient) { - return MaterialPageRoute( - builder: (_) => EditPatient( - selectedPatient: args, - ), - ); - } - return _errorRoute(); - - case '/profile': + //User Profile + case '/user-profile': if (args is AppUser) { return MaterialPageRoute( + settings: settings, builder: (_) => ProfileUserUpdate( signedInUser: args, ), ); } return _errorRoute(); + //=============================================================== - case '/file-veiwer': - if (args is FileViewArguments) { - return MaterialPageRoute( - builder: (_) => FullScreenFileViewer( - arguments: args, - ), - ); - } - return _errorRoute(); - + //Business Profile Pages case '/business-profile': if (args is BusinessArguments) { return MaterialPageRoute( + settings: settings, builder: (_) => ProfileBusinessUpdate( arguments: args, ), ); } return _errorRoute(); - - case '/business/add': + case '/business-profile/set-up': if (args is AppUser) { return MaterialPageRoute( + settings: settings, builder: (_) => ProfileBusinessAdd( signedInUser: args, ), ); } return _errorRoute(); - case '/signin': - return MaterialPageRoute(builder: (_) => const SignInOrRegister()); - // //case '/signIn': - // // return MaterialPageRoute(builder: (_) => SignIn()); - // case '/auth': - // return MaterialPageRoute(builder: (_) => const AuthPage()); + //=============================================================== + + // Patient Profile Pages + case '/patient-profile': + if (args is PatientViewArguments) { + //print("route generator: $args"); + return MaterialPageRoute( + settings: settings, + builder: (_) => AddOrViewPatient( + arguments: args, + ), + ); + } + return _errorRoute(); + case '/patient-profile/set-up': + if (args is AppUser) { + return MaterialPageRoute( + settings: settings, + builder: (_) => AddPatient( + signedInUser: args, + ), + ); + } + return _errorRoute(); + case '/patient-profile/edit': + if (args is PatientEditArguments) { + return MaterialPageRoute( + settings: settings, + builder: (_) => EditPatient( + signedInUser: args.signedInUser, + selectedPatient: args.selectedPatient, + ), + ); + } + return _errorRoute(); + //=============================================================== + + // Access Review Page + case '/access-review': + if (args is AppUser) { + //print("route generator: $args"); + return MaterialPageRoute( + settings: settings, + builder: (_) => PatientAccessRequest( + signedInUser: args, + ), + ); + } + return _errorRoute(); + //=============================================================== + + //Patient Manager Pages + case '/patient-manager': + if (args is BusinessArguments) { + //print("route generator: $args"); + return MaterialPageRoute( + settings: settings, + builder: (_) => PatientManager( + arguments: args, + ), + ); + } + return _errorRoute(); + case '/patient-manager/patient': + if (args is PatientViewArguments) { + return MaterialPageRoute( + settings: settings, + builder: (_) => PatientView( + arguments: args, + ), + ); + } + return _errorRoute(); + //=============================================================== + + //Full Screen File Viewer + case '/file-veiwer': + if (args is FileViewArguments) { + return MaterialPageRoute( + settings: settings, + builder: (_) => FullScreenFileViewer( + arguments: args, + ), + ); + } + return _errorRoute(); } throw ''; } diff --git a/Frontend/patient_manager/pubspec.lock b/Frontend/patient_manager/pubspec.lock index 2fd0a009..5644cf18 100644 --- a/Frontend/patient_manager/pubspec.lock +++ b/Frontend/patient_manager/pubspec.lock @@ -1229,6 +1229,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.2" + url_strategy: + dependency: "direct main" + description: + name: url_strategy + sha256: "6eff69fa0900b731a23552b38b54389f399d247dbb0998f2cbdf25bef6790a7c" + url: "https://pub.dev" + source: hosted + version: "0.3.0" uuid: dependency: transitive description: diff --git a/Frontend/patient_manager/pubspec.yaml b/Frontend/patient_manager/pubspec.yaml index 796fbd30..fe264131 100644 --- a/Frontend/patient_manager/pubspec.yaml +++ b/Frontend/patient_manager/pubspec.yaml @@ -49,6 +49,8 @@ dependencies: gif: ^2.3.0 intl: ^0.19.0 flutter_native_splash: ^2.4.1 + #google_maps_flutter_web: ^0.5.10 + url_strategy: ^0.3.0 dev_dependencies: flutter_test: diff --git a/Frontend/patient_manager/web/index.html b/Frontend/patient_manager/web/index.html index b62c9e8e..fe22935f 100644 --- a/Frontend/patient_manager/web/index.html +++ b/Frontend/patient_manager/web/index.html @@ -12,7 +12,7 @@ This is a placeholder for base href that will be replaced by the value of the `--base-href` argument provided to `flutter build`. --> - +