feat: legacy mobile apps created
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
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/mobility/data/models/mobility_model.dart';
|
||||
import 'package:krow/features/profile/mobility/data/staff_mobility_repository.dart';
|
||||
|
||||
part 'mobility_event.dart';
|
||||
part 'mobility_state.dart';
|
||||
|
||||
class MobilityBloc extends Bloc<MobilityEvent, MobilityState> {
|
||||
MobilityBloc() : super(const MobilityState()) {
|
||||
on<InitializeMobilityEvent>((event, emit) async {
|
||||
emit(
|
||||
state.copyWith(
|
||||
isInEditMode: event.isInEditMode,
|
||||
status: event.isInEditMode ? StateStatus.loading : StateStatus.idle,
|
||||
),
|
||||
);
|
||||
if (!state.isInEditMode) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
hasACar: true,
|
||||
canRelocate: true,
|
||||
),
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await for (final mobilityData
|
||||
in getIt<StaffMobilityRepository>().getStaffMobility()) {
|
||||
emit(
|
||||
state.copyWith(
|
||||
hasACar: mobilityData.hasACar,
|
||||
canRelocate: mobilityData.canRelocate,
|
||||
status: StateStatus.idle,
|
||||
),
|
||||
);
|
||||
}
|
||||
} catch (except) {
|
||||
log(except.toString());
|
||||
}
|
||||
|
||||
emit(
|
||||
state.copyWith(
|
||||
hasACar: state.hasACar ?? true,
|
||||
canRelocate: state.canRelocate ?? true,
|
||||
status: state.status == StateStatus.loading
|
||||
? StateStatus.idle
|
||||
: state.status,
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
on<ToggleCarAvailability>((event, emit) {
|
||||
emit(state.copyWith(hasACar: event.index == 0));
|
||||
});
|
||||
|
||||
on<ToggleRelocationPossibility>((event, emit) {
|
||||
emit(state.copyWith(canRelocate: event.index == 0));
|
||||
});
|
||||
|
||||
on<SaveMobilityChanges>((event, emit) async {
|
||||
emit(state.copyWith(status: StateStatus.loading));
|
||||
try {
|
||||
await getIt<StaffMobilityRepository>().updateStaffMobilityInfo(
|
||||
MobilityModel(
|
||||
hasACar: state.hasACar ?? false,
|
||||
canRelocate: state.canRelocate ?? false,
|
||||
),
|
||||
);
|
||||
|
||||
//resave cached data
|
||||
getIt<StaffMobilityRepository>().getStaffMobility();
|
||||
} catch (except) {
|
||||
emit(state.copyWith(status: StateStatus.idle));
|
||||
log(except.toString());
|
||||
}
|
||||
|
||||
emit(state.copyWith(status: StateStatus.success));
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
part of 'mobility_bloc.dart';
|
||||
|
||||
@immutable
|
||||
sealed class MobilityEvent {}
|
||||
|
||||
class InitializeMobilityEvent extends MobilityEvent {
|
||||
InitializeMobilityEvent({required this.isInEditMode});
|
||||
|
||||
final bool isInEditMode;
|
||||
}
|
||||
|
||||
class ToggleCarAvailability extends MobilityEvent {
|
||||
ToggleCarAvailability(this.index);
|
||||
|
||||
final int index;
|
||||
}
|
||||
|
||||
class ToggleRelocationPossibility extends MobilityEvent {
|
||||
ToggleRelocationPossibility(this.index);
|
||||
|
||||
final int index;
|
||||
}
|
||||
|
||||
class SaveMobilityChanges extends MobilityEvent {}
|
||||
@@ -0,0 +1,30 @@
|
||||
part of 'mobility_bloc.dart';
|
||||
|
||||
@immutable
|
||||
class MobilityState {
|
||||
const MobilityState({
|
||||
this.hasACar,
|
||||
this.canRelocate,
|
||||
this.isInEditMode = true,
|
||||
this.status = StateStatus.idle,
|
||||
});
|
||||
|
||||
final bool? hasACar;
|
||||
final bool? canRelocate;
|
||||
final bool isInEditMode;
|
||||
final StateStatus status;
|
||||
|
||||
MobilityState copyWith({
|
||||
bool? hasACar,
|
||||
bool? canRelocate,
|
||||
bool? isInEditMode,
|
||||
StateStatus? status,
|
||||
}) {
|
||||
return MobilityState(
|
||||
hasACar: hasACar ?? this.hasACar,
|
||||
canRelocate: canRelocate ?? this.canRelocate,
|
||||
isInEditMode: isInEditMode ?? this.isInEditMode,
|
||||
status: status ?? this.status,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
import 'package:injectable/injectable.dart';
|
||||
import 'package:krow/features/profile/mobility/data/models/mobility_model.dart';
|
||||
import 'package:krow/features/profile/mobility/data/staff_mobility_api_provider.dart';
|
||||
import 'package:krow/features/profile/mobility/data/staff_mobility_repository.dart';
|
||||
|
||||
@LazySingleton(as: StaffMobilityRepository)
|
||||
class StaffMobilityRepositoryImpl extends StaffMobilityRepository {
|
||||
StaffMobilityRepositoryImpl({
|
||||
required StaffMobilityApiProvider apiProvider,
|
||||
}) : _apiProvider = apiProvider;
|
||||
|
||||
final StaffMobilityApiProvider _apiProvider;
|
||||
|
||||
@override
|
||||
Stream<MobilityModel> getStaffMobility() {
|
||||
return _apiProvider.getStaffMobilityWithCache();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MobilityModel?> updateStaffMobilityInfo(MobilityModel data) {
|
||||
return _apiProvider.updateStaffMobilityInfo(data);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user