diff --git a/File_Storage/Mzanzi_Innovation_Hub/.minio.sys/buckets/.tracker.bin b/File_Storage/Mzanzi_Innovation_Hub/.minio.sys/buckets/.tracker.bin index ac0fdec8..4adc577d 100644 Binary files a/File_Storage/Mzanzi_Innovation_Hub/.minio.sys/buckets/.tracker.bin and b/File_Storage/Mzanzi_Innovation_Hub/.minio.sys/buckets/.tracker.bin differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/.minio.sys/tmp/.trash/e24689ac-95d2-47b4-8423-5b58dd500594 b/File_Storage/Mzanzi_Innovation_Hub/.minio.sys/tmp/.trash/e24689ac-95d2-47b4-8423-5b58dd500594 new file mode 100644 index 00000000..6aa90286 Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/.minio.sys/tmp/.trash/e24689ac-95d2-47b4-8423-5b58dd500594 differ diff --git a/Frontend/patient_manager/lib/components/myAppBar.dart b/Frontend/patient_manager/lib/components/myAppBar.dart index 6f8b242d..90c20882 100644 --- a/Frontend/patient_manager/lib/components/myAppBar.dart +++ b/Frontend/patient_manager/lib/components/myAppBar.dart @@ -12,15 +12,17 @@ class MyAppBar extends StatelessWidget { backgroundColor: Colors.blueAccent, elevation: 8, shadowColor: Colors.black, - leading: IconButton( - onPressed: () { - client.auth.signOut(); - Navigator.of(context).pushNamed('/'); - }, - icon: const Icon(Icons.logout), - iconSize: 35, - color: Colors.black, - ), + actions: [ + IconButton( + onPressed: () { + client.auth.signOut(); + Navigator.of(context).pushNamed('/'); + }, + icon: const Icon(Icons.logout), + iconSize: 35, + color: Colors.black, + ), + ], title: Text( barTitle, style: const TextStyle( diff --git a/Frontend/patient_manager/lib/components/myPassInput.dart b/Frontend/patient_manager/lib/components/myPassInput.dart new file mode 100644 index 00000000..bb6f6d64 --- /dev/null +++ b/Frontend/patient_manager/lib/components/myPassInput.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; + +class MyPassField extends StatefulWidget { + final controller; + final String hintText; + + const MyPassField({ + super.key, + required this.controller, + required this.hintText, + }); + + @override + State createState() => _MyPassFieldState(); +} + +class _MyPassFieldState extends State { + final textFieldFocusNode = FocusNode(); + bool _obscured = true; + + void _toggleObscured() { + setState(() { + _obscured = !_obscured; + if (textFieldFocusNode.hasPrimaryFocus) + return; // If focus is on text field, dont unfocus + textFieldFocusNode.canRequestFocus = + false; // Prevents focus if tap on eye + }); + } + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 25.0), + child: TextField( + controller: widget.controller, + obscureText: _obscured, + decoration: InputDecoration( + fillColor: Colors.white, + filled: true, + hintText: widget.hintText, + hintStyle: TextStyle(color: Colors.blueGrey[400]), + enabledBorder: const OutlineInputBorder( + borderSide: BorderSide( + color: Colors.blueAccent, + width: 2.0, + ), + ), + focusedBorder: const OutlineInputBorder( + borderSide: BorderSide(color: Colors.blue), + ), + suffixIcon: Padding( + padding: const EdgeInsets.fromLTRB(0, 0, 4, 0), + child: GestureDetector( + onTap: _toggleObscured, + child: Icon( + _obscured + ? Icons.visibility_rounded + : Icons.visibility_off_rounded, + size: 24, + color: Colors.blue, + ), + ), + ), + ), + ), + ); + } +} diff --git a/Frontend/patient_manager/lib/components/myTextField.dart b/Frontend/patient_manager/lib/components/myTextInput.dart similarity index 79% rename from Frontend/patient_manager/lib/components/myTextField.dart rename to Frontend/patient_manager/lib/components/myTextInput.dart index e9cc8059..446195ae 100644 --- a/Frontend/patient_manager/lib/components/myTextField.dart +++ b/Frontend/patient_manager/lib/components/myTextInput.dart @@ -3,13 +3,11 @@ import 'package:flutter/material.dart'; class MyTextField extends StatelessWidget { final controller; final String hintText; - final bool obscureText; const MyTextField({ super.key, required this.controller, required this.hintText, - required this.obscureText, }); @override @@ -18,17 +16,18 @@ class MyTextField extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 25.0), child: TextField( controller: controller, - obscureText: obscureText, + obscureText: false, decoration: InputDecoration( fillColor: Colors.white, filled: true, hintText: hintText, hintStyle: TextStyle(color: Colors.blueGrey[400]), enabledBorder: const OutlineInputBorder( - borderSide: BorderSide( - color: Colors.blueAccent, - width: 2.0, - )), + borderSide: BorderSide( + color: Colors.blueAccent, + width: 2.0, + ), + ), focusedBorder: const OutlineInputBorder( borderSide: BorderSide(color: Colors.blue), ), diff --git a/Frontend/patient_manager/lib/pages/register.dart b/Frontend/patient_manager/lib/pages/register.dart index 89486931..1332acbd 100644 --- a/Frontend/patient_manager/lib/pages/register.dart +++ b/Frontend/patient_manager/lib/pages/register.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:patient_manager/components/myTextField.dart'; +import 'package:patient_manager/components/myPassInput.dart'; +import 'package:patient_manager/components/myTextInput.dart'; import 'package:patient_manager/components/mybutton.dart'; import 'package:patient_manager/main.dart'; import 'package:supabase_auth_ui/supabase_auth_ui.dart'; @@ -15,11 +16,12 @@ class Register extends StatefulWidget { class _RegisterState extends State { final emailController = TextEditingController(); final passwordController = TextEditingController(); - + final confirmPasswordController = TextEditingController(); + bool _obscureText = true; //sign user in - Future signUserIn() async { + Future signUserUp() async { try { - final response = await client.auth.signInWithPassword( + final response = await client.auth.signUp( email: emailController.text, password: passwordController.text, ); @@ -44,6 +46,12 @@ class _RegisterState extends State { ); } + void toggle() { + setState(() { + _obscureText = !_obscureText; + }); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -80,7 +88,6 @@ class _RegisterState extends State { child: MyTextField( controller: emailController, hintText: 'Email', - obscureText: false, ), ), //spacer @@ -88,10 +95,19 @@ class _RegisterState extends State { //password input SizedBox( width: 500.0, - child: MyTextField( + child: MyPassField( controller: passwordController, hintText: 'Password', - obscureText: true, + ), + ), + //spacer + const SizedBox(height: 25), + //password input + SizedBox( + width: 500.0, + child: MyPassField( + controller: confirmPasswordController, + hintText: 'Confirm Password', ), ), //spacer @@ -113,11 +129,11 @@ class _RegisterState extends State { ), //spacer const SizedBox(height: 50), - // sign in button + // sign up button SizedBox( width: 500.0, child: MyButton( - onTap: signUserIn, + onTap: signUserUp, buttonText: "Sign Up", ), ), diff --git a/Frontend/patient_manager/lib/pages/signin.dart b/Frontend/patient_manager/lib/pages/signin.dart index b3b9ed74..8b092011 100644 --- a/Frontend/patient_manager/lib/pages/signin.dart +++ b/Frontend/patient_manager/lib/pages/signin.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:patient_manager/components/myTextField.dart'; +import 'package:patient_manager/components/myPassInput.dart'; +import 'package:patient_manager/components/myTextInput.dart'; import 'package:patient_manager/components/mybutton.dart'; import 'package:patient_manager/main.dart'; import 'package:supabase_auth_ui/supabase_auth_ui.dart'; @@ -15,6 +16,7 @@ class SignIn extends StatefulWidget { class _SignInState extends State { final emailController = TextEditingController(); final passwordController = TextEditingController(); + //bool _obscureText = true; //sign user in Future signUserIn() async { @@ -80,7 +82,6 @@ class _SignInState extends State { child: MyTextField( controller: emailController, hintText: 'Email', - obscureText: false, ), ), //spacer @@ -88,10 +89,9 @@ class _SignInState extends State { //password input SizedBox( width: 500.0, - child: MyTextField( + child: MyPassField( controller: passwordController, hintText: 'Password', - obscureText: true, ), ), //spacer diff --git a/database/#ib_16384_0.dblwr b/database/#ib_16384_0.dblwr index 248eb5fb..932ffd01 100644 Binary files a/database/#ib_16384_0.dblwr and b/database/#ib_16384_0.dblwr differ diff --git a/database/#innodb_redo/#ib_redo10 b/database/#innodb_redo/#ib_redo10 index ab23071f..5e3a999e 100644 Binary files a/database/#innodb_redo/#ib_redo10 and b/database/#innodb_redo/#ib_redo10 differ diff --git a/database/binlog.000004 b/database/binlog.000004 new file mode 100644 index 00000000..b18d21d1 Binary files /dev/null and b/database/binlog.000004 differ diff --git a/database/ib_buffer_pool b/database/ib_buffer_pool index 54ad41db..156c21d7 100644 --- a/database/ib_buffer_pool +++ b/database/ib_buffer_pool @@ -1,5 +1,5 @@ -4294967294,471 -4294967278,288 +4294967294,472 +4294967278,293 4294967293,131 4294967293,130 4294967293,129 @@ -141,117 +141,110 @@ 4243767282,0 4243767281,0 4294967293,0 -4294967279,142 4294967279,143 +4294967279,30 4294967279,144 4294967279,145 -4294967279,30 4294967279,31 +4294967279,146 4294967279,32 4294967279,33 -4294967279,146 4294967279,147 +4294967279,34 4294967279,148 4294967279,149 -4294967279,34 4294967279,35 +4294967279,150 4294967279,36 4294967279,37 -4294967279,150 4294967279,151 +4294967279,38 4294967279,152 4294967279,153 -4294967279,38 4294967279,39 -4294967279,40 -4294967279,41 4294967279,154 -4294967279,155 -4294967279,156 +4294967279,40 4294967279,158 +4294967279,41 4294967279,42 +4294967279,156 +4294967279,155 +4294967279,157 4294967279,43 4294967279,44 -4294967279,157 +4294967279,45 4294967279,159 +4294967279,162 4294967279,160 4294967279,161 -4294967279,45 4294967279,46 +4294967279,163 4294967279,47 4294967279,48 -4294967279,162 -4294967279,163 -4294967279,164 -4294967279,165 4294967279,49 4294967279,50 -4294967279,51 -4294967279,52 +4294967279,164 +4294967279,165 4294967279,166 4294967279,167 -4294967279,168 -4294967279,169 +4294967279,51 +4294967279,52 4294967279,53 4294967279,54 +4294967279,168 +4294967279,170 +4294967279,169 +4294967279,171 4294967279,55 4294967279,56 -4294967279,170 -4294967279,171 -4294967279,172 -4294967279,173 4294967279,57 +4294967279,172 4294967279,58 4294967279,59 -4294967279,60 +4294967279,173 4294967279,175 4294967279,176 -4294967279,177 -4294967279,178 +4294967279,60 4294967279,61 +4294967279,177 4294967279,62 +4294967279,178 4294967279,63 -4294967279,64 4294967279,179 +4294967279,64 4294967279,180 4294967279,181 -4294967279,182 4294967279,65 +4294967279,182 4294967279,66 4294967279,67 -4294967279,68 4294967279,183 4294967279,184 +4294967279,68 4294967279,185 -4294967279,186 4294967279,69 4294967279,70 +4294967279,186 4294967279,71 -4294967279,72 4294967279,187 4294967279,188 +4294967279,72 4294967279,189 -4294967279,190 4294967279,73 4294967279,74 +4294967279,190 4294967279,75 -4294967279,76 -4294967279,191 4294967279,192 +4294967279,191 +4294967279,76 4294967279,193 -4294967279,194 4294967279,77 4294967279,78 +4294967279,194 4294967279,79 -4294967279,80 4294967279,195 4294967279,196 -4294967279,197 -4294967279,198 +4294967279,80 4294967279,81 +4294967279,197 4294967279,82 -4294967279,83 -4294967279,84 -4294967279,199 -4294967279,200 -4294967279,201 diff --git a/database/ibdata1 b/database/ibdata1 index 66dd7e2f..68f16d03 100644 Binary files a/database/ibdata1 and b/database/ibdata1 differ diff --git a/database/mysql.ibd b/database/mysql.ibd index 8f32f2a4..4612bcc6 100644 Binary files a/database/mysql.ibd and b/database/mysql.ibd differ diff --git a/database/undo_001 b/database/undo_001 index d84fb8d3..1d6d7823 100644 Binary files a/database/undo_001 and b/database/undo_001 differ diff --git a/database/undo_002 b/database/undo_002 index d5920259..e2eaa8ae 100644 Binary files a/database/undo_002 and b/database/undo_002 differ