import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.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/blocs/guest/guest_bloc.dart'; import 'package:pharmacy_mobile/blocs/guest/guest_event.dart'; import 'package:pharmacy_mobile/widgets/buttonwithprogress_widget.dart'; import 'package:pharmacy_mobile/widgets/glossy_container_widget.dart'; import 'package:pharmacy_mobile/widgets/input_form_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(); late bool _isLoading = false; late double containerHeight = 0.44; Future _signUp() async { final email = _emailController.text; final password = _passwordController.text; final confirmPassword = _confirmPasswordController.text; if (email.isEmpty) { 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; containerHeight = 0.456; }); 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; containerHeight = 0.44; }); } } @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', title: true, ), const Gap(16), Padding( padding: const EdgeInsets.only(left: 32, right: 32), child: GlossyContainerWidget( // height: containerHeight, child: Form( child: Column( children: [ InputFormWidget(label: 'Email', controller: _emailController), const Gap(16), InputFormWidget( label: 'Password', controller: _passwordController, password: true, validator: (value) { if (value == null || value.isEmpty) { showNotification(context, 'Error: Please enter a password', false); } return null; }, ), const Gap(16), InputFormWidget( label: 'Confirm Password', controller: _confirmPasswordController, password: true, onSubmitted: (String? password) { _signUp(); }, ), const Gap(40), ButtonWithProgressWidget( trigger: _isLoading, progressText: 'Registering', buttonText: 'Register', 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, ), ) ], ) ])))); } }