diff --git a/Frontend/patient_manager/lib/Authentication/authCheck.dart b/Frontend/patient_manager/lib/Authentication/authCheck.dart index 52d7e453..caa1c380 100644 --- a/Frontend/patient_manager/lib/Authentication/authCheck.dart +++ b/Frontend/patient_manager/lib/Authentication/authCheck.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:patient_manager/components/signInOrRegister.dart'; import 'package:patient_manager/main.dart'; import 'package:patient_manager/pages/home.dart'; -import 'package:patient_manager/pages/signin.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; class AuthCheck extends StatelessWidget { @@ -14,10 +14,10 @@ class AuthCheck extends StatelessWidget { final user = snapshot.data?.session; if (user == null) { // User not authenticated, show login screen - return SignIn(); + return const SignInOrRegister(); } else { // User authenticated, show home screen - return Home(); + return const Home(); } } diff --git a/Frontend/patient_manager/lib/components/signInOrRegister.dart b/Frontend/patient_manager/lib/components/signInOrRegister.dart new file mode 100644 index 00000000..0ac82ba0 --- /dev/null +++ b/Frontend/patient_manager/lib/components/signInOrRegister.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; +import 'package:patient_manager/pages/register.dart'; +import 'package:patient_manager/pages/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 + Widget build(BuildContext context) { + if (showSignInPage) { + return SignIn(onTap: togglePages); + } else { + return Register(onTap: togglePages); + } + } +} diff --git a/Frontend/patient_manager/lib/pages/register.dart b/Frontend/patient_manager/lib/pages/register.dart new file mode 100644 index 00000000..89486931 --- /dev/null +++ b/Frontend/patient_manager/lib/pages/register.dart @@ -0,0 +1,157 @@ +import 'package:flutter/material.dart'; +import 'package:patient_manager/components/myTextField.dart'; +import 'package:patient_manager/components/mybutton.dart'; +import 'package:patient_manager/main.dart'; +import 'package:supabase_auth_ui/supabase_auth_ui.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(); + + //sign user in + Future signUserIn() async { + try { + final response = await client.auth.signInWithPassword( + email: emailController.text, + password: passwordController.text, + ); + if (response.session != null) { + Navigator.of(context).pushNamed('/homme'); + } + } on AuthException catch (error) { + loginError(error.message); + emailController.clear(); + passwordController.clear(); + } + } + + void loginError(error) { + showDialog( + context: context, + builder: (context) { + return AlertDialog( + title: Text(error), + ); + }, + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + body: SafeArea( + child: Center( + child: SingleChildScrollView( + physics: const BouncingScrollPhysics(), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + //logo + const Icon( + Icons.lock, + size: 100, + color: Colors.blueAccent, + ), + //spacer + const SizedBox(height: 10), + //Heading + const Text( + 'Register', + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: Colors.blueAccent, + ), + ), + //spacer + const SizedBox(height: 25), + //email input + SizedBox( + width: 500.0, + child: MyTextField( + controller: emailController, + hintText: 'Email', + obscureText: false, + ), + ), + //spacer + const SizedBox(height: 25), + //password input + SizedBox( + width: 500.0, + child: MyTextField( + controller: passwordController, + hintText: 'Password', + obscureText: true, + ), + ), + //spacer + const SizedBox(height: 10), + // forgot password + const Padding( + padding: EdgeInsets.symmetric(horizontal: 25.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text( + 'Forgot Password?', + style: TextStyle( + color: Colors.white, + ), + ), + ], + ), + ), + //spacer + const SizedBox(height: 50), + // sign in button + SizedBox( + width: 500.0, + child: MyButton( + onTap: signUserIn, + buttonText: "Sign Up", + ), + ), + //spacer + const SizedBox(height: 30), + //register text + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'Already a User?', + style: TextStyle(fontSize: 18, color: Colors.grey), + ), + const SizedBox( + width: 6, + ), + GestureDetector( + onTap: widget.onTap, + child: const Text( + 'Sign In', + style: TextStyle( + fontSize: 18, + color: Colors.blueAccent, + fontWeight: FontWeight.bold, + ), + ), + ) + ], + ) + ], + ), + ), + ), + ), + ); + } +} diff --git a/Frontend/patient_manager/lib/pages/signin.dart b/Frontend/patient_manager/lib/pages/signin.dart index a9e2da4c..b3b9ed74 100644 --- a/Frontend/patient_manager/lib/pages/signin.dart +++ b/Frontend/patient_manager/lib/pages/signin.dart @@ -5,7 +5,8 @@ import 'package:patient_manager/main.dart'; import 'package:supabase_auth_ui/supabase_auth_ui.dart'; class SignIn extends StatefulWidget { - const SignIn({super.key}); + final Function()? onTap; + const SignIn({super.key, required this.onTap}); @override State createState() => _SignInState(); @@ -134,12 +135,13 @@ class _SignInState extends State { width: 6, ), GestureDetector( - onTap: () {}, + onTap: widget.onTap, child: const Text( 'Register Now', style: TextStyle( fontSize: 18, color: Colors.blueAccent, + fontWeight: FontWeight.bold, ), ), ) diff --git a/Frontend/patient_manager/lib/router/routeGenerator.dart b/Frontend/patient_manager/lib/router/routeGenerator.dart index df53ba05..f8be8f06 100644 --- a/Frontend/patient_manager/lib/router/routeGenerator.dart +++ b/Frontend/patient_manager/lib/router/routeGenerator.dart @@ -1,6 +1,7 @@ // ignore: file_names import 'package:flutter/material.dart'; import 'package:patient_manager/Authentication/authCheck.dart'; +import 'package:patient_manager/components/signInOrRegister.dart'; import 'package:patient_manager/pages/home.dart'; import 'package:patient_manager/pages/signin.dart'; @@ -13,8 +14,8 @@ class RouteGenerator { return MaterialPageRoute(builder: (_) => AuthCheck()); case '/home': return MaterialPageRoute(builder: (_) => const Home()); - case '/signin': - return MaterialPageRoute(builder: (_) => const SignIn()); + // case '/signin': + // return MaterialPageRoute(builder: (_) => const SignInOrRegister()); // //case '/signIn': // // return MaterialPageRoute(builder: (_) => SignIn()); // case '/auth':