How to develop the login screen of the flutter app
By Webotapp Academy•
<!-- wp:paragraph -->\n<p><strong>At first make the php API</strong></p>\n<!-- /wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code><?php\ninclude('cors.php'); // Include CORS headers if needed\ninclude('../database.php'); // Include your database connection\n\nheader('Content-Type: application/json');\n\n// Initialize an empty response array.\n$response = array();\n\ntry {\n // Check if the request is a POST request.\n if ($_SERVER['REQUEST_METHOD'] === 'POST') {\n // Get data from the POST request.\n $user_email = $_POST['user_email'];\n $user_password = $_POST['user_password'];\n\n // Validate input data\n if (empty($user_email) || empty($user_password)) {\n throw new Exception(\"All fields are required.\");\n }\n\n // Create a SQL query to check if the user exists.\n $sql = \"SELECT * FROM users WHERE user_email = :user_email\";\n $stmt = $conn->prepare($sql);\n $stmt->bindParam(':user_email', $user_email);\n $stmt->execute();\n\n $user = $stmt->fetch(PDO::FETCH_ASSOC);\n\n // Verify user's password\n if ($user && password_verify($user_password, $user['user_password'])) {\n $response['success'] = true;\n $response['message'] = \"Login successful.\";\n // You can include additional data like user ID, name, etc. in the response if needed.\n } else {\n throw new Exception(\"Invalid email or password.\");\n }\n } else {\n throw new Exception(\"Invalid request method.\");\n }\n} catch (Exception $e) {\n $response['success'] = false;\n $response['message'] = $e->getMessage();\n}\n\n// Output the response as JSON.\necho json_encode($response);\n?>\n</code></pre>\n<!-- /wp:code -->\n\n<!-- wp:paragraph -->\n<p>Now lets come to flutter app.</p>\n<!-- /wp:paragraph -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3 class=\"wp-block-heading\">Step 1: Create a Screen</h3>\n<!-- /wp:heading -->\n\n<!-- wp:paragraph -->\n<p>We start by creating a new Flutter screen. In this case, it's a login screen.</p>\n<!-- /wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>import 'package:flutter/material.dart';\n\nclass LoginScreen extends StatefulWidget {\n const LoginScreen({Key? key}) : super(key: key);\n\n @override\n State<LoginScreen> createState() => _LoginScreenState();\n}\n\nclass _LoginScreenState extends State<LoginScreen> {\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n title: Text('Login'),\n ),\n body: Container(\n // You can design your UI here\n ),\n );\n }\n}\n</code></pre>\n<!-- /wp:code -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3 class=\"wp-block-heading\">Step 2: Design the Form Fields</h3>\n<!-- /wp:heading -->\n\n<!-- wp:paragraph -->\n<p>Now, let's add the form fields for email, password, and a remember me checkbox.</p>\n<!-- /wp:paragraph -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>body: Padding(\n padding: const EdgeInsets.all(16.0),\n child: Column(\n mainAxisAlignment: MainAxisAlignment.center,\n crossAxisAlignment: CrossAxisAlignment.stretch,\n children: [\n TextField(\n decoration: InputDecoration(labelText: 'Email'),\n ),\n SizedBox(height: 8),\n TextField(\n decoration: InputDecoration(labelText: 'Password'),\n obscureText: true,\n ),\n Row(\n children: [\n Checkbox(\n value: false, // Remember me initial state\n onChanged: (value) {\n // Handle remember me checkbox state change\n },\n ),\n Text('Remember me'),\n ],\n ),\n SizedBox(height: 16),\n ElevatedButton(\n onPressed: () {\n // Handle login button press\n },\n child: Text('Login'),\n ),\n ],\n ),\n),\n</code></pre>\n<!-- /wp:code -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3 class=\"wp-block-heading\">Step 3: Implement Login Functionality</h3>\n<!-- /wp:heading -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>Future<void> _loginUser() async {\n String apiUrl = 'https://aboutassam.in/flutter_app/api/login.php';\n try {\n var response = await http.post(Uri.parse(apiUrl), body: {\n 'user_email': _emailController.text,\n 'user_password': _passwordController.text,\n });\n\n var responseData = json.decode(response.body);\n if (responseData['success']) {\n // Login successful, save credentials if remember me is checked\n if (_rememberMe) {\n _saveCredentials();\n }\n // Handle navigation or any other action\n print('Login successful');\n } else {\n // Login failed, show error message\n print('Login failed: ${responseData['message']}');\n }\n } catch (e) {\n print('Error logging in: $e');\n }\n}\n\n\n\n</code></pre>\n<!-- /wp:code -->\n\n<!-- wp:heading {\"level\":3} -->\n<h3 class=\"wp-block-heading\">Step 4: Import all neccessary plugins and implement SharedPreferences </h3>\n<!-- /wp:heading -->\n\n<!-- wp:code -->\n<pre class=\"wp-block-code\"><code>import 'dart:convert';\nimport 'package:flutter/material.dart';\nimport 'package:http/http.dart' as http;\nimport 'package:shared_preferences/shared_preferences.dart';\n\n\nFuture<void> _saveCredentials() async {\n SharedPreferences prefs = await SharedPreferences.getInstance();\n await prefs.setString('email', _emailController.text);\n await prefs.setString('password', _passwordController.text);\n await prefs.setBool('rememberMe', true);\n}\n\nFuture<void> _loadSavedCredentials() async {\n SharedPreferences prefs = await SharedPreferences.getInstance();\n setState(() {\n _emailController.text = prefs.getString('email') ?? '';\n _passwordController.text = prefs.getString('password') ?? '';\n _rememberMe = prefs.getBool('rememberMe') ?? false;\n });\n}\n\n\n</code></pre>\n<!-- /wp:code -->