|
@@ -0,0 +1,160 @@
|
|
|
|
+import 'dart:convert';
|
|
|
|
+import 'package:flutter/material.dart';
|
|
|
|
+import 'package:http/http.dart' as http;
|
|
|
|
+
|
|
|
|
+class AuthService {
|
|
|
|
+ Future<bool> isUserLoggedIn() async {
|
|
|
|
+ try {
|
|
|
|
+ var url = Uri.http('127.0.0.1:3001', 'is_logged_in');
|
|
|
|
+ var response = await http.get(url);
|
|
|
|
+ print(response.body);
|
|
|
|
+ if (response.statusCode == 200) {
|
|
|
|
+ print('all good in the east!');
|
|
|
|
+ List json = jsonDecode(response.body);
|
|
|
|
+ print(json[0]);
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ } catch (e) {
|
|
|
|
+ print(e);
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+class LoginPage extends StatefulWidget {
|
|
|
|
+ const LoginPage({super.key});
|
|
|
|
+
|
|
|
|
+ @override
|
|
|
|
+ _LoginPageState createState() => _LoginPageState();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+class _LoginPageState extends State<LoginPage> {
|
|
|
|
+ final AuthService _authService = AuthService();
|
|
|
|
+ // Controllers for capturing user input
|
|
|
|
+ final TextEditingController _emailController = TextEditingController();
|
|
|
|
+ final TextEditingController _passwordController = TextEditingController();
|
|
|
|
+
|
|
|
|
+ // Key to identify the form
|
|
|
|
+ final _formKey = GlobalKey<FormState>();
|
|
|
|
+
|
|
|
|
+ void checkLogin() async {
|
|
|
|
+ // try {
|
|
|
|
+ // var url = Uri.http('127.0.0.1:3001', 'is_logged_in');
|
|
|
|
+ // var response = await http.get(url);
|
|
|
|
+ // print(response.body);
|
|
|
|
+ // if (response.statusCode == 200) {
|
|
|
|
+ // print('all good on the west');
|
|
|
|
+ // }
|
|
|
|
+ // } catch (e) {
|
|
|
|
+ // print(e);
|
|
|
|
+ // }
|
|
|
|
+ bool isLoggedIn = await _authService.isUserLoggedIn();
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Function to handle login action
|
|
|
|
+ void _handleLogin() {
|
|
|
|
+ if (_formKey.currentState!.validate()) {
|
|
|
|
+ // Perform login action (e.g., authenticate with backend)
|
|
|
|
+ String email = _emailController.text;
|
|
|
|
+ String password = _passwordController.text;
|
|
|
|
+
|
|
|
|
+ // For demonstration, just print the values
|
|
|
|
+ print('Email: $email');
|
|
|
|
+ print('Password: $password');
|
|
|
|
+
|
|
|
|
+ // Clear the input fields
|
|
|
|
+ _emailController.clear();
|
|
|
|
+ _passwordController.clear();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @override
|
|
|
|
+ Widget build(BuildContext context) {
|
|
|
|
+ return Scaffold(
|
|
|
|
+ appBar: AppBar(
|
|
|
|
+ title: const Text('Login Page'),
|
|
|
|
+ ),
|
|
|
|
+ body: Padding(
|
|
|
|
+ padding: const EdgeInsets.all(16.0),
|
|
|
|
+ child: Form(
|
|
|
|
+ key: _formKey,
|
|
|
|
+ child: Align(
|
|
|
|
+ alignment: Alignment.centerLeft,
|
|
|
|
+ child: Column(
|
|
|
|
+ mainAxisSize: MainAxisSize.min,
|
|
|
|
+ crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
+ children: [
|
|
|
|
+ Text('Sign in to your email'),
|
|
|
|
+ SizedBox(
|
|
|
|
+ height: 5,
|
|
|
|
+ ),
|
|
|
|
+ // Email Field
|
|
|
|
+ Container(
|
|
|
|
+ width: 200,
|
|
|
|
+ child: TextFormField(
|
|
|
|
+ controller: _emailController,
|
|
|
|
+ decoration: const InputDecoration(
|
|
|
|
+ labelText: 'Email',
|
|
|
|
+ hintText: 'Enter your email',
|
|
|
|
+ helperMaxLines: 1,
|
|
|
|
+ ),
|
|
|
|
+ validator: (value) {
|
|
|
|
+ // Simple email validation
|
|
|
|
+ if (value == null || value.isEmpty) {
|
|
|
|
+ return 'Please enter your email';
|
|
|
|
+ }
|
|
|
|
+ if (!RegExp(r'^\S+@\S+\.\S+$').hasMatch(value)) {
|
|
|
|
+ return 'Please enter a valid email address';
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ },
|
|
|
|
+ ),
|
|
|
|
+ ),
|
|
|
|
+ const SizedBox(height: 16.0),
|
|
|
|
+ // Password Field
|
|
|
|
+ Container(
|
|
|
|
+ width: 200,
|
|
|
|
+ child: TextFormField(
|
|
|
|
+ controller: _passwordController,
|
|
|
|
+ decoration: const InputDecoration(
|
|
|
|
+ labelText: 'Password',
|
|
|
|
+ hintText: 'Enter your password',
|
|
|
|
+ ),
|
|
|
|
+ obscureText: true, // Hide the password text
|
|
|
|
+ validator: (value) {
|
|
|
|
+ // Simple password validation
|
|
|
|
+ if (value == null || value.isEmpty) {
|
|
|
|
+ return 'Please enter your password';
|
|
|
|
+ }
|
|
|
|
+ if (value.length < 6) {
|
|
|
|
+ return 'Password must be at least 6 characters long';
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ },
|
|
|
|
+ ),
|
|
|
|
+ ),
|
|
|
|
+ const SizedBox(height: 32.0),
|
|
|
|
+ // Login Button
|
|
|
|
+ SizedBox(
|
|
|
|
+ width: 200,
|
|
|
|
+ child: ElevatedButton(
|
|
|
|
+ onPressed: _handleLogin,
|
|
|
|
+ child: const Text('Login'),
|
|
|
|
+ ),
|
|
|
|
+ ),
|
|
|
|
+ SizedBox(
|
|
|
|
+ width: 200,
|
|
|
|
+ child: ElevatedButton(
|
|
|
|
+ onPressed: checkLogin,
|
|
|
|
+ child: const Text('checker'),
|
|
|
|
+ ),
|
|
|
|
+ )
|
|
|
|
+ ],
|
|
|
|
+ ),
|
|
|
|
+ ),
|
|
|
|
+ ),
|
|
|
|
+ ),
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+}
|