Files
prosappco/lib/blocs/service_bloc/service_bloc.dart
T
2024-04-05 11:56:45 -05:00

82 lines
2.4 KiB
Dart

import 'dart:developer';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:service_repository/service_repository.dart';
part 'service_event.dart';
part 'service_state.dart';
class ServiceBloc extends Bloc<ServiceEvent, ServiceState> {
final FirebaseServiceRepository _serviceRepository;
ServiceBloc({required FirebaseServiceRepository serviceRepository})
: _serviceRepository = serviceRepository,
super(CreateServiceInitial()) {
on<CreateService>(_onCreateService);
on<LoadService>(_onLoadService);
on<UpdateServiceStatus>(_onUpdateServiceStatus);
}
void _onCreateService(CreateService event, Emitter<ServiceState> emit) async {
try {
emit(CreateServiceLoading());
ServiceEntity service = ServiceEntity(
professionalId: event.professionalId,
professionalScored: false,
userId: event.userId,
userScored: false,
address: event.address,
aditionalAddress: event.aditionalAddress,
latitude: event.latitude,
longitude: event.longitude,
day: event.day,
createdAt: event.createdAt,
description: event.description,
range1Hour1: event.range1Hour1,
range1Hour2: event.range1Hour2,
rate: event.rate,
status: ServiceStatus.pending,
location: event.location,
);
String serviceId = await _serviceRepository.createService(service);
emit(CreateServiceSuccess(serviceId));
} catch (e) {
log(e.toString());
emit(CreateServiceFailure());
}
}
void _onLoadService(LoadService event, Emitter<ServiceState> emit) async {
try {
final serviceStream = _serviceRepository.getService(event.serviceId);
await for (var service in serviceStream) {
emit(ServiceLoaded(service));
}
} catch (e) {
log(e.toString());
emit(CreateServiceFailure());
}
}
void _onUpdateServiceStatus(
UpdateServiceStatus event, Emitter<ServiceState> emit) async {
try {
emit(CreateServiceLoading());
await _serviceRepository.updateServiceStatus(
event.serviceId, event.newStatus);
emit(ServiceStatusUpdated(event.newStatus));
} catch (e) {
log(e.toString());
emit(CreateServiceFailure());
}
}
}