- Replace all Firebase* repositories with Api* repositories using HTTP + SharedPreferences JWT - Remove Firebase.initializeApp() and firebase_messaging background handler from main.dart - Update DI (app_di.dart) to inject Api* repositories instead of Firebase* ones - Replace all Timestamp/cloud_firestore usage with ISO 8601 String dates - Stub PhoneVerificationService (Firebase phone OTP → backend OTP when implemented) - Add ApiService singleton with JWT management in lib/services/ - Legacy firebase_*_repository.dart files preserved for Fase 4 cleanup Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
56 lines
1.8 KiB
Dart
56 lines
1.8 KiB
Dart
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:equatable/equatable.dart';
|
|
import 'package:professional_repository/professional_repository.dart';
|
|
|
|
part 'professional_profile_event.dart';
|
|
part 'professional_profile_state.dart';
|
|
|
|
class ProfessionalProfileBloc
|
|
extends Bloc<ProfessionalProfileEvent, ProfessionalProfileState> {
|
|
final ApiProfessionalRepository _professionalRepository;
|
|
|
|
ProfessionalProfileBloc(
|
|
{required ApiProfessionalRepository professionalRepository})
|
|
: _professionalRepository = professionalRepository,
|
|
super((UpdateProfessionalInfoInitial())) {
|
|
on<UpdateProfessionalBannerInfo>(_onUpdateProfessionalBannerInfo);
|
|
on<UpdateProfessionalProfileInfo>(_onUpdateProfessionalProfileInfo);
|
|
}
|
|
|
|
void _onUpdateProfessionalBannerInfo(UpdateProfessionalBannerInfo event,
|
|
Emitter<ProfessionalProfileState> emit) async {
|
|
emit(UpdateProfessionalInfoLoading());
|
|
try {
|
|
event.fileBanner != null
|
|
? await _professionalRepository.uploadBannerPicture(event.fileBanner!)
|
|
: null;
|
|
|
|
emit(const UpdateProfessionalInfoSuccess());
|
|
} catch (e) {
|
|
emit(UpdateProfessionalInfoFailure());
|
|
}
|
|
}
|
|
|
|
void _onUpdateProfessionalProfileInfo(UpdateProfessionalProfileInfo event,
|
|
Emitter<ProfessionalProfileState> emit) async {
|
|
emit(UpdateProfessionalInfoLoading());
|
|
try {
|
|
await _professionalRepository.updateProfessionalInfo(
|
|
event.address,
|
|
event.aditionalAddress,
|
|
event.ratePreferences,
|
|
event.rate,
|
|
event.locationPreferences,
|
|
event.latitude,
|
|
event.longitude,
|
|
event.schedules,
|
|
event.paymentMethods,
|
|
);
|
|
|
|
emit(const UpdateProfessionalInfoSuccess());
|
|
} catch (e) {
|
|
emit(UpdateProfessionalInfoFailure());
|
|
}
|
|
}
|
|
}
|