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'; class LoginController extends MyController { MyFormValidator basicValidator = MyFormValidator(); bool showPassword = false, isChecked = false; RxBool isLoading = false.obs; // Add reactive loading state final String _dummyEmail = "admin@marcobms.com"; final String _dummyPassword = "User@123"; @override void 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)); super.onInit(); } void onChangeCheckBox(bool? value) { isChecked = value ?? isChecked; update(); } void onChangeShowPassword() { showPassword = !showPassword; update(); } Future onLogin() async { if (basicValidator.validateForm()) { // Set loading to true isLoading.value = true; update(); var errors = await AuthService.loginUser(basicValidator.getData()); if (errors != null) { basicValidator.addErrors(errors); basicValidator.validateForm(); basicValidator.clearErrors(); } else { String nextUrl = Uri.parse(ModalRoute.of(Get.context!)?.settings.name ?? "").queryParameters['next'] ?? "/home"; Get.toNamed(nextUrl); } // Set loading to false after the API call is complete isLoading.value = false; update(); } } void goToForgotPassword() { Get.toNamed('/auth/forgot_password'); } void gotoRegister() { Get.offAndToNamed('/auth/register_account'); } }