Added: signup screen, routing logic for login,signup
This commit is contained in:
		@@ -1,6 +1,10 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'signup.dart';
 | 
			
		||||
 | 
			
		||||
class LoginScreen extends StatefulWidget {
 | 
			
		||||
  final VoidCallback onSwitchToSignup;
 | 
			
		||||
  const LoginScreen({required this.onSwitchToSignup, super.key});
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  State<LoginScreen> createState() => _LoginScreenState();
 | 
			
		||||
}
 | 
			
		||||
@@ -25,7 +29,7 @@ class _LoginScreenState extends State<LoginScreen> {
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      appBar: AppBar(title: Text('User Login')),
 | 
			
		||||
      //appBar: AppBar(title: Text('User Login')),
 | 
			
		||||
      body: Padding(
 | 
			
		||||
        padding: const EdgeInsets.all(24.0),
 | 
			
		||||
        child: Form(
 | 
			
		||||
@@ -87,6 +91,11 @@ class _LoginScreenState extends State<LoginScreen> {
 | 
			
		||||
                      padding: EdgeInsets.symmetric(horizontal: 32, vertical: 12),
 | 
			
		||||
                    ),
 | 
			
		||||
                  ),
 | 
			
		||||
                  const SizedBox(height: 12),
 | 
			
		||||
                  TextButton(
 | 
			
		||||
                    onPressed: widget.onSwitchToSignup,
 | 
			
		||||
                    child: Text("Don't have an account? Sign up"),
 | 
			
		||||
                  ),
 | 
			
		||||
                ],
 | 
			
		||||
              ),
 | 
			
		||||
            ),
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										119
									
								
								lib/screens/signup.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								lib/screens/signup.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,119 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
class SignupScreen extends StatefulWidget {
 | 
			
		||||
  final VoidCallback onSwitchToLogin;
 | 
			
		||||
  const SignupScreen({required this.onSwitchToLogin, super.key});
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  State<SignupScreen> createState() => _SignupScreenState();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class _SignupScreenState extends State<SignupScreen> {
 | 
			
		||||
  final _formKey = GlobalKey<FormState>();
 | 
			
		||||
  final _usernameController = TextEditingController();
 | 
			
		||||
  final _emailController = TextEditingController();
 | 
			
		||||
  final _passwordController = TextEditingController();
 | 
			
		||||
 | 
			
		||||
  void _signup() {
 | 
			
		||||
    if (_formKey.currentState!.validate()) {
 | 
			
		||||
      final username = _usernameController.text;
 | 
			
		||||
      final email = _emailController.text;
 | 
			
		||||
      final password = _passwordController.text;
 | 
			
		||||
      // TODO: Replace with actual signup logic
 | 
			
		||||
      print('Signing up with $username, $email, $password');
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return Scaffold(
 | 
			
		||||
      //appBar: AppBar(title: Text('Sign Up')),
 | 
			
		||||
      body: Padding(
 | 
			
		||||
        padding: const EdgeInsets.all(24.0),
 | 
			
		||||
        child: Form(
 | 
			
		||||
          key: _formKey,
 | 
			
		||||
          child: Center(
 | 
			
		||||
            child: SingleChildScrollView(
 | 
			
		||||
              child: Column(
 | 
			
		||||
                children: [
 | 
			
		||||
                  Text(
 | 
			
		||||
                    'Create your Fuel Stats account',
 | 
			
		||||
                    style: TextStyle(
 | 
			
		||||
                      fontSize: 24,
 | 
			
		||||
                      fontWeight: FontWeight.bold,
 | 
			
		||||
                    ),
 | 
			
		||||
                  ),
 | 
			
		||||
                  const SizedBox(height: 32),
 | 
			
		||||
                  TextFormField(
 | 
			
		||||
                    controller: _usernameController,
 | 
			
		||||
                    decoration: InputDecoration(
 | 
			
		||||
                      labelText: 'Username',
 | 
			
		||||
                      prefixIcon: Icon(Icons.person),
 | 
			
		||||
                      border: OutlineInputBorder(),
 | 
			
		||||
                    ),
 | 
			
		||||
                    validator: (value) {
 | 
			
		||||
                      if (value == null || value.isEmpty)
 | 
			
		||||
                        return 'Please enter a username';
 | 
			
		||||
                      return null;
 | 
			
		||||
                    },
 | 
			
		||||
                  ),
 | 
			
		||||
                  const SizedBox(height: 16),
 | 
			
		||||
                  TextFormField(
 | 
			
		||||
                    controller: _emailController,
 | 
			
		||||
                    decoration: InputDecoration(
 | 
			
		||||
                      labelText: 'Email',
 | 
			
		||||
                      prefixIcon: Icon(Icons.email),
 | 
			
		||||
                      border: OutlineInputBorder(),
 | 
			
		||||
                    ),
 | 
			
		||||
                    keyboardType: TextInputType.emailAddress,
 | 
			
		||||
                    validator: (value) {
 | 
			
		||||
                      if (value == null || value.isEmpty)
 | 
			
		||||
                        return 'Please enter an email';
 | 
			
		||||
                      if (!RegExp(r'^[^@]+@[^@]+\.[^@]+').hasMatch(value))
 | 
			
		||||
                        return 'Enter a valid email';
 | 
			
		||||
                      return null;
 | 
			
		||||
                    },
 | 
			
		||||
                  ),
 | 
			
		||||
                  const SizedBox(height: 16),
 | 
			
		||||
                  TextFormField(
 | 
			
		||||
                    controller: _passwordController,
 | 
			
		||||
                    decoration: InputDecoration(
 | 
			
		||||
                      labelText: 'Password',
 | 
			
		||||
                      prefixIcon: Icon(Icons.lock),
 | 
			
		||||
                      border: OutlineInputBorder(),
 | 
			
		||||
                    ),
 | 
			
		||||
                    obscureText: true,
 | 
			
		||||
                    validator: (value) {
 | 
			
		||||
                      if (value == null || value.isEmpty)
 | 
			
		||||
                        return 'Please enter a password';
 | 
			
		||||
                      if (value.length < 6)
 | 
			
		||||
                        return 'Password must be at least 6 characters';
 | 
			
		||||
                      return null;
 | 
			
		||||
                    },
 | 
			
		||||
                  ),
 | 
			
		||||
                  const SizedBox(height: 24),
 | 
			
		||||
                  ElevatedButton.icon(
 | 
			
		||||
                    onPressed: _signup,
 | 
			
		||||
                    icon: Icon(Icons.person_add),
 | 
			
		||||
                    label: Text('Sign Up'),
 | 
			
		||||
                    style: ElevatedButton.styleFrom(
 | 
			
		||||
                      backgroundColor: Colors.blue,
 | 
			
		||||
                      foregroundColor: Colors.white,
 | 
			
		||||
                      padding: EdgeInsets.symmetric(horizontal: 32, vertical: 12),
 | 
			
		||||
                    ),
 | 
			
		||||
                  ),
 | 
			
		||||
                  const SizedBox(height: 12),
 | 
			
		||||
                  TextButton(
 | 
			
		||||
                    onPressed: widget.onSwitchToLogin,
 | 
			
		||||
                    child: Text("Already have an account? Log in"),
 | 
			
		||||
                  ),
 | 
			
		||||
                ],
 | 
			
		||||
              ),
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user