You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.5KB

  1. import 'package:bloc/bloc.dart';
  2. import 'package:farm_tpf/main.dart';
  3. import 'package:farm_tpf/utils/const_enum.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:flutter_bloc/flutter_bloc.dart';
  6. import 'package:get/get.dart';
  7. import '../../../../authentication/bloc/authentication_bloc.dart';
  8. import '../../../../data/repository/repository.dart';
  9. import '../../../../utils/local_storage.dart';
  10. import '../../../../utils/validators.dart';
  11. import '../models/request_user.dart';
  12. import '../models/response_user.dart';
  13. part 'login_state.dart';
  14. class LoginCubit extends Cubit<LoginState> {
  15. LoginCubit() : super(LoginInitial());
  16. final formKey = GlobalKey<FormState>();
  17. final usernameCtl = TextEditingController();
  18. final passwordCtl = TextEditingController();
  19. final usernameFocus = FocusNode();
  20. final passwordFocus = FocusNode();
  21. final _repository = Repository();
  22. var isRemember = ValueNotifier(true);
  23. Future<void> loginWithCredential() async {
  24. // if (!formKey.currentState!.validate()) {
  25. // return;
  26. // }
  27. emit(LoginLoading());
  28. var userLoginRequest = RequestUser()
  29. ..username = usernameCtl.text
  30. ..password = passwordCtl.text;
  31. await _repository.login(
  32. (data) {
  33. handleLoginLogic(
  34. responseUser: data,
  35. username: usernameCtl.text,
  36. );
  37. },
  38. (error) {
  39. emit(LoginFailure('Tên đăng nhập hoặc mật khẩu không đúng'));
  40. },
  41. requestUser: userLoginRequest,
  42. );
  43. }
  44. Future<void> handleLoginLogic({
  45. required ResponseUser responseUser,
  46. required String username,
  47. }) async {
  48. try {
  49. LocalStorage.saveUserInfo(responseUser, username);
  50. BlocProvider.of<AuthenticationBloc>(globalNavigator.currentContext!).add(
  51. const AuthenticationStatusChanged(
  52. AuthenticationStatus.authenticated,
  53. ),
  54. );
  55. } catch (_) {}
  56. emit(
  57. LoginSuccess(
  58. routeName: '',
  59. ),
  60. );
  61. }
  62. String? validateEmail(String value) {
  63. if (!Validators.stringNotNullOrEmpty(value)) {
  64. return 'Nhập email';
  65. }
  66. if (!Validators.isValidEmail(value)) {
  67. return 'Nhập email';
  68. }
  69. return null;
  70. }
  71. String? validatePassword(String value) {
  72. if (!Validators.stringNotNullOrEmpty(value)) {
  73. return 'Nhập mật khẩu';
  74. }
  75. return null;
  76. }
  77. void rememberMe(bool isRememberLogin) {
  78. isRemember.value = isRememberLogin;
  79. }
  80. void dispose() {
  81. usernameCtl.dispose();
  82. passwordCtl.dispose();
  83. usernameFocus.dispose();
  84. passwordFocus.dispose();
  85. }
  86. }