fix: Refactor login controller to improve form initialization and credential handling
This commit is contained in:
parent
bff814f562
commit
52fbd88252
@ -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(),
|
||||
);
|
||||
}
|
||||
|
||||
@ -56,26 +55,52 @@ class LoginController extends MyController {
|
||||
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,
|
||||
);
|
||||
|
||||
// Handle validation display
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _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<void> _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');
|
||||
|
Loading…
x
Reference in New Issue
Block a user