push switch autoaomtion status update

This commit is contained in:
ashrafzarkanisala
2024-07-28 06:57:33 +03:00
parent 50b455b4ae
commit eb8ad90dcb
12 changed files with 280 additions and 104 deletions
@@ -362,6 +362,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
tasksList = List<SceneStaticFunction>.from(
getTaskListFunctionsFromApi(
actions: response.actions, isAutomation: false));
emit(AddSceneTask(
automationTasksList: automationTasksList,
tasksList: tasksList,
@@ -13,6 +13,7 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
on<LoadScenes>(_onLoadScenes);
on<LoadAutomation>(_onLoadAutomation);
on<SceneTrigger>(_onSceneTrigger);
on<UpdateAutomationStatus>(_onUpdateAutomationStatus);
}
List<ScenesModel> scenes = [];
@@ -26,7 +27,7 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
scenes = await SceneApi.getScenesByUnitId(event.unitId);
emit(SceneLoaded(scenes, automationList));
} else {
const SceneError(message: '');
emit(const SceneError(message: 'Unit ID is empty'));
}
} catch (e) {
emit(const SceneError(message: 'Something went wrong'));
@@ -53,8 +54,11 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
SceneTrigger event, Emitter<SceneState> emit) async {
final currentState = state;
if (currentState is SceneLoaded) {
emit(SceneLoaded(currentState.scenes, currentState.automationList,
loadingSceneId: event.sceneId));
emit(SceneLoaded(
currentState.scenes,
currentState.automationList,
loadingSceneId: event.sceneId,
));
try {
final success = await SceneApi.triggerScene(event.sceneId);
@@ -69,4 +73,39 @@ class SceneBloc extends Bloc<SceneEvent, SceneState> {
}
}
}
Future<void> _onUpdateAutomationStatus(
UpdateAutomationStatus event, Emitter<SceneState> emit) async {
final currentState = state;
if (currentState is SceneLoaded) {
final newLoadingStates =
Map<String, bool>.from(currentState.loadingStates)
..[event.automationId] = true;
emit(SceneLoaded(
currentState.scenes,
currentState.automationList,
loadingStates: newLoadingStates,
));
try {
final success = await SceneApi.updateAutomationStatus(
event.automationId, event.automationStatusUpdate);
if (success) {
automationList = await SceneApi.getAutomationByUnitId(
event.automationStatusUpdate.unitUuid);
newLoadingStates[event.automationId] = false;
emit(SceneLoaded(
currentState.scenes,
automationList,
loadingStates: newLoadingStates,
));
} else {
emit(const SceneError(message: 'Something went wrong'));
}
} catch (e) {
emit(const SceneError(message: 'Something went wrong'));
}
}
}
}
@@ -1,4 +1,5 @@
import 'package:equatable/equatable.dart';
import 'package:syncrow_app/features/scene/model/update_automation.dart';
abstract class SceneEvent extends Equatable {
const SceneEvent();
@@ -34,3 +35,15 @@ class SceneTrigger extends SceneEvent {
@override
List<Object> get props => [sceneId];
}
//updateAutomationStatus
class UpdateAutomationStatus extends SceneEvent {
final String automationId;
final AutomationStatusUpdate automationStatusUpdate;
const UpdateAutomationStatus(
{required this.automationStatusUpdate, required this.automationId});
@override
List<Object> get props => [automationStatusUpdate];
}
@@ -15,11 +15,14 @@ class SceneLoaded extends SceneState {
final List<ScenesModel> scenes;
final List<ScenesModel> automationList;
final String? loadingSceneId;
final Map<String, bool> loadingStates;
const SceneLoaded(this.scenes, this.automationList, {this.loadingSceneId});
const SceneLoaded(this.scenes, this.automationList,
{this.loadingSceneId, this.loadingStates = const {}});
@override
List<Object?> get props => [scenes, loadingSceneId, automationList];
List<Object?> get props =>
[scenes, loadingSceneId, automationList, loadingStates];
}
class SceneError extends SceneState {
@@ -39,3 +42,7 @@ class SceneTriggerSuccess extends SceneState {
@override
List<Object> get props => [sceneName];
}
class UpdateAutomationStatusLoading extends SceneState {
const UpdateAutomationStatusLoading();
}