feat: Refactor code structure and optimize performance across multiple modules
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:krow/core/application/di/injectable.dart';
|
||||
import 'package:krow/core/data/enums/state_status.dart';
|
||||
import 'package:krow/features/profile/benefits/domain/benefits_repository.dart';
|
||||
import 'package:krow/features/profile/benefits/domain/entities/benefit_entity.dart';
|
||||
|
||||
part 'benefits_event.dart';
|
||||
|
||||
part 'benefits_state.dart';
|
||||
|
||||
class BenefitsBloc extends Bloc<BenefitsEvent, BenefitsState> {
|
||||
BenefitsBloc() : super(const BenefitsState()) {
|
||||
on<InitializeBenefits>((event, emit) async {
|
||||
emit(state.copyWith(status: StateStatus.loading));
|
||||
|
||||
final benefits = await _repository.getStaffBenefits();
|
||||
|
||||
emit(state.copyWith(status: StateStatus.idle, benefits: benefits));
|
||||
});
|
||||
|
||||
on<SendBenefitRequest>((event, emit) async {
|
||||
emit(state.copyWith(status: StateStatus.loading));
|
||||
final result = await _repository.requestBenefit(benefit: event.benefit);
|
||||
|
||||
int index = -1;
|
||||
List<BenefitEntity>? updatedBenefits;
|
||||
if (result != null) {
|
||||
index = state.benefits.indexWhere(
|
||||
(benefit) => benefit.name == result.name,
|
||||
);
|
||||
|
||||
if (index >= 0) {
|
||||
updatedBenefits = List.from(state.benefits)..[index] = result;
|
||||
}
|
||||
}
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
benefits: updatedBenefits,
|
||||
status: StateStatus.idle,
|
||||
),
|
||||
);
|
||||
event.requestCompleter.complete(result ?? event.benefit);
|
||||
});
|
||||
}
|
||||
|
||||
final BenefitsRepository _repository = getIt<BenefitsRepository>();
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
part of 'benefits_bloc.dart';
|
||||
|
||||
@immutable
|
||||
sealed class BenefitsEvent {
|
||||
const BenefitsEvent();
|
||||
}
|
||||
|
||||
class InitializeBenefits extends BenefitsEvent {
|
||||
const InitializeBenefits();
|
||||
}
|
||||
|
||||
class SendBenefitRequest extends BenefitsEvent {
|
||||
const SendBenefitRequest({
|
||||
required this.benefit,
|
||||
required this.requestCompleter,
|
||||
});
|
||||
|
||||
final BenefitEntity benefit;
|
||||
final Completer<BenefitEntity> requestCompleter;
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
part of 'benefits_bloc.dart';
|
||||
|
||||
@immutable
|
||||
class BenefitsState {
|
||||
const BenefitsState({
|
||||
this.status = StateStatus.idle,
|
||||
this.benefits = const [],
|
||||
this.exception,
|
||||
});
|
||||
|
||||
final StateStatus status;
|
||||
final List<BenefitEntity> benefits;
|
||||
final Exception? exception;
|
||||
|
||||
BenefitsState copyWith({
|
||||
StateStatus? status,
|
||||
List<BenefitEntity>? benefits,
|
||||
Exception? exception,
|
||||
}) {
|
||||
return BenefitsState(
|
||||
status: status ?? this.status,
|
||||
benefits: benefits ?? this.benefits,
|
||||
exception: exception,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user