diff --git a/lib/controller/auth/login_controller.dart b/lib/controller/auth/login_controller.dart index 3537759..b8488d5 100644 --- a/lib/controller/auth/login_controller.dart +++ b/lib/controller/auth/login_controller.dart @@ -5,30 +5,29 @@ import 'package:marco/helpers/services/auth_service.dart'; import 'package:marco/helpers/widgets/my_form_validator.dart'; import 'package:marco/helpers/widgets/my_validators.dart'; import 'package:marco/helpers/widgets/my_snackbar.dart'; +import 'package:shared_preferences/shared_preferences.dart'; class LoginController extends MyController { - // Form validator final MyFormValidator basicValidator = MyFormValidator(); - // UI states final RxBool isLoading = false.obs; final RxBool showPassword = false.obs; final RxBool isChecked = false.obs; - // Dummy credentials - final String _dummyEmail = ""; - final String _dummyPassword = ""; - @override void onInit() { super.onInit(); + _initializeForm(); + _loadSavedCredentials(); + } + void _initializeForm() { basicValidator.addField( 'username', required: true, label: "User_Name", validators: [MyEmailValidator()], - controller: TextEditingController(text: _dummyEmail), + controller: TextEditingController(), ); basicValidator.addField( @@ -36,7 +35,7 @@ class LoginController extends MyController { required: true, label: "Password", validators: [MyLengthValidator(min: 6, max: 10)], - controller: TextEditingController(text: _dummyPassword), + controller: TextEditingController(), ); } @@ -49,33 +48,59 @@ class LoginController extends MyController { } Future onLogin() async { - if (!basicValidator.validateForm()) return; + if (!basicValidator.validateForm()) return; - isLoading.value = true; + isLoading.value = true; - final errors = await AuthService.loginUser(basicValidator.getData()); + final errors = await AuthService.loginUser(basicValidator.getData()); - if (errors != null) { - // Show custom snackbar using your utility - showAppSnackbar( - title: "Login Failed", - message: "Username or password is incorrect", - type: SnackbarType.error, - ); + if (errors != null) { + showAppSnackbar( + title: "Login Failed", + message: "Username or password is incorrect", + type: SnackbarType.error, + ); - // Handle validation display - basicValidator.addErrors(errors); - basicValidator.validateForm(); - basicValidator.clearErrors(); - } else { - final currentRoute = ModalRoute.of(Get.context!)?.settings.name ?? ""; - final nextUrl = Uri.parse(currentRoute).queryParameters['next'] ?? "/home"; - Get.toNamed(nextUrl); + basicValidator.addErrors(errors); + basicValidator.validateForm(); + basicValidator.clearErrors(); + } else { + await _handleRememberMe(); + + final currentRoute = ModalRoute.of(Get.context!)?.settings.name ?? ""; + final nextUrl = Uri.parse(currentRoute).queryParameters['next'] ?? "/home"; + Get.toNamed(nextUrl); + } + + isLoading.value = false; } - isLoading.value = false; -} + Future _handleRememberMe() async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + if (isChecked.value) { + await prefs.setString('username', basicValidator.getController('username')!.text); + await prefs.setString('password', basicValidator.getController('password')!.text); + await prefs.setBool('remember_me', true); + } else { + await prefs.remove('username'); + await prefs.remove('password'); + await prefs.setBool('remember_me', false); + } + } + Future _loadSavedCredentials() async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + final savedUsername = prefs.getString('username'); + final savedPassword = prefs.getString('password'); + final remember = prefs.getBool('remember_me') ?? false; + + isChecked.value = remember; + + if (remember) { + basicValidator.getController('username')?.text = savedUsername ?? ''; + basicValidator.getController('password')?.text = savedPassword ?? ''; + } + } void goToForgotPassword() { Get.toNamed('/auth/forgot_password');