firebase esta feita acabar o register
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:playmaker/Controllers/login_controller.dart';
|
||||
import 'package:playmaker/pages/RegisterPage.dart';
|
||||
|
||||
class BasketTrackHeader extends StatelessWidget {
|
||||
const BasketTrackHeader({super.key});
|
||||
@@ -54,121 +55,47 @@
|
||||
|
||||
const LoginFormFields({super.key, required this.controller});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final screenWidth = MediaQuery.of(context).size.width;
|
||||
|
||||
// TAMANHOS AUMENTADOS
|
||||
final verticalPadding = screenWidth > 600 ? 26.0 : 20.0; // ↑ Aumentado
|
||||
final spacing = screenWidth > 600 ? 28.0 : 20.0; // ↑ Aumentado
|
||||
final labelFontSize = screenWidth > 600 ? 18.0 : 16.0; // ↑ Aumentado
|
||||
final textFontSize = screenWidth > 600 ? 18.0 : 16.0; // ↑ Aumentado
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final screenWidth = MediaQuery.of(context).size.width;
|
||||
final verticalPadding = screenWidth > 600 ? 22.0 : 16.0;
|
||||
|
||||
return Column(
|
||||
children: [
|
||||
TextField(
|
||||
controller: controller.emailController,
|
||||
style: TextStyle(fontSize: textFontSize), // ↑ Tamanho do texto
|
||||
decoration: InputDecoration(
|
||||
labelText: 'E-mail',
|
||||
labelStyle: TextStyle(fontSize: labelFontSize), // ↑ Tamanho do label
|
||||
prefixIcon: Icon(Icons.email_outlined, size: 24), // ↑ Ícone maior
|
||||
errorText: controller.emailError,
|
||||
errorStyle: TextStyle(fontSize: 14), // ↑ Tamanho do erro
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: BorderSide(color: Colors.grey[400]!),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: BorderSide(color: Colors.grey[400]!),
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: const BorderSide(color: Color(0xFFE74C3C), width: 2),
|
||||
),
|
||||
contentPadding: EdgeInsets.symmetric(
|
||||
horizontal: 18, // ↑ Aumentado
|
||||
vertical: verticalPadding,
|
||||
),
|
||||
),
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
onChanged: (_) {
|
||||
if (controller.emailError != null) {
|
||||
controller.validateEmail(controller.emailController.text);
|
||||
}
|
||||
},
|
||||
return Column(
|
||||
children: [
|
||||
TextField(
|
||||
controller: controller.emailController,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'E-mail',
|
||||
prefixIcon: const Icon(Icons.email_outlined),
|
||||
// O erro agora vem diretamente do controller
|
||||
errorText: controller.emailError,
|
||||
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12)),
|
||||
contentPadding: EdgeInsets.symmetric(vertical: verticalPadding, horizontal: 16),
|
||||
),
|
||||
SizedBox(height: spacing),
|
||||
|
||||
TextField(
|
||||
controller: controller.passwordController,
|
||||
style: TextStyle(fontSize: textFontSize), // ↑ Tamanho do texto
|
||||
decoration: InputDecoration(
|
||||
labelText: 'Palavra-passe',
|
||||
labelStyle: TextStyle(fontSize: labelFontSize), // ↑ Tamanho do label
|
||||
prefixIcon: Icon(Icons.lock_outlined, size: 24), // ↑ Ícone maior
|
||||
suffixIcon: IconButton(
|
||||
icon: Icon(
|
||||
controller.obscurePassword
|
||||
? Icons.visibility_outlined
|
||||
: Icons.visibility_off_outlined,
|
||||
color: Colors.grey[600],
|
||||
size: 24, // ↑ Ícone maior
|
||||
),
|
||||
onPressed: controller.togglePasswordVisibility,
|
||||
),
|
||||
errorText: controller.passwordError,
|
||||
errorStyle: TextStyle(fontSize: 14), // ↑ Tamanho do erro
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: BorderSide(color: Colors.grey[400]!),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: BorderSide(color: Colors.grey[400]!),
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(12),
|
||||
borderSide: const BorderSide(color: Color(0xFFE74C3C), width: 2),
|
||||
),
|
||||
contentPadding: EdgeInsets.symmetric(
|
||||
horizontal: 18, // ↑ Aumentado
|
||||
vertical: verticalPadding,
|
||||
),
|
||||
keyboardType: TextInputType.emailAddress,
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
TextField(
|
||||
controller: controller.passwordController,
|
||||
obscureText: controller.obscurePassword,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'Palavra-passe',
|
||||
prefixIcon: const Icon(Icons.lock_outlined),
|
||||
errorText: controller.passwordError,
|
||||
suffixIcon: IconButton(
|
||||
icon: Icon(controller.obscurePassword
|
||||
? Icons.visibility_outlined
|
||||
: Icons.visibility_off_outlined),
|
||||
onPressed: controller.togglePasswordVisibility,
|
||||
),
|
||||
obscureText: controller.obscurePassword,
|
||||
onChanged: (_) {
|
||||
if (controller.passwordError != null) {
|
||||
controller.validatePassword(controller.passwordController.text);
|
||||
}
|
||||
},
|
||||
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12)),
|
||||
contentPadding: EdgeInsets.symmetric(vertical: verticalPadding, horizontal: 16),
|
||||
),
|
||||
SizedBox(height: screenWidth > 600 ? 20.0 : 14.0), // ↑ Aumentado
|
||||
|
||||
Align(
|
||||
alignment: Alignment.centerRight,
|
||||
child: TextButton(
|
||||
onPressed: () {},
|
||||
style: TextButton.styleFrom(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8), // ↑ Mais espaço
|
||||
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
|
||||
),
|
||||
child: Text(
|
||||
'Recuperar Palavra-passe',
|
||||
style: TextStyle(
|
||||
fontSize: screenWidth > 600 ? 18.0 : 15.0, // ↑ Aumentado
|
||||
color: const Color(0xFFE74C3C),
|
||||
fontWeight: FontWeight.w600, // ↑ Mais negrito
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
class LoginButton extends StatelessWidget {
|
||||
final LoginController controller;
|
||||
final VoidCallback onLoginSuccess;
|
||||
@@ -226,37 +153,42 @@
|
||||
}
|
||||
}
|
||||
|
||||
class CreateAccountButton extends StatelessWidget {
|
||||
const CreateAccountButton({super.key});
|
||||
class CreateAccountButton extends StatelessWidget {
|
||||
const CreateAccountButton({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final screenWidth = MediaQuery.of(context).size.width;
|
||||
|
||||
// BOTÃO MAIOR
|
||||
final buttonHeight = screenWidth > 600 ? 70.0 : 58.0; // ↑ Aumentado
|
||||
final fontSize = screenWidth > 600 ? 22.0 : 18.0; // ↑ Aumentado
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final screenWidth = MediaQuery.of(context).size.width;
|
||||
final buttonHeight = screenWidth > 600 ? 70.0 : 58.0;
|
||||
final fontSize = screenWidth > 600 ? 22.0 : 18.0;
|
||||
|
||||
return SizedBox(
|
||||
width: double.infinity,
|
||||
height: buttonHeight,
|
||||
child: OutlinedButton(
|
||||
onPressed: () {},
|
||||
style: OutlinedButton.styleFrom(
|
||||
foregroundColor: const Color(0xFFE74C3C),
|
||||
side: const BorderSide(color: Color(0xFFE74C3C), width: 2), // ↑ Borda mais grossa
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(14), // ↑ Bordas mais arredondadas
|
||||
),
|
||||
),
|
||||
child: Text(
|
||||
'Criar Conta',
|
||||
style: TextStyle(
|
||||
fontSize: fontSize,
|
||||
fontWeight: FontWeight.w700, // ↑ Mais negrito
|
||||
),
|
||||
return SizedBox(
|
||||
width: double.infinity,
|
||||
height: buttonHeight,
|
||||
child: OutlinedButton(
|
||||
onPressed: () {
|
||||
// Navega para a página de registo que criaste
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) => const RegisterPage()),
|
||||
);
|
||||
},
|
||||
style: OutlinedButton.styleFrom(
|
||||
foregroundColor: const Color(0xFFE74C3C),
|
||||
side: const BorderSide(color: Color(0xFFE74C3C), width: 2),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(14),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
child: Text(
|
||||
'Criar Conta',
|
||||
style: TextStyle(
|
||||
fontSize: fontSize,
|
||||
fontWeight: FontWeight.w700,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
53
lib/widgets/register_widgets.dart
Normal file
53
lib/widgets/register_widgets.dart
Normal file
@@ -0,0 +1,53 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:playmaker/controllers/register_controller.dart';
|
||||
|
||||
class RegisterFormFields extends StatelessWidget {
|
||||
final RegisterController controller;
|
||||
|
||||
const RegisterFormFields({super.key, required this.controller});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final verticalPadding = MediaQuery.of(context).size.width > 600 ? 22.0 : 16.0;
|
||||
|
||||
return Column(
|
||||
children: [
|
||||
// Campo Email
|
||||
TextField(
|
||||
controller: controller.emailController,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'E-mail',
|
||||
prefixIcon: const Icon(Icons.email_outlined),
|
||||
errorText: controller.emailError,
|
||||
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12)),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
// Campo Password
|
||||
TextField(
|
||||
controller: controller.passwordController,
|
||||
obscureText: true,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'Palavra-passe',
|
||||
prefixIcon: const Icon(Icons.lock_outlined),
|
||||
errorText: controller.passwordError,
|
||||
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12)),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
// NOVO: Campo Confirmar Password
|
||||
TextField(
|
||||
controller: controller.confirmPasswordController,
|
||||
obscureText: true,
|
||||
decoration: InputDecoration(
|
||||
labelText: 'Confirmar Palavra-passe',
|
||||
prefixIcon: const Icon(Icons.lock_clock_outlined),
|
||||
errorText: controller.confirmPasswordError, // Erro específico
|
||||
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12)),
|
||||
contentPadding: EdgeInsets.symmetric(vertical: verticalPadding, horizontal: 16),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user