Files
CityCards_Customer_Flutter/lib/create_account/bloc/create_account_bloc.dart

77 lines
2.4 KiB
Dart

import 'package:flutter_bloc/flutter_bloc.dart';
import '../../localPreference/local_preference.dart';
import '../models/create_account_model.dart';
import '../repository/create_account_repository.dart';
import 'create_account_event.dart';
import 'create_account_state.dart';
class CreateAccountBloc extends Bloc<CreateAccountEvent, CreateAccountState> {
final CreateAccountRepository repository;
CreateAccountBloc({required this.repository})
: super(const CreateAccountInitial()) {
on<CreateAccountSubmitted>(_onCreateAccountSubmitted);
on<CreateAccountReset>(_onCreateAccountReset);
}
Future<void> _onCreateAccountSubmitted(
CreateAccountSubmitted event,
Emitter<CreateAccountState> emit,
) async {
emit(const CreateAccountLoading());
try {
final response = await repository.registerUser(
firstName: event.firstName,
lastName: event.lastName,
emailAddress: event.emailAddress,
isdCode: event.isdCode,
mobileNumber: event.mobileNumber,
address1: event.address1,
address2: event.address2,
city: event.city,
state: event.state,
country: event.country,
postalCode: event.postalCode,
);
await LocalPreference.setLogin(true);
// ✅ FIX: Parse directly from response, just like verify OTP
final userModel = UserRegisteredModel.fromJson(response);
await LocalPreference.setTokens(
accessToken: userModel.accessToken,
refreshToken: userModel.refreshToken,
refreshTokenMaxAge: userModel.refreshTokenMaxAge,
);
await LocalPreference.setUserDetails(
userId: userModel.user.id,
firstName: userModel.user.firstName,
lastName: userModel.user.lastName,
fullName: userModel.user.fullName,
emailAddress: userModel.user.emailAddress,
role: userModel.user.role,
roleId: userModel.user.roleId,
);
await LocalPreference.setProfileImage(userModel.user.profileImage);
emit(CreateAccountSuccess(
message: 'Account created successfully',
userData: response,
));
} catch (e) {
emit(CreateAccountFailure(
errorMessage: e.toString().replaceAll('Exception: ', ''),
));
}
}
void _onCreateAccountReset(
CreateAccountReset event,
Emitter<CreateAccountState> emit,
) {
emit(const CreateAccountInitial());
}
}