Files
Tanami_App/lib/features/register/presentation/bloc/register_user_bloc.dart
2024-07-17 19:12:26 +05:30

105 lines
3.6 KiB
Dart

import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';
import 'package:tanami_app/Api_Helper/base_manager.dart';
import 'package:tanami_app/features/register/Repository/RegisterApi.dart';
import '../../../../core/utils/secure/secure_storage_service.dart';
import 'register_user_event.dart';
import 'register_user_state.dart';
class RegisterUserBloc extends Bloc<RegisterUserEvent, RegisterUserState> {
final SecureStorageService secureStorageService;
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
final TextEditingController firstNameTextField = TextEditingController();
final TextEditingController lastNameTextField = TextEditingController();
final TextEditingController emailTextField = TextEditingController();
final TextEditingController passwordTextField = TextEditingController();
final TextEditingController repeatPasswordTextField = TextEditingController();
GlobalKey<FormState> getFormKey() {
return formKey;
}
RegisterUserBloc({required this.secureStorageService})
: super(RegisterUserInitial()) {
firstNameTextField.addListener(_onFormFieldChanged);
passwordTextField.addListener(_onFormFieldChanged);
lastNameTextField.addListener(_onFormFieldChanged);
emailTextField.addListener(_onFormFieldChanged);
repeatPasswordTextField.addListener(_onFormFieldChanged);
on<RegisterFormChanged>(_onLoginFormChanged);
on<RegisterUserSubmitted>((event, emit) async {
if (!formKey.currentState!.validate()) {
return;
}
emit(RegisterUserLoading());
try {
Map<String, dynamic> registerdata = {
"token": event.token,
"firstName": event.firstName,
"lastName": event.lastName,
"emailAddress": event.email,
"passwordHash": event.password
};
ResponseData response =
await RegisterAPIService().RegisterRequest(registerdata);
if (response.status == ResponseStatus.SUCCESS) {
var data = response.data["data"];
secureStorageService.write("temp_token", data["token"].toString());
emit(RegisterUserSuccess());
} else {
emit(RegisterUserFailure(response.message));
}
// Simulate API call
await Future.delayed(const Duration(seconds: 2));
// Replace the next line with actual API call
/* final isSuccess = await _mockLoginApi(
event.firstName,
event.password,
event.lastName,
event.confirmPassword,
event.email,
);
if (isSuccess) {
emit(RegisterUserSuccess());
} else {
emit(const RegisterUserFailure(
"Register failed. Please check your credentials."));
} */
} catch (e) {
emit(RegisterUserFailure(e.toString()));
}
});
}
void _onFormFieldChanged() {
add(RegisterFormChanged(
firstNameTextField.text,
lastNameTextField.text,
emailTextField.text,
passwordTextField.text,
repeatPasswordTextField.text,
));
}
void _onLoginFormChanged(
RegisterFormChanged event, Emitter<RegisterUserState> emit) {
final areFieldsFilled = event.firstName.isNotEmpty &&
event.lastName.isNotEmpty &&
event.email.isNotEmpty &&
event.password.isNotEmpty &&
event.confirmPassword.isNotEmpty;
emit(RegisterUserFieldsState(areFieldsFilled));
}
@override
Future<void> close() {
firstNameTextField.dispose();
passwordTextField.dispose();
lastNameTextField.dispose();
emailTextField.dispose();
repeatPasswordTextField.dispose();
return super.close();
}
}