import 'package:flutter/material.dart'; import 'package:flutter_applicationdemo/reusables/InputField.dart'; import 'package:flutter_applicationdemo/mysql.dart'; import 'HomePage.dart'; class ManageAccountPage extends StatefulWidget { @override State createState() => ManageAccountPageState(); } class ManageAccountPageState extends State { var db = mysql(); TextEditingController userNameController = TextEditingController(); TextEditingController emailController = TextEditingController(); TextEditingController passwordController = TextEditingController(); Widget _buildNameFiled() { return InputField( text: "new UserName", isPassword: false, icon: const Icon(Icons.person), controller: userNameController ); } Widget _buildEmailFiled() { return InputField( text: "current Email", isPassword: false, icon: const Icon(Icons.email), controller: emailController ); } Widget _buildPasswordFiled() { return InputField( text: "new Password", isPassword: true, icon: const Icon(Icons.lock), controller: passwordController ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( //title: const Text('ManageAccountPage'), backgroundColor: const Color.fromARGB(255, 190, 146, 160), ), body: Container( margin: EdgeInsets.all(24), child: Form( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text('Update user data' ,style: TextStyle(fontWeight: FontWeight.bold, fontSize: 25)), const SizedBox(height: 50), _buildEmailFiled(), _buildNameFiled(), _buildPasswordFiled(), ElevatedButton( onPressed: () async { UserInput userInput = UserInput(isValid: false, errorMessage: ""); await verifyUserInput(userNameController.text, emailController.text,passwordController.text, userInput); if(userInput.isValid) { await updateUserInSQL(emailController.text, userNameController.text, passwordController.text); Navigator.push( context, MaterialPageRoute(builder: (context) => HomePage()), ); } else { createUserError(userInput.errorMessage); } }, child: const Text('Update'), style: ElevatedButton.styleFrom( primary: const Color.fromARGB(255, 190, 146, 160) ), ) ], ), ), ), ); } Future verifyUserInput(String userName, String email , String password,userInput) async { var result = false; await db.getConnection().then((conn) async { String sql = "SELECT email from maen0574.user where email = '$email';"; var results = await conn.query(sql); if(results.toString() == "()") { result = true; } }); if (result == true) { userInput.errorMessage = "email incorrect!"; return; } else if (email.contains("'") || !email.contains("@") || email.length < 5) { userInput.errorMessage = "Incorrect email format"; return; } else if (userName.contains("'") || userName.length < 6) { userInput.errorMessage = "Incorrect username. \nCharacters limited to a-z, A-Z, 0-9."; return; } else if (password.contains("'") || password.length < 6) { userInput.errorMessage = "Incorrect password. \nPassword can't contain ' and needs to be atleast 6 characters long"; return; }else { userInput.isValid = true; } } void createUserError(String stringContext) { showDialog( context: context, builder: (BuildContext context) => AlertDialog( title: const Text("Couldn't update user data"), content: Text(stringContext), actions: [ TextButton( onPressed: () => Navigator.pop(context, 'OK'), child: const Text('OK'), ), ], ), ); } Future updateUserInSQL(String email, String username, String password) async { await db.getConnection().then((conn) async { String sql = "UPDATE maen0574.user set password = '$password', username = '$username' where email = '$email';"; await conn.query(sql); }); } } class UserInput { bool isValid; String errorMessage; UserInput({required this.isValid, required this.errorMessage}); bool getIsValid() { return isValid; } }