import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:internet_connection_checker/internet_connection_checker.dart'; import 'package:pharmacy_mobile/auth/auth_service.dart'; import 'package:pharmacy_mobile/widgets/button_widget.dart'; import 'package:pharmacy_mobile/widgets/input_widget.dart'; import 'package:pharmacy_mobile/widgets/logo_widget.dart'; import 'package:pharmacy_mobile/widgets/page_background_widget.dart'; import 'package:pharmacy_mobile/widgets/snackbar_widget.dart'; import 'package:pharmacy_mobile/widgets/text_widget.dart'; import 'package:pharmacy_mobile/widgets/title_widget.dart'; import 'package:go_router/go_router.dart'; class RegisterPage extends StatefulWidget { const RegisterPage({super.key}); @override State createState() => _RegisterPageState(); } class _RegisterPageState extends State { final _authService = AuthService(); final _emailController = TextEditingController(); final _passwordController = TextEditingController(); final _confirmPasswordController = TextEditingController(); final FocusNode _focusNode = FocusNode(); bool _isLoading = false; Future _signUp() async { final email = _emailController.text; final password = _passwordController.text; final confirmPassword = _confirmPasswordController.text; if (email.isEmpty) { log('message'); if (mounted) { showNotification(context, 'Error: Please enter a valid email', false); } return; } if (password.isEmpty) { if (mounted) { showNotification(context, 'Error: Please enter a password', false); } return; } if (confirmPassword.isEmpty) { if (mounted) { showNotification(context, 'Error: Please confirm password', false); } return; } if (password != confirmPassword) { showNotification(context, 'Password does not match!', false); return; } setState(() => _isLoading = true); try { if (await InternetConnectionChecker.instance.hasConnection) { await _authService.signUp(email, password); if (mounted) { showNotification(context, 'Registration Successful', true); WidgetsBinding.instance.addPostFrameCallback((_) { if (mounted) { context.push('/login'); } }); } } else { if (mounted) { showNotification(context, 'Error: No Internet Connection', false); } } } catch (e) { if (mounted) { showNotification(context, 'Error: $e', false); } } finally { setState(() => _isLoading = false); } } @override void dispose() { _emailController.dispose(); _passwordController.dispose(); _confirmPasswordController.dispose(); _focusNode.dispose(); _isLoading = false; super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: PageBackgroundWidget( page: 'register', child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.start, children: [ const Gap(96), const TitleWidget( firstTextSize: 14, secondTextSize: 24, logoSize: 90, ), const Gap(32), const TextWidget(text: 'Register'), const Gap(16), Padding( padding: const EdgeInsets.only(left: 32, right: 32), child: Container( padding: EdgeInsets.fromLTRB(32, 32, 32, 40), decoration: BoxDecoration( color: const Color.fromRGBO(57, 38, 62, 0.6), borderRadius: BorderRadius.all(Radius.circular(16)), boxShadow: [ BoxShadow( color: const Color.fromRGBO(0, 0, 0, 0.2), // Subtle shadow to give depth spreadRadius: 0, blurRadius: 4, offset: Offset(0, 2), ) ]), child: Form( child: Column( children: [ InputWidget(label: 'Email', controller: _emailController), const Gap(16), InputWidget( label: 'Password', controller: _passwordController, password: true, ), const Gap(16), InputWidget( label: 'Confirm Password', controller: _confirmPasswordController, password: true, ), const Gap(40), // TextButton(onPressed: () => {_signIn()}, child: const Text('Login')) if (_isLoading) Center(child: CircularProgressIndicator(color: Colors.white)) else ButtonWidget(text: 'Create Account', onPressed: _signUp) ], )), ), ), const Gap(16), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ const TextWidget( text: "Already have an account?", size: 14, ), const Gap(8), GestureDetector( onTap: () => {context.push('/login')}, child: const TextWidget( text: 'Login here', size: 14, underlined: true, ), ) ], ) ], ), )), ); } }