import 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart'; import '../components/my_button.dart'; import '../components/my_textfield.dart'; import '../utils/helper_dialogs.dart'; import '../services/auth/auth_service.dart'; import '../services/user_service.dart'; class RegisterPage extends StatelessWidget { final TextEditingController _nameController = TextEditingController(); final TextEditingController _lastnameController = TextEditingController(); final TextEditingController _emailController = TextEditingController(); final TextEditingController _passwordController = TextEditingController(); final TextEditingController _confirmPassController = TextEditingController(); // tap to go to login page final void Function()? onTap; RegisterPage({super.key, required this.onTap}); // register method Future register(BuildContext context) async { final auth = AuthService(); // check if passwords match if (_passwordController.text == _confirmPassController.text) { try { await auth .signUpWithEmailPassword( _emailController.text, _passwordController.text) .then((userCredential) { UserService.saveUserRegistrationData( userCredential, _emailController.text, _nameController.text, _lastnameController.text); }); } on FirebaseAuthException catch (e) { if (context.mounted) { showMsg( context, e.code.isNotEmpty ? e.code : 'Registration error', '${e.message}', ); } } } else { showMsg(context, 'Registration error', 'Passwords do not match!'); } } bool _validateFields(BuildContext context) { if ((_nameController.text.trim().isEmpty && _lastnameController.text.trim().isEmpty) || _emailController.text.trim().isEmpty || _passwordController.text.trim().isEmpty) { showMsg( context, 'Missing information', 'Please enter your name, email and password', ); return false; } return true; } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Theme.of(context).colorScheme.surface, body: SafeArea( child: Center( child: SingleChildScrollView( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const SizedBox(height: 25), // logo and register message Icon( Icons.people_alt, size: 60, color: Theme.of(context).colorScheme.primary, ), const SizedBox(height: 16), Padding( padding: const EdgeInsets.symmetric(horizontal: 25.0), child: Text( textAlign: TextAlign.center, 'Create an account ' 'and start connecting with potential co-founders.', style: TextStyle( color: Theme.of(context).colorScheme.primary, fontSize: 16, ), ), ), const SizedBox(height: 25), // text fields MyTextField( hintText: 'First Name', obscureText: false, controller: _nameController, ), MyTextField( hintText: 'Last Name', obscureText: false, controller: _lastnameController, ), MyTextField( hintText: 'E-Mail', obscureText: false, controller: _emailController, ), MyTextField( hintText: 'Password', obscureText: true, controller: _passwordController, ), MyTextField( hintText: 'Confirm Password', obscureText: true, controller: _confirmPassController, ), const SizedBox(height: 25), // register button MyButton( text: 'Register', onTap: () => { if (_validateFields(context)) {register(context)} }, ), const SizedBox(height: 25), // register now Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'Already have an account? ', style: TextStyle( color: Theme.of(context).colorScheme.primary, ), ), GestureDetector( onTap: onTap, child: const Text( 'Login now', style: TextStyle( fontWeight: FontWeight.bold, ), ), ), ], ) ], ), ), ), ), ); } }