proxibuy_bussiness/lib/presentation/auth/bloc/auth_bloc.dart

81 lines
2.4 KiB
Dart

import 'package:bloc/bloc.dart';
import 'package:business_panel/core/services/token_storage_service.dart';
import 'package:dio/dio.dart';
import 'package:business_panel/core/utils/logging_interceptor.dart';
part 'auth_event.dart';
part 'auth_state.dart';
class AuthBloc extends Bloc<AuthEvent, AuthState> {
late final Dio _dio;
final TokenStorageService _tokenStorage = TokenStorageService();
AuthBloc() : super(AuthInitial()) {
_dio = Dio();
_dio.interceptors.add(LoggingInterceptor());
on<SendOTPEvent>((event, emit) async {
emit(AuthLoading());
emit(AuthLoading());
try {
final response = await _dio.post(
'https://fartak.liara.run/login/sendcode',
data: {
'Phone': event.phoneNumber,
'Code': event.countryCode,
},
);
if (response.statusCode == 200) {
emit(AuthCodeSentSuccess());
} else {
emit(AuthFailure(response.data['message'] ?? 'خطایی رخ داد'));
}
} on DioException catch (e) {
emit(AuthFailure(e.response?.data['message'] ?? 'خطای شبکه'));
}
});
on<VerifyOTPEvent>((event, emit) async {
emit(AuthLoading());
try {
final response = await _dio.post(
'https://fartak.liara.run/login/getcode',
data: {
'Phone': event.phoneNumber,
'Code': event.countryCode,
'OTP': event.otp,
},
);
if (response.statusCode == 200 && response.data['data']['accessToken'] != null) {
final accessToken = response.data['data']['accessToken'];
final refreshToken = response.data['data']['refreshToken'];
await _tokenStorage.saveTokens(
accessToken: accessToken,
refreshToken: refreshToken,
);
emit(AuthVerified());
} else {
emit(AuthFailure(response.data['message'] ?? 'کد تایید صحیح نمی‌باشد.'));
}
} on DioException catch (e) {
emit(AuthFailure(e.response?.data['message'] ?? 'خطای شبکه'));
}
});
on<SaveUserInfoEvent>((event, emit) async {
emit(AuthLoading());
await Future.delayed(const Duration(milliseconds: 500));
if (event.name.trim().isEmpty) {
emit(AuthFailure('لطفاً نام خود را وارد کنید.'));
} else {
emit(UserInfoSaved());
}
});
}
}