feat: Refactor code structure and optimize performance across multiple modules
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
import 'dart:developer';
|
||||
|
||||
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/inclusive/data/models/inclusive_info_model.dart';
|
||||
import 'package:krow/features/profile/inclusive/data/staff_inclusivity_repository.dart';
|
||||
|
||||
part 'inclusive_info_event.dart';
|
||||
|
||||
part 'inclusive_info_state.dart';
|
||||
|
||||
class InclusiveInfoBloc extends Bloc<InclusiveInfoEvent, InclusiveInfoState> {
|
||||
InclusiveInfoBloc() : super(const InclusiveInfoState()) {
|
||||
on<InitializeInclusiveInfoEvent>((event, emit) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
isInEditMode: event.isInEditMode,
|
||||
status: event.isInEditMode ? StateStatus.loading : StateStatus.idle,
|
||||
),
|
||||
);
|
||||
if (!state.isInEditMode) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
areAccommodationsRequired: true,
|
||||
),
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await for (final inclusivityData
|
||||
in getIt<StaffInclusivityRepository>().getStaffInclusivityInfo()) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
areAccommodationsRequired:
|
||||
inclusivityData.areAccommodationsRequired,
|
||||
accommodationsDetails: inclusivityData.accommodationsDetails,
|
||||
status: StateStatus.idle,
|
||||
),
|
||||
);
|
||||
}
|
||||
} catch (except) {
|
||||
log(except.toString());
|
||||
}
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
areAccommodationsRequired: state.areAccommodationsRequired ?? true,
|
||||
status: state.status == StateStatus.loading
|
||||
? StateStatus.idle
|
||||
: state.status,
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
on<ToggleRequiresAccommodations>((event, emit) {
|
||||
emit(state.copyWith(areAccommodationsRequired: event.index == 0));
|
||||
});
|
||||
|
||||
on<ChangeAccommodationsDetails>((event, emit) {
|
||||
emit(state.copyWith(accommodationsDetails: event.details));
|
||||
});
|
||||
|
||||
on<SaveInclusiveInfoChanges>((event, emit) async {
|
||||
emit(state.copyWith(status: StateStatus.loading));
|
||||
|
||||
try {
|
||||
await getIt<StaffInclusivityRepository>().updateStaffMobilityInfo(
|
||||
InclusiveInfoModel(
|
||||
areAccommodationsRequired: state.areAccommodationsRequired ?? false,
|
||||
accommodationsDetails: state.accommodationsDetails,
|
||||
),
|
||||
);
|
||||
} catch (except) {
|
||||
emit(state.copyWith(status: StateStatus.idle));
|
||||
|
||||
log(except.toString());
|
||||
}
|
||||
|
||||
emit(state.copyWith(status: StateStatus.success));
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
part of 'inclusive_info_bloc.dart';
|
||||
|
||||
@immutable
|
||||
sealed class InclusiveInfoEvent {}
|
||||
|
||||
class InitializeInclusiveInfoEvent extends InclusiveInfoEvent {
|
||||
InitializeInclusiveInfoEvent({required this.isInEditMode});
|
||||
|
||||
final bool isInEditMode;
|
||||
}
|
||||
|
||||
class ToggleRequiresAccommodations extends InclusiveInfoEvent {
|
||||
ToggleRequiresAccommodations(this.index);
|
||||
|
||||
final int index;
|
||||
}
|
||||
|
||||
class ChangeAccommodationsDetails extends InclusiveInfoEvent {
|
||||
ChangeAccommodationsDetails(this.details);
|
||||
|
||||
final String details;
|
||||
}
|
||||
|
||||
class SaveInclusiveInfoChanges extends InclusiveInfoEvent {}
|
||||
@@ -0,0 +1,37 @@
|
||||
part of 'inclusive_info_bloc.dart';
|
||||
|
||||
@immutable
|
||||
class InclusiveInfoState {
|
||||
const InclusiveInfoState({
|
||||
this.areAccommodationsRequired,
|
||||
this.accommodationsDetails = '',
|
||||
this.isInEditMode = true,
|
||||
this.status = StateStatus.idle,
|
||||
});
|
||||
|
||||
final bool? areAccommodationsRequired;
|
||||
final String accommodationsDetails;
|
||||
final bool isInEditMode;
|
||||
final StateStatus status;
|
||||
|
||||
bool get isFilled {
|
||||
return (areAccommodationsRequired != null && !areAccommodationsRequired!) ||
|
||||
accommodationsDetails.isNotEmpty;
|
||||
}
|
||||
|
||||
InclusiveInfoState copyWith({
|
||||
bool? areAccommodationsRequired,
|
||||
String? accommodationsDetails,
|
||||
bool? isInEditMode,
|
||||
StateStatus? status,
|
||||
}) {
|
||||
return InclusiveInfoState(
|
||||
areAccommodationsRequired:
|
||||
areAccommodationsRequired ?? this.areAccommodationsRequired,
|
||||
accommodationsDetails:
|
||||
accommodationsDetails ?? this.accommodationsDetails,
|
||||
isInEditMode: isInEditMode ?? this.isInEditMode,
|
||||
status: status ?? this.status,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
import 'package:injectable/injectable.dart';
|
||||
import 'package:krow/features/profile/inclusive/data/models/inclusive_info_model.dart';
|
||||
import 'package:krow/features/profile/inclusive/data/staff_inclusivity_api_provider.dart';
|
||||
import 'package:krow/features/profile/inclusive/data/staff_inclusivity_repository.dart';
|
||||
|
||||
@Injectable(as: StaffInclusivityRepository)
|
||||
class StaffMobilityRepositoryImpl extends StaffInclusivityRepository {
|
||||
StaffMobilityRepositoryImpl({
|
||||
required StaffInclusivityApiProvider apiProvider,
|
||||
}) : _apiProvider = apiProvider;
|
||||
|
||||
final StaffInclusivityApiProvider _apiProvider;
|
||||
|
||||
@override
|
||||
Stream<InclusiveInfoModel> getStaffInclusivityInfo() {
|
||||
return _apiProvider.getStaffInclusivityInfoWithCache();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<InclusiveInfoModel?> updateStaffMobilityInfo(
|
||||
InclusiveInfoModel data,
|
||||
) {
|
||||
return _apiProvider.updateStaffInclusivityInfoInfo(data);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user