diff --git a/Frontend/lib/mih_packages/about_mih/about_mih.dart b/Frontend/lib/mih_packages/about_mih/about_mih.dart index 52eb7286..077c655a 100644 --- a/Frontend/lib/mih_packages/about_mih/about_mih.dart +++ b/Frontend/lib/mih_packages/about_mih/about_mih.dart @@ -1,3 +1,5 @@ +import 'package:go_router/go_router.dart'; +import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; @@ -25,7 +27,7 @@ class _AboutMihState extends State { void initState() { super.initState(); setState(() { - if(widget.packageIndex == null) { + if (widget.packageIndex == null) { _selcetedIndex = 0; } else { _selcetedIndex = widget.packageIndex!; @@ -55,7 +57,13 @@ class _AboutMihState extends State { icon: const Icon(Icons.arrow_back), iconSize: 35, onTap: () { - Navigator.of(context).pop(); + context.goNamed( + 'home', + extra: AuthArguments( + true, + false, + ), + ); FocusScope.of(context).unfocus(); }, ); diff --git a/Frontend/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart b/Frontend/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart index f8e1bba1..90759872 100644 --- a/Frontend/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart +++ b/Frontend/lib/mih_packages/about_mih/package_tile/about_mih_tile.dart @@ -1,3 +1,4 @@ +import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/main.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tile.dart'; import 'package:flutter/material.dart'; @@ -20,10 +21,14 @@ class _AboutMihTileState extends State { Widget build(BuildContext context) { return MihPackageTile( onTap: () { - Navigator.of(context).pushNamed( - '/about', - arguments: 0, + context.goNamed( + "aboutMih", + extra: 0, ); + // Navigator.of(context).pushNamed( + // '/about', + // arguments: 0, + // ); }, appName: "About MIH", appIcon: Icon( diff --git a/Frontend/lib/mih_packages/authentication/biometric_check.dart b/Frontend/lib/mih_packages/authentication/biometric_check.dart index a80aefb5..aecdc2c5 100644 --- a/Frontend/lib/mih_packages/authentication/biometric_check.dart +++ b/Frontend/lib/mih_packages/authentication/biometric_check.dart @@ -10,7 +10,6 @@ import 'package:mzansi_innovation_hub/mih_config/mih_colors.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'; import 'package:app_settings/app_settings.dart'; class BiometricCheck extends StatefulWidget { @@ -47,12 +46,12 @@ class _BiometricCheckState extends State { ), iconSize: 35, onTap: () async { - await SuperTokens.signOut(completionHandler: (error) { - print(error); - }); - if (await SuperTokens.doesSessionExist() == false) { - Navigator.of(context).popAndPushNamed('/'); - } + // await SuperTokens.signOut(completionHandler: (error) { + // print(error); + // }); + // if (await SuperTokens.doesSessionExist() == false) { + // Navigator.of(context).popAndPushNamed('/'); + // } // Navigator.of(context).pushNamed( // '/about', // //arguments: widget.signedInUser, diff --git a/Frontend/lib/mih_packages/authentication/register.dart b/Frontend/lib/mih_packages/authentication/register.dart deleted file mode 100644 index aa3e5c61..00000000 --- a/Frontend/lib/mih_packages/authentication/register.dart +++ /dev/null @@ -1,518 +0,0 @@ -import 'dart:convert'; - -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_install_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import '../../main.dart'; -import 'package:supertokens_flutter/http.dart' as http; -import 'package:supertokens_flutter/supertokens.dart'; -import '../../mih_components/mih_layout/mih_action.dart'; -import '../../mih_components/mih_layout/mih_body.dart'; -import '../../mih_components/mih_layout/mih_header.dart'; -import '../../mih_components/mih_layout/mih_layout_builder.dart'; -import '../../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import '../../mih_components/mih_pop_up_messages/mih_success_message.dart'; -import '../../mih_config/mih_env.dart'; - -class Register extends StatefulWidget { - final Function()? onTap; - const Register({super.key, required this.onTap}); - - @override - State createState() => _RegisterState(); -} - -class _RegisterState extends State { - final emailController = TextEditingController(); - final passwordController = TextEditingController(); - final confirmPasswordController = TextEditingController(); - final officeID = TextEditingController(); - final baseAPI = AppEnviroment.baseApiUrl; - final FocusNode _focusNode = FocusNode(); - final _formKey = GlobalKey(); - bool _obscureText = true; - - bool successfulSignUp = false; - - Future addUserAPICall(String email, String uid) async { - //await getOfficeIdByUser(docOfficeIdApiUrl + widget.userEmail); - //print(futureDocOfficeId.toString()); - var response = await http.post( - Uri.parse("$baseAPI/user/insert/"), - headers: { - "Content-Type": "application/json; charset=UTF-8" - }, - body: jsonEncode({ - "email": email, - "app_id": uid, - }), - ); - if (response.statusCode == 201) { - Navigator.of(context).pushNamedAndRemoveUntil( - '/', - (route) => false, - arguments: AuthArguments( - true, - true, - ), - ); - // signUpSuccess(); - // setState(() { - // successfulSignUp = true; - // }); - } else { - internetConnectionPopUp(); - } - } - - //sign user in - Future signUserUp() async { - if (!validEmail()) { - emailError(); - } else if (passwordController.text != confirmPasswordController.text) { - passwordError(); - } else { - //var _backgroundColor = Colors.transparent; - - showDialog( - context: context, - builder: (context) { - return const Mihloadingcircle(); - }, - ); - - try { - Uri uri = Uri.parse( - "$baseAPI/auth/emailpassword/email/exists?email=${emailController.text}"); - //print("Here"); - var response = await http.get(uri); - //print(response.body); - //print("response 1: ${response.statusCode}"); - if (response.statusCode == 200) { - var userExists = jsonDecode(response.body); - if (userExists["exists"]) { - Navigator.of(context).pop(); - signUpError(); - } else { - var response2 = await http.post( - Uri.parse("$baseAPI/auth/signup"), - body: - '{"formFields": [{"id": "email","value": "${emailController.text}"}, {"id": "password","value": "${passwordController.text}"}]}', - headers: { - 'Content-type': 'application/json', - 'Accept': 'application/json', - "Authorization": "leatucczyixqwkqqdrhayiwzeofkltds" - }, - ); - //print("response 2: ${response2.statusCode}"); - if (response2.statusCode == 200) { - //print("response 2: ${response2.body}"); - var userCreated = jsonDecode(response2.body); - //print("Created user $userCreated"); - if (userCreated["status"] == "OK") { - //print("Here1"); - //Creat user in db - String uid = await SuperTokens.getUserId(); - //print("uid: $uid"); - addUserAPICall(emailController.text, uid); - Navigator.of(context).pop(); - //print("Here1"); - } else if (userCreated["status"] == "FIELD_ERROR") { - Navigator.of(context).pop(); - passwordReqError(); - } else { - Navigator.of(context).pop(); - internetConnectionPopUp(); - } - } - } - } - } on Exception catch (error) { - Navigator.of(context).pop(); - loginError(error.toString()); - emailController.clear(); - passwordController.clear(); - confirmPasswordController.clear(); - } - } - } - - bool validEmail() { - String text = emailController.text; - var regex = RegExp(r'^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$'); - return regex.hasMatch(text); - } - - void internetConnectionPopUp() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Internet Connection"); - }, - ); - } - - void signUpSuccess() { - showDialog( - context: context, - builder: (context) { - return const MIHSuccessMessage( - successType: "Success", - successMessage: - "Congratulations! Your account has been created successfully. You are logged in and can start exploring.\n\nPlease note: more apps will appear once you update your profile."); - }, - ); - } - - void signUpError() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "User Exists"); - }, - ); - } - - void passwordError() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Password Match"); - }, - ); - } - - void emailError() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Invalid Email"); - }, - ); - } - - void passwordReqError() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Password Requirements"); - }, - ); - } - - void loginError(error) { - showDialog( - context: context, - builder: (context) { - return AlertDialog( - title: Text(error), - ); - }, - ); - } - - void submitFormInput() async { - await signUserUp(); - } - - void toggle() { - setState(() { - _obscureText = !_obscureText; - }); - } - - Widget getSecondaryActionButton() { - return Visibility( - visible: MzansiInnovationHub.of(context)!.theme.getPlatform() == "Web", - child: MIHAction( - icon: Padding( - padding: const EdgeInsets.all(10.0), - child: MihButton( - onPressed: () { - MihInstallServices().installMihTrigger(context); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 150, - child: Text( - "Install MIH", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ), - iconSize: 35, - onTap: () { - MihInstallServices().installMihTrigger(context); - }, - ), - ); - } - - MIHAction getActionButton() { - return MIHAction( - icon: Padding( - padding: const EdgeInsets.all(10.0), - child: SizedBox( - height: 50, - child: FittedBox( - child: Icon( - MihIcons.mihLogo, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - ), - ), - iconSize: 35, - onTap: () { - Navigator.of(context).pushNamed( - '/about', - arguments: 0, - ); - }, - ); - } - - MIHHeader getHeader() { - return const MIHHeader( - headerAlignment: MainAxisAlignment.center, - headerItems: [ - Text( - "", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 25, - ), - ), - ], - ); - } - - MIHBody getBody(double width) { - return MIHBody( - borderOn: false, - bodyItems: [ - KeyboardListener( - focusNode: _focusNode, - autofocus: true, - onKeyEvent: (event) async { - if (event is KeyDownEvent && - event.logicalKey == LogicalKeyboardKey.enter) { - if (_formKey.currentState!.validate()) { - submitFormInput(); - } else { - MihAlertServices().formNotFilledCompletely(context); - } - } - }, - child: SafeArea( - child: Center( - child: SingleChildScrollView( - physics: const BouncingScrollPhysics(), - child: Padding( - padding: MzansiInnovationHub.of(context)!.theme.screenType == - "desktop" - ? EdgeInsets.symmetric(horizontal: width * 0.2) - : EdgeInsets.symmetric(horizontal: width * 0.075), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - //logo - Icon( - Icons.lock, - size: 100, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - //spacer - const SizedBox(height: 10), - //Heading - Text( - 'Create an Account', - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - //spacer - // const SizedBox(height: 20), - MihForm( - formKey: _formKey, - formFields: [ - //email input - MihTextFormField( - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - controller: emailController, - multiLineInput: false, - requiredText: true, - hintText: "Email", - autofillHints: const [AutofillHints.email], - validator: (value) { - return MihValidationServices().validateEmail(value); - }, - ), - //spacer - const SizedBox(height: 10), - //password input - MihTextFormField( - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - controller: passwordController, - multiLineInput: false, - requiredText: true, - hintText: "Password", - passwordMode: true, - autofillHints: const [AutofillHints.password], - validator: (value) { - return MihValidationServices() - .validatePassword(value); - }, - ), - //spacer - const SizedBox(height: 10), - MihTextFormField( - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - controller: confirmPasswordController, - multiLineInput: false, - requiredText: true, - hintText: "Confirm Password", - passwordMode: true, - autofillHints: const [AutofillHints.password], - validator: (value) { - return MihValidationServices() - .validatePassword(value); - }, - ), - //spacer - const SizedBox(height: 20), - // sign up button - Center( - child: Wrap( - alignment: WrapAlignment.center, - runAlignment: WrapAlignment.center, - spacing: 10, - runSpacing: 10, - children: [ - MihButton( - onPressed: () { - if (_formKey.currentState!.validate()) { - submitFormInput(); - } else { - MihAlertServices() - .formNotFilledCompletely(context); - } - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - width: 300, - child: Text( - "Create New Account", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - MihButton( - onPressed: widget.onTap, - buttonColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - width: 300, - child: Text( - "I have an account", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - - //here - ], - ) - ], - ), - ), - ), - )), - ), - ], - ); - } - - @override - void dispose() { - emailController.dispose(); - passwordController.dispose(); - officeID.dispose(); - _focusNode.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - double screenWidth = MediaQuery.of(context).size.width; - return MIHLayoutBuilder( - actionButton: getActionButton(), - header: getHeader(), - secondaryActionButton: getSecondaryActionButton(), - body: getBody(screenWidth), - actionDrawer: null, - secondaryActionDrawer: null, - bottomNavBar: null, - pullDownToRefresh: false, - onPullDown: () async {}, - ); - } -} diff --git a/Frontend/lib/mih_packages/authentication/signin.dart b/Frontend/lib/mih_packages/authentication/signin.dart deleted file mode 100644 index 1e86ba77..00000000 --- a/Frontend/lib/mih_packages/authentication/signin.dart +++ /dev/null @@ -1,701 +0,0 @@ -import 'dart:convert'; -import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_install_services.dart'; -import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_form.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart'; -import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import '../../main.dart'; -import 'package:supertokens_flutter/http.dart' as http; -import '../../mih_components/mih_layout/mih_action.dart'; -import '../../mih_components/mih_layout/mih_body.dart'; -import '../../mih_components/mih_layout/mih_header.dart'; -import '../../mih_components/mih_layout/mih_layout_builder.dart'; -import '../../mih_components/mih_layout/mih_tile.dart'; -import '../../mih_components/mih_pop_up_messages/mih_error_message.dart'; -import '../../mih_components/mih_pop_up_messages/mih_loading_circle.dart'; -import '../../mih_config/mih_env.dart'; - -class SignIn extends StatefulWidget { - final Function() onTap; - const SignIn({super.key, required this.onTap}); - - @override - State createState() => _SignInState(); -} - -class _SignInState extends State { - final emailController = TextEditingController(); - final passwordController = TextEditingController(); - //bool _obscureText = true; - bool successfulSignIn = false; - bool showProfiles = false; - - // focus node to capture keyboard events - final FocusNode _focusNode = FocusNode(); - final _formKey = GlobalKey(); - - final baseAPI = AppEnviroment.baseApiUrl; - - late List sandboxProfileList = []; - - //sign user in - Future signUserIn() async { - //var _backgroundColor = Colors.transparent; - showDialog( - context: context, - builder: (context) { - return const Mihloadingcircle(); - }, - ); - try { - var response = await http.post( - Uri.parse("$baseAPI/auth/signin"), - body: - '{"formFields": [{"id": "email","value": "${emailController.text}"}, {"id": "password","value": "${passwordController.text}"}]}', - headers: { - 'Content-type': 'application/json', - 'Accept': 'application/json', - "Authorization": "leatucczyixqwkqqdrhayiwzeofkltds" - }, - ); - //print(response.body[]) - if (response.statusCode == 200) { - //print(response.body); - var userSignedin = jsonDecode(response.body); - if (userSignedin["status"] == "OK") { - //print("here"); - setState(() { - successfulSignIn = true; - }); - Navigator.of(context).pop(); - } else { - Navigator.of(context).pop(); - loginError(); - passwordController.clear(); - } - } - } on Exception { - Navigator.of(context).pop(); - loginError(); - passwordController.clear(); - } - } - - Color getPrim() { - return MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"); - } - - Color getSec() { - return MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"); - } - - void setSandboxProfiles(List tileList) { - tileList.add(MIHTile( - onTap: () { - setState(() { - emailController.text = "testpatient@mzansi-innovation-hub.co.za"; - passwordController.text = "Testprofile@1234"; - }); - if (_formKey.currentState!.validate()) { - submitSignInForm(); - } else { - MihAlertServices().formNotFilledCompletely(context); - } - }, - tileName: "Patient", - tileIcon: Icon( - Icons.perm_identity_rounded, - color: getSec(), - size: 200, - ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - onTap: () { - setState(() { - emailController.text = "testdoctor@mzansi-innovation-hub.co.za"; - passwordController.text = "Testprofile@1234"; - }); - if (_formKey.currentState!.validate()) { - submitSignInForm(); - } else { - MihAlertServices().formNotFilledCompletely(context); - } - }, - tileName: "Doctor", - tileIcon: Icon( - Icons.medical_services, - color: getSec(), - size: 200, - ), - p: getPrim(), - s: getSec(), - )); - //if (AppEnviroment.getEnv() == "Dev") { - tileList.add(MIHTile( - onTap: () { - setState(() { - emailController.text = "test-business@mzansi-innovation-hub.co.za"; - passwordController.text = "Testprofile@1234"; - }); - if (_formKey.currentState!.validate()) { - submitSignInForm(); - } else { - MihAlertServices().formNotFilledCompletely(context); - } - }, - tileName: "Business", - tileIcon: Icon( - Icons.business, - color: getSec(), - size: 200, - ), - p: getPrim(), - s: getSec(), - )); - tileList.add(MIHTile( - onTap: () { - setState(() { - emailController.text = "test@mzansi-innovation-hub.co.za"; - passwordController.text = "Testprofile@1234"; - }); - if (_formKey.currentState!.validate()) { - submitSignInForm(); - } else { - MihAlertServices().formNotFilledCompletely(context); - } - }, - tileName: "Test", - tileIcon: Icon( - Icons.warning_amber_rounded, - color: getSec(), - size: 200, - ), - p: getPrim(), - s: getSec(), - )); - //} - } - - void loginError() { - showDialog( - context: context, - builder: (context) { - return const MIHErrorMessage(errorType: "Invalid Credentials"); - }, - ); - } - - void submitSignInForm() async { - await signUserIn(); - if (successfulSignIn) { - Navigator.of(context).pushNamedAndRemoveUntil( - '/', - (route) => false, - arguments: AuthArguments( - true, - true, - ), - ); - } - } - - void showSandboxProfiles() { - showDialog( - context: context, - builder: (context) { - return Dialog( - //backgroundColor: MihColors.getPrimaryColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - child: Stack( - children: [ - Container( - padding: const EdgeInsets.all(10.0), - width: 500.0, - height: 500, - decoration: BoxDecoration( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - borderRadius: BorderRadius.circular(25.0), - border: Border.all( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - width: 5.0), - ), - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - Text( - "Sandbox Profiles", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 25.0, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 10), - Text( - "NB: These accounts are used for test purposes. Please do not store personal information on these profiles.", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - fontSize: 15.0, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 15), - Expanded( - child: GridView.builder( - // physics: , - // shrinkWrap: true, - itemCount: sandboxProfileList.length, - gridDelegate: - const SliverGridDelegateWithMaxCrossAxisExtent( - mainAxisSpacing: 10, maxCrossAxisExtent: 100), - itemBuilder: (context, index) { - return sandboxProfileList[index]; - }, - ), - ), - ], - ), - ), - Positioned( - top: 5, - right: 5, - width: 50, - height: 50, - child: IconButton( - onPressed: () { - Navigator.pop(context); - }, - icon: Icon( - Icons.close, - color: MihColors.getRedColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - size: 35, - ), - ), - ), - ], - ), - ); - }, - ); - } - - Widget getSecondaryActionButton() { - return Visibility( - visible: MzansiInnovationHub.of(context)!.theme.getPlatform() == "Web", - child: MIHAction( - icon: Padding( - padding: const EdgeInsets.all(10.0), - child: MihButton( - onPressed: () { - MihInstallServices().installMihTrigger(context); - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - width: 150, - child: Text( - "Install MIH", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ), - iconSize: 35, - onTap: () { - Navigator.of(context).pushNamed( - '/about', - arguments: 0, - ); - }, - ), - ); - } - - MIHAction getActionButton() { - return MIHAction( - icon: Padding( - padding: const EdgeInsets.all(10.0), - child: SizedBox( - height: 50, - child: FittedBox( - child: Icon( - MihIcons.mihLogo, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == "Dark"), - ), - ), - ), - ), - iconSize: 35, - onTap: () { - Navigator.of(context).pushNamed( - '/about', - arguments: 0, - ); - }, - ); - } - - MIHHeader getHeader() { - return const MIHHeader( - headerAlignment: MainAxisAlignment.center, - headerItems: [ - Text( - "", - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 25, - ), - ), - ], - ); - } - - MIHBody getBody(double width) { - return MIHBody( - borderOn: false, - bodyItems: [ - KeyboardListener( - focusNode: _focusNode, - autofocus: true, - onKeyEvent: (event) async { - if (event is KeyDownEvent && - event.logicalKey == LogicalKeyboardKey.enter) { - if (_formKey.currentState!.validate()) { - submitSignInForm(); - } else { - MihAlertServices().formNotFilledCompletely(context); - } - } - }, - child: SafeArea( - child: Center( - child: SingleChildScrollView( - physics: const BouncingScrollPhysics(), - child: Padding( - padding: MzansiInnovationHub.of(context)!.theme.screenType == - "desktop" - ? EdgeInsets.symmetric(horizontal: width * 0.2) - : EdgeInsets.symmetric(horizontal: width * 0.075), - child: AutofillGroup( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - //logo - Icon( - Icons.lock, - size: 100, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - //spacer - const SizedBox(height: 10), - //Heading - Text( - 'Sign In', - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - ), - ), - //spacer - const SizedBox(height: 10), - MihForm( - formKey: _formKey, - formFields: [ - MihTextFormField( - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - controller: emailController, - multiLineInput: false, - requiredText: true, - hintText: "Email", - autofillHints: const [AutofillHints.email], - validator: (value) { - return MihValidationServices() - .validateEmail(value); - }, - ), - //spacer - const SizedBox(height: 10), - //password input - MihTextFormField( - fillColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - inputColor: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)!.theme.mode == - "Dark"), - controller: passwordController, - multiLineInput: false, - requiredText: true, - hintText: "Password", - passwordMode: true, - autofillHints: const [AutofillHints.password], - validator: (value) { - return MihValidationServices() - .validatePassword(value); - }, - ), - const SizedBox(height: 10), - SizedBox( - // width: 500.0, - //height: 100.0, - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - GestureDetector( - onTap: () { - Navigator.of(context).pushNamed( - '/forgot-password', - ); - }, - child: Text( - 'Forgot Password?', - style: TextStyle( - fontSize: 15, - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - - //spacer - const SizedBox(height: 20), - // sign in button - Center( - child: Wrap( - alignment: WrapAlignment.center, - runAlignment: WrapAlignment.center, - spacing: 10, - runSpacing: 10, - children: [ - MihButton( - onPressed: () { - if (_formKey.currentState!.validate()) { - submitSignInForm(); - } else { - MihAlertServices() - .formNotFilledCompletely(context); - } - }, - buttonColor: MihColors.getGreenColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - width: 300, - child: Text( - "Sign In", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - MihButton( - onPressed: widget.onTap, - buttonColor: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - width: 300, - child: Text( - "Create New Account", - style: TextStyle( - color: MihColors.getPrimaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), - ], - ), - ), - - //spacer - const SizedBox(height: 35), - Center( - child: SizedBox( - width: width, - //height: 100.0, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Flexible( - flex: 1, - child: Padding( - padding: EdgeInsets.only(right: 10.0), - child: Divider(), - ), - ), - Flexible( - flex: 1, - child: GestureDetector( - child: Text( - 'Use Sandox Profile', - textAlign: TextAlign.center, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 15, - color: - MihColors.getSecondaryColor( - MzansiInnovationHub.of( - context)! - .theme - .mode == - "Dark")), - ), - onTap: () { - setState(() { - showProfiles = !showProfiles; - }); - }, - ), - ), - const Flexible( - flex: 1, - child: Padding( - padding: EdgeInsets.only(left: 10.0), - child: Divider(), - ), - ), - ], - ), - ), - ), - const SizedBox(height: 10), - Center( - child: Visibility( - visible: showProfiles, - child: SizedBox( - width: 500, - child: Column( - //mainAxisSize: MainAxisSize.max, - children: [ - GridView.builder( - physics: - const NeverScrollableScrollPhysics(), - shrinkWrap: true, - itemCount: sandboxProfileList.length, - gridDelegate: - const SliverGridDelegateWithMaxCrossAxisExtent( - mainAxisSpacing: 10, - maxCrossAxisExtent: 100), - itemBuilder: (context, index) { - return sandboxProfileList[index]; - }, - ), - const SizedBox(height: 20), - Text( - "NB: These accounts are used for test purposes. Please do not store personal information on these profiles.", - textAlign: TextAlign.center, - style: TextStyle( - color: MihColors.getSecondaryColor( - MzansiInnovationHub.of(context)! - .theme - .mode == - "Dark"), - fontSize: 15.0, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - ), - ), - ], - ), - ], - ), - ), - ), - ), - ), - ), - ), - ], - ); - } - - @override - void dispose() { - emailController.dispose(); - passwordController.dispose(); - _focusNode.dispose(); - TextInput.finishAutofillContext(); - super.dispose(); - } - - @override - void initState() { - setState(() { - setSandboxProfiles(sandboxProfileList); - }); - super.initState(); - } - - @override - Widget build(BuildContext context) { - double screenWidth = MediaQuery.of(context).size.width; - return MIHLayoutBuilder( - actionButton: getActionButton(), - header: getHeader(), - secondaryActionButton: getSecondaryActionButton(), - body: getBody(screenWidth), - actionDrawer: null, - secondaryActionDrawer: null, - bottomNavBar: null, - pullDownToRefresh: false, - onPullDown: () async {}, - ); - } -} diff --git a/Frontend/lib/mih_packages/authentication/signin_or_register.dart b/Frontend/lib/mih_packages/authentication/signin_or_register.dart deleted file mode 100644 index 17c83b2f..00000000 --- a/Frontend/lib/mih_packages/authentication/signin_or_register.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'register.dart'; -import 'signin.dart'; - -class SignInOrRegister extends StatefulWidget { - const SignInOrRegister({super.key}); - - @override - State createState() => _SignInOrRegisterState(); -} - -class _SignInOrRegisterState extends State { - bool showSignInPage = true; - - void togglePages() { - setState(() { - showSignInPage = !showSignInPage; - }); - } - - @override - void dispose() { - super.dispose(); - } - - @override - Widget build(BuildContext context) { - if (showSignInPage) { - return SignIn(onTap: togglePages); - } else { - return Register(onTap: togglePages); - } - } -} diff --git a/Frontend/lib/mih_packages/mih_authentication/mih_authentication.dart b/Frontend/lib/mih_packages/mih_authentication/mih_authentication.dart index 1908e703..af01615e 100644 --- a/Frontend/lib/mih_packages/mih_authentication/mih_authentication.dart +++ b/Frontend/lib/mih_packages/mih_authentication/mih_authentication.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; @@ -75,10 +76,11 @@ class _MihAuthenticationState extends State { ), iconSize: 45, onTap: () { - Navigator.of(context).pushNamed( - '/about', - arguments: 0, - ); + context.goNamed("aboutMih", extra: 0); + // Navigator.of(context).pushNamed( + // '/about', + // arguments: 0, + // ); }, ); } diff --git a/Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart b/Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart index 2adcf2ac..ada132e8 100644 --- a/Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart +++ b/Frontend/lib/mih_packages/mih_home/components/mih_app_drawer.dart @@ -200,10 +200,7 @@ class _MIHAppDrawerState extends State { ], ), onTap: () { - Navigator.of(context).pushNamed( - '/about', - arguments: 1, - ); + context.goNamed("aboutMih", extra: 1); }, ), ListTile( @@ -233,10 +230,7 @@ class _MIHAppDrawerState extends State { ], ), onTap: () { - Navigator.of(context).pushNamed( - '/about', - arguments: 2, - ); + context.goNamed("aboutMih", extra: 2); }, ), ListTile(