import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:marco/controller/my_controller.dart'; 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'; 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(); basicValidator.addField( 'username', required: true, label: "User_Name", validators: [MyEmailValidator()], controller: TextEditingController(text: _dummyEmail), ); basicValidator.addField( 'password', required: true, label: "Password", validators: [MyLengthValidator(min: 6, max: 10)], controller: TextEditingController(text: _dummyPassword), ); } void onChangeCheckBox(bool? value) { isChecked.value = value ?? isChecked.value; } void onChangeShowPassword() { showPassword.toggle(); } Future onLogin() async { if (!basicValidator.validateForm()) return; isLoading.value = true; 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 { final currentRoute = ModalRoute.of(Get.context!)?.settings.name ?? ""; final nextUrl = Uri.parse(currentRoute).queryParameters['next'] ?? "/home"; Get.toNamed(nextUrl); } isLoading.value = false; } void goToForgotPassword() { Get.toNamed('/auth/forgot_password'); } void gotoRegister() { Get.offAndToNamed('/auth/register_account'); } }