marco.pms.mobileapp/lib/controller/auth/login_controller.dart

89 lines
2.2 KiB
Dart

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<void> 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');
}
}