mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2025-07-15 01:35:23 +00:00
62 lines
1.8 KiB
Dart
62 lines
1.8 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:bloc/bloc.dart';
|
|
import 'package:equatable/equatable.dart';
|
|
import 'package:syncrow_app/features/devices/model/device_control_model.dart';
|
|
import 'package:syncrow_app/features/scene/model/scene_static_function.dart';
|
|
|
|
part 'create_scene_event.dart';
|
|
part 'create_scene_state.dart';
|
|
|
|
class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState> {
|
|
CreateSceneBloc() : super(CreateSceneInitial()) {
|
|
on<CreateSceneEvent>((event, emit) => null as FutureOr<void>);
|
|
on<AddTaskEvent>(_onAddSceneTask);
|
|
on<SelectedValueEvent>(_selectedValue);
|
|
on<RemoveTaskEvent>(_removeTaskById);
|
|
}
|
|
|
|
List<SceneStaticFunction> tasksList = [];
|
|
String selectedValue = '';
|
|
|
|
FutureOr<void> _onAddSceneTask(
|
|
AddTaskEvent event, Emitter<CreateSceneState> emit) {
|
|
tasksList.add(
|
|
SceneStaticFunction(
|
|
operationName: event.operation,
|
|
deviceName: event.deviceName,
|
|
icon: event.icon,
|
|
code: event.deviceControlModel.code ?? '',
|
|
deviceId: event.deviceId,
|
|
operationalValues: [
|
|
SceneOperationalValue(
|
|
value: event.deviceControlModel.value,
|
|
icon: '',
|
|
),
|
|
],
|
|
),
|
|
);
|
|
emit(AddSceneTask(tasksList: tasksList));
|
|
}
|
|
|
|
FutureOr<void> _selectedValue(
|
|
SelectedValueEvent event, Emitter<CreateSceneState> emit) {
|
|
selectedValue = event.value;
|
|
emit(SelectedTaskValueState(value: event.value));
|
|
}
|
|
|
|
FutureOr<void> _removeTaskById(
|
|
RemoveTaskEvent event, Emitter<CreateSceneState> emit) {
|
|
emit(CreateSceneLoading());
|
|
|
|
for (var element in tasksList) {
|
|
if (element.uniqueCustomId == event.taskId) {
|
|
tasksList.remove(element);
|
|
|
|
emit(AddSceneTask(tasksList: tasksList));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|