mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2025-11-26 22:44:54 +00:00
push temp list logic before saving
This commit is contained in:
@ -291,4 +291,4 @@ SPEC CHECKSUMS:
|
|||||||
|
|
||||||
PODFILE CHECKSUM: cf86fcba3fb3dbd505936bc190bb0b8fe3dd2498
|
PODFILE CHECKSUM: cf86fcba3fb3dbd505936bc190bb0b8fe3dd2498
|
||||||
|
|
||||||
COCOAPODS: 1.15.2
|
COCOAPODS: 1.14.3
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:bloc/bloc.dart';
|
import 'package:bloc/bloc.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:syncrow_app/features/devices/model/device_control_model.dart';
|
import 'package:syncrow_app/features/devices/model/device_control_model.dart';
|
||||||
@ -17,18 +16,56 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
|||||||
on<CreateSceneWithTasksEvent>(_createSceneWithTasks);
|
on<CreateSceneWithTasksEvent>(_createSceneWithTasks);
|
||||||
on<AddTaskEvent>(_onAddSceneTask);
|
on<AddTaskEvent>(_onAddSceneTask);
|
||||||
on<SelectedValueEvent>(_selectedValue);
|
on<SelectedValueEvent>(_selectedValue);
|
||||||
on<RemoveTaskEvent>(_removeTaskById);
|
on<RemoveTaskByIdEvent>(_removeTaskById);
|
||||||
on<ClearTaskListEvent>(_clearTaskList);
|
on<ClearTaskListEvent>(_clearTaskList);
|
||||||
on<FetchSceneTasks>(_fetchSceneTasks);
|
on<ClearTempTaskListEvent>(_clearTempTaskList);
|
||||||
|
on<FetchSceneTasksEvent>(_fetchSceneTasks);
|
||||||
|
on<TempHoldSceneTasksEvent>(_onTempHoldSceneTask);
|
||||||
|
on<RemoveTempTaskByIdEvent>(_removeTempTaskById);
|
||||||
|
on<RemoveFromSelectedValueById>(_removeFromSelectedValueById);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<SceneStaticFunction> tasksList = [];
|
List<SceneStaticFunction> tasksList = [];
|
||||||
dynamic selectedValue;
|
List<SceneStaticFunction> tempTasksList = [];
|
||||||
|
final Map<String, dynamic> selectedValues = {};
|
||||||
|
|
||||||
FutureOr<void> _onAddSceneTask(
|
FutureOr<void> _onAddSceneTask(
|
||||||
AddTaskEvent event, Emitter<CreateSceneState> emit) {
|
AddTaskEvent event, Emitter<CreateSceneState> emit) {
|
||||||
tasksList.add(
|
tasksList = List<SceneStaticFunction>.from(tempTasksList);
|
||||||
SceneStaticFunction(
|
emit(AddSceneTask(tasksList: tasksList));
|
||||||
|
tempTasksList.clear();
|
||||||
|
emit(TempHoldSceneTask(tempTasksList: tempTasksList));
|
||||||
|
}
|
||||||
|
|
||||||
|
FutureOr<void> _onTempHoldSceneTask(
|
||||||
|
TempHoldSceneTasksEvent event, Emitter<CreateSceneState> emit) {
|
||||||
|
bool updated = false;
|
||||||
|
for (var element in tempTasksList) {
|
||||||
|
if (element.code == event.deviceControlModel.code) {
|
||||||
|
// Update the existing function with new values
|
||||||
|
var updatedElement = element.copyWith(
|
||||||
|
operationName: event.operation,
|
||||||
|
deviceName: event.deviceName,
|
||||||
|
icon: event.icon,
|
||||||
|
code: event.deviceControlModel.code ?? '',
|
||||||
|
deviceId: event.deviceId,
|
||||||
|
functionValue: event.deviceControlModel.value,
|
||||||
|
operationalValues: [
|
||||||
|
SceneOperationalValue(
|
||||||
|
value: event.deviceControlModel.value,
|
||||||
|
icon: '',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
tempTasksList[tempTasksList.indexOf(element)] = updatedElement;
|
||||||
|
selectedValues[updatedElement.code] = event.deviceControlModel.value;
|
||||||
|
updated = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!updated) {
|
||||||
|
// Add new function if not found
|
||||||
|
var newElement = SceneStaticFunction(
|
||||||
operationName: event.operation,
|
operationName: event.operation,
|
||||||
deviceName: event.deviceName,
|
deviceName: event.deviceName,
|
||||||
icon: event.icon,
|
icon: event.icon,
|
||||||
@ -41,19 +78,22 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
|||||||
icon: '',
|
icon: '',
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
);
|
||||||
);
|
tempTasksList.add(newElement);
|
||||||
emit(AddSceneTask(tasksList: tasksList));
|
selectedValues[newElement.code] = event.deviceControlModel.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
emit(TempHoldSceneTask(tempTasksList: tempTasksList));
|
||||||
}
|
}
|
||||||
|
|
||||||
FutureOr<void> _selectedValue(
|
FutureOr<void> _selectedValue(
|
||||||
SelectedValueEvent event, Emitter<CreateSceneState> emit) {
|
SelectedValueEvent event, Emitter<CreateSceneState> emit) {
|
||||||
selectedValue = event.value;
|
selectedValues[event.code] = event.value;
|
||||||
emit(SelectedTaskValueState(value: event.value));
|
emit(SelectedTaskValueState(value: event.value));
|
||||||
}
|
}
|
||||||
|
|
||||||
FutureOr<void> _removeTaskById(
|
FutureOr<void> _removeTaskById(
|
||||||
RemoveTaskEvent event, Emitter<CreateSceneState> emit) {
|
RemoveTaskByIdEvent event, Emitter<CreateSceneState> emit) {
|
||||||
emit(CreateSceneLoading());
|
emit(CreateSceneLoading());
|
||||||
|
|
||||||
for (var element in tasksList) {
|
for (var element in tasksList) {
|
||||||
@ -66,6 +106,18 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FutureOr<void> _removeTempTaskById(
|
||||||
|
RemoveTempTaskByIdEvent event, Emitter<CreateSceneState> emit) {
|
||||||
|
for (var element in tempTasksList) {
|
||||||
|
if (element.code == event.code) {
|
||||||
|
tempTasksList.remove(element);
|
||||||
|
|
||||||
|
emit(TempHoldSceneTask(tempTasksList: tempTasksList));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FutureOr<void> _createSceneWithTasks(
|
FutureOr<void> _createSceneWithTasks(
|
||||||
CreateSceneWithTasksEvent event, Emitter<CreateSceneState> emit) async {
|
CreateSceneWithTasksEvent event, Emitter<CreateSceneState> emit) async {
|
||||||
emit(CreateSceneLoading());
|
emit(CreateSceneLoading());
|
||||||
@ -73,6 +125,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
|||||||
final response = await SceneApi.createScene(event.createSceneModel);
|
final response = await SceneApi.createScene(event.createSceneModel);
|
||||||
if (response['success'] == true) {
|
if (response['success'] == true) {
|
||||||
tasksList.clear();
|
tasksList.clear();
|
||||||
|
tempTasksList.clear();
|
||||||
emit(const CreateSceneWithTasks(success: true));
|
emit(const CreateSceneWithTasks(success: true));
|
||||||
} else {
|
} else {
|
||||||
emit(const CreateSceneError(message: 'Something went wrong'));
|
emit(const CreateSceneError(message: 'Something went wrong'));
|
||||||
@ -90,14 +143,14 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
|||||||
}
|
}
|
||||||
|
|
||||||
FutureOr<void> _fetchSceneTasks(
|
FutureOr<void> _fetchSceneTasks(
|
||||||
FetchSceneTasks event, Emitter<CreateSceneState> emit) async {
|
FetchSceneTasksEvent event, Emitter<CreateSceneState> emit) async {
|
||||||
emit(CreateSceneLoading());
|
emit(CreateSceneLoading());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final response = await SceneApi.getSceneDetails(event.sceneId);
|
final response = await SceneApi.getSceneDetails(event.sceneId);
|
||||||
if (response.id.isNotEmpty) {
|
if (response.id.isNotEmpty) {
|
||||||
tasksList = getTaskListFunctionsFromApi(
|
tasksList = List.from(getTaskListFunctionsFromApi(
|
||||||
actions: response.actions, deviceId: response.id);
|
actions: response.actions, deviceId: response.id));
|
||||||
emit(AddSceneTask(tasksList: tasksList));
|
emit(AddSceneTask(tasksList: tasksList));
|
||||||
} else {
|
} else {
|
||||||
emit(const CreateSceneError(message: 'Something went wrong'));
|
emit(const CreateSceneError(message: 'Something went wrong'));
|
||||||
@ -106,4 +159,19 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
|||||||
emit(CreateSceneError(message: e.toString()));
|
emit(CreateSceneError(message: e.toString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FutureOr<void> _clearTempTaskList(
|
||||||
|
ClearTempTaskListEvent event, Emitter<CreateSceneState> emit) {
|
||||||
|
tempTasksList.clear();
|
||||||
|
selectedValues.clear();
|
||||||
|
emit(TempHoldSceneTask(tempTasksList: tempTasksList));
|
||||||
|
}
|
||||||
|
|
||||||
|
FutureOr<void> _removeFromSelectedValueById(
|
||||||
|
RemoveFromSelectedValueById event, Emitter<CreateSceneState> emit) {
|
||||||
|
if (selectedValues.containsKey(event.code)) {
|
||||||
|
selectedValues.remove(event.code);
|
||||||
|
emit(const SelectedTaskValueState(value: null));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,43 +8,76 @@ sealed class CreateSceneEvent extends Equatable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class AddTaskEvent extends CreateSceneEvent {
|
class AddTaskEvent extends CreateSceneEvent {
|
||||||
|
@override
|
||||||
|
List<Object> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
class TempHoldSceneTasksEvent extends CreateSceneEvent {
|
||||||
final DeviceControlModel deviceControlModel;
|
final DeviceControlModel deviceControlModel;
|
||||||
final String deviceId;
|
final String deviceId;
|
||||||
final String icon;
|
final String icon;
|
||||||
final String operation;
|
final String operation;
|
||||||
final String deviceName;
|
final String deviceName;
|
||||||
|
final String uniqueId;
|
||||||
|
|
||||||
const AddTaskEvent({
|
const TempHoldSceneTasksEvent({
|
||||||
required this.deviceControlModel,
|
required this.deviceControlModel,
|
||||||
required this.deviceId,
|
required this.deviceId,
|
||||||
required this.icon,
|
required this.icon,
|
||||||
required this.operation,
|
required this.operation,
|
||||||
required this.deviceName,
|
required this.deviceName,
|
||||||
|
required this.uniqueId,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object> get props =>
|
List<Object> get props => [
|
||||||
[deviceControlModel, deviceId, deviceName, icon, operation];
|
deviceControlModel,
|
||||||
|
deviceId,
|
||||||
|
deviceName,
|
||||||
|
icon,
|
||||||
|
operation,
|
||||||
|
uniqueId,
|
||||||
|
deviceName,
|
||||||
|
icon
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
class SelectedValueEvent extends CreateSceneEvent {
|
class SelectedValueEvent extends CreateSceneEvent {
|
||||||
final dynamic value;
|
final dynamic value;
|
||||||
|
final String code;
|
||||||
|
|
||||||
const SelectedValueEvent({this.value});
|
const SelectedValueEvent({this.value, required this.code});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [value!];
|
List<Object> get props => [value!, code];
|
||||||
}
|
}
|
||||||
|
|
||||||
class RemoveTaskEvent extends CreateSceneEvent {
|
class RemoveTaskByIdEvent extends CreateSceneEvent {
|
||||||
final String taskId;
|
final String taskId;
|
||||||
|
|
||||||
const RemoveTaskEvent({required this.taskId});
|
const RemoveTaskByIdEvent({required this.taskId});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [taskId];
|
List<Object> get props => [taskId];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class RemoveTempTaskByIdEvent extends CreateSceneEvent {
|
||||||
|
final String code;
|
||||||
|
const RemoveTempTaskByIdEvent({required this.code});
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [code];
|
||||||
|
}
|
||||||
|
|
||||||
|
class RemoveFromSelectedValueById extends CreateSceneEvent {
|
||||||
|
final String code;
|
||||||
|
|
||||||
|
const RemoveFromSelectedValueById({required this.code});
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [code];
|
||||||
|
}
|
||||||
|
|
||||||
class CreateSceneWithTasksEvent extends CreateSceneEvent {
|
class CreateSceneWithTasksEvent extends CreateSceneEvent {
|
||||||
final CreateSceneModel createSceneModel;
|
final CreateSceneModel createSceneModel;
|
||||||
const CreateSceneWithTasksEvent({required this.createSceneModel});
|
const CreateSceneWithTasksEvent({required this.createSceneModel});
|
||||||
@ -60,9 +93,16 @@ class ClearTaskListEvent extends CreateSceneEvent {
|
|||||||
List<Object> get props => [];
|
List<Object> get props => [];
|
||||||
}
|
}
|
||||||
|
|
||||||
class FetchSceneTasks extends CreateSceneEvent {
|
class ClearTempTaskListEvent extends CreateSceneEvent {
|
||||||
final String sceneId;
|
const ClearTempTaskListEvent();
|
||||||
const FetchSceneTasks({required this.sceneId});
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
class FetchSceneTasksEvent extends CreateSceneEvent {
|
||||||
|
final String sceneId;
|
||||||
|
const FetchSceneTasksEvent({required this.sceneId});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [];
|
List<Object> get props => [];
|
||||||
|
|||||||
@ -27,6 +27,14 @@ class AddSceneTask extends CreateSceneState {
|
|||||||
List<Object> get props => [tasksList];
|
List<Object> get props => [tasksList];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TempHoldSceneTask extends CreateSceneState {
|
||||||
|
final List<SceneStaticFunction> tempTasksList;
|
||||||
|
const TempHoldSceneTask({required this.tempTasksList});
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [tempTasksList];
|
||||||
|
}
|
||||||
|
|
||||||
class SelectedTaskValueState extends CreateSceneState {
|
class SelectedTaskValueState extends CreateSceneState {
|
||||||
final dynamic value;
|
final dynamic value;
|
||||||
const SelectedTaskValueState({required this.value});
|
const SelectedTaskValueState({required this.value});
|
||||||
|
|||||||
@ -3,7 +3,6 @@ import 'dart:async';
|
|||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_event.dart';
|
import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_event.dart';
|
||||||
import 'package:syncrow_app/features/scene/model/create_scene_model.dart';
|
|
||||||
import 'package:syncrow_app/features/scene/model/scenes_model.dart';
|
import 'package:syncrow_app/features/scene/model/scenes_model.dart';
|
||||||
import 'package:syncrow_app/services/api/scene_api.dart';
|
import 'package:syncrow_app/services/api/scene_api.dart';
|
||||||
|
|
||||||
|
|||||||
@ -3,8 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
|||||||
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
||||||
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
|
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
|
||||||
import 'package:syncrow_app/features/scene/model/create_scene_model.dart';
|
import 'package:syncrow_app/features/scene/model/create_scene_model.dart';
|
||||||
import 'package:syncrow_app/features/scene/model/scene_details_model.dart';
|
|
||||||
import 'package:syncrow_app/features/scene/model/scenes_model.dart';
|
|
||||||
import 'package:syncrow_app/features/scene/model/scene_static_function.dart';
|
import 'package:syncrow_app/features/scene/model/scene_static_function.dart';
|
||||||
import 'package:syncrow_app/utils/context_extension.dart';
|
import 'package:syncrow_app/utils/context_extension.dart';
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
import 'package:syncrow_app/features/devices/model/function_model.dart';
|
import 'package:syncrow_app/features/devices/model/function_model.dart';
|
||||||
import 'package:syncrow_app/features/scene/enum/ac_values.dart';
|
import 'package:syncrow_app/features/scene/enum/ac_values.dart';
|
||||||
import 'package:syncrow_app/features/scene/model/create_scene_model.dart';
|
|
||||||
import 'package:syncrow_app/features/scene/model/scene_details_model.dart';
|
import 'package:syncrow_app/features/scene/model/scene_details_model.dart';
|
||||||
import 'package:syncrow_app/features/scene/model/scenes_model.dart';
|
|
||||||
import 'package:syncrow_app/features/scene/model/scene_static_function.dart';
|
import 'package:syncrow_app/features/scene/model/scene_static_function.dart';
|
||||||
import 'package:syncrow_app/generated/assets.dart';
|
import 'package:syncrow_app/generated/assets.dart';
|
||||||
import 'package:syncrow_app/utils/resource_manager/constants.dart';
|
import 'package:syncrow_app/utils/resource_manager/constants.dart';
|
||||||
|
|||||||
@ -34,6 +34,7 @@ class SceneStaticFunction {
|
|||||||
String? operationName,
|
String? operationName,
|
||||||
dynamic functionValue,
|
dynamic functionValue,
|
||||||
String? deviceIcon,
|
String? deviceIcon,
|
||||||
|
String? deviceName,
|
||||||
}) {
|
}) {
|
||||||
return SceneStaticFunction(
|
return SceneStaticFunction(
|
||||||
icon: icon ?? this.icon,
|
icon: icon ?? this.icon,
|
||||||
@ -57,6 +58,7 @@ class SceneStaticFunction {
|
|||||||
'operationName': operationName,
|
'operationName': operationName,
|
||||||
'functionValue': functionValue,
|
'functionValue': functionValue,
|
||||||
'deviceIcon': deviceIcon
|
'deviceIcon': deviceIcon
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -46,6 +46,7 @@ class DeviceFunctionsView extends StatelessWidget
|
|||||||
actions: [
|
actions: [
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
context.read<CreateSceneBloc>().add(AddTaskEvent());
|
||||||
Navigator.popUntil(context, (route) {
|
Navigator.popUntil(context, (route) {
|
||||||
return route.settings.name == Routes.sceneTasksRoute;
|
return route.settings.name == Routes.sceneTasksRoute;
|
||||||
});
|
});
|
||||||
@ -58,7 +59,10 @@ class DeviceFunctionsView extends StatelessWidget
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
leading: TextButton(
|
leading: TextButton(
|
||||||
onPressed: () => Navigator.pop(context),
|
onPressed: () {
|
||||||
|
context.read<CreateSceneBloc>().add(const ClearTaskListEvent());
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
child: BodyMedium(
|
child: BodyMedium(
|
||||||
text: 'Cancel',
|
text: 'Cancel',
|
||||||
fontWeight: FontWeight.normal,
|
fontWeight: FontWeight.normal,
|
||||||
@ -114,10 +118,16 @@ class DeviceFunctionsView extends StatelessWidget
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
final functionValues = context
|
||||||
|
.read<CreateSceneBloc>()
|
||||||
|
.selectedValues[functions[index].code];
|
||||||
context.customAlertDialog(
|
context.customAlertDialog(
|
||||||
alertBody: functions[index].code == 'temp_set'
|
alertBody: functions[index].code == 'temp_set'
|
||||||
? AlertDialogTemperatureBody(
|
? AlertDialogTemperatureBody(
|
||||||
index: index, functions: functions,)
|
index: index,
|
||||||
|
functions: functions,
|
||||||
|
functionValue: functionValues,
|
||||||
|
)
|
||||||
: (functions[index]
|
: (functions[index]
|
||||||
.code
|
.code
|
||||||
.contains('countdown') ||
|
.contains('countdown') ||
|
||||||
@ -128,17 +138,23 @@ class DeviceFunctionsView extends StatelessWidget
|
|||||||
durationValue: functions[index]
|
durationValue: functions[index]
|
||||||
.operationalValues
|
.operationalValues
|
||||||
.first
|
.first
|
||||||
.value)
|
.value,
|
||||||
|
function: functions[index],
|
||||||
|
functionValue: functionValues,
|
||||||
|
)
|
||||||
: AlertDialogFunctionsOperationsBody(
|
: AlertDialogFunctionsOperationsBody(
|
||||||
index: index, functions: functions),
|
index: index,
|
||||||
|
functions: functions,
|
||||||
|
functionValue: functionValues,
|
||||||
|
),
|
||||||
title: functions[index].operationName,
|
title: functions[index].operationName,
|
||||||
onConfirm: () {
|
onConfirm: () {
|
||||||
final selectedValue = context
|
final selectedValue = context
|
||||||
.read<CreateSceneBloc>()
|
.read<CreateSceneBloc>()
|
||||||
.selectedValue;
|
.selectedValues[functions[index].code];
|
||||||
context
|
context
|
||||||
.read<CreateSceneBloc>()
|
.read<CreateSceneBloc>()
|
||||||
.add(AddTaskEvent(
|
.add(TempHoldSceneTasksEvent(
|
||||||
deviceControlModel: DeviceControlModel(
|
deviceControlModel: DeviceControlModel(
|
||||||
deviceId: device.uuid,
|
deviceId: device.uuid,
|
||||||
code: functions[index].code,
|
code: functions[index].code,
|
||||||
@ -148,9 +164,32 @@ class DeviceFunctionsView extends StatelessWidget
|
|||||||
operation: functions[index].operationName,
|
operation: functions[index].operationName,
|
||||||
icon: device.icon ?? '',
|
icon: device.icon ?? '',
|
||||||
deviceName: device.name ?? '',
|
deviceName: device.name ?? '',
|
||||||
|
uniqueId: functions[index].uniqueCustomId,
|
||||||
));
|
));
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
},
|
},
|
||||||
|
onDismiss: () {
|
||||||
|
final tempTaskList = context
|
||||||
|
.read<CreateSceneBloc>()
|
||||||
|
.tempTasksList;
|
||||||
|
if (tempTaskList.isEmpty) {
|
||||||
|
context
|
||||||
|
.read<CreateSceneBloc>()
|
||||||
|
.add(const ClearTempTaskListEvent());
|
||||||
|
} else {
|
||||||
|
for (var element in tempTaskList) {
|
||||||
|
if (element.code == functions[index].code) {
|
||||||
|
context.read<CreateSceneBloc>().add(
|
||||||
|
RemoveTempTaskByIdEvent(
|
||||||
|
code: functions[index].code));
|
||||||
|
context.read<CreateSceneBloc>().add(
|
||||||
|
RemoveFromSelectedValueById(
|
||||||
|
code: functions[index].code));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,14 +1,22 @@
|
|||||||
|
// ignore_for_file: must_be_immutable
|
||||||
|
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
|
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
|
||||||
|
import 'package:syncrow_app/features/scene/model/scene_static_function.dart';
|
||||||
|
|
||||||
class AlertDialogCountdown extends StatefulWidget {
|
class AlertDialogCountdown extends StatefulWidget {
|
||||||
AlertDialogCountdown(
|
AlertDialogCountdown({
|
||||||
{super.key, required this.durationValue, this.functionValue});
|
super.key,
|
||||||
|
required this.durationValue,
|
||||||
|
this.functionValue,
|
||||||
|
required this.function,
|
||||||
|
});
|
||||||
|
|
||||||
final int durationValue;
|
final int durationValue;
|
||||||
dynamic functionValue;
|
dynamic functionValue;
|
||||||
|
SceneStaticFunction function;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<AlertDialogCountdown> createState() => _AlertDialogCountdownState();
|
State<AlertDialogCountdown> createState() => _AlertDialogCountdownState();
|
||||||
@ -18,6 +26,17 @@ class _AlertDialogCountdownState extends State<AlertDialogCountdown> {
|
|||||||
@override
|
@override
|
||||||
didChangeDependencies() {
|
didChangeDependencies() {
|
||||||
super.didChangeDependencies();
|
super.didChangeDependencies();
|
||||||
|
final tempTaskList = context.read<CreateSceneBloc>().tempTasksList;
|
||||||
|
|
||||||
|
for (var element in tempTaskList) {
|
||||||
|
if (element.code == widget.function.code) {
|
||||||
|
durationInSeconds = element.functionValue;
|
||||||
|
} else {
|
||||||
|
context
|
||||||
|
.read<CreateSceneBloc>()
|
||||||
|
.add(RemoveFromSelectedValueById(code: widget.function.code));
|
||||||
|
}
|
||||||
|
}
|
||||||
if (widget.functionValue != null) {
|
if (widget.functionValue != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
durationInSeconds = widget.functionValue;
|
durationInSeconds = widget.functionValue;
|
||||||
@ -41,9 +60,8 @@ class _AlertDialogCountdownState extends State<AlertDialogCountdown> {
|
|||||||
setState(() {
|
setState(() {
|
||||||
durationInSeconds = newDuration.inSeconds;
|
durationInSeconds = newDuration.inSeconds;
|
||||||
});
|
});
|
||||||
context
|
context.read<CreateSceneBloc>().add(SelectedValueEvent(
|
||||||
.read<CreateSceneBloc>()
|
value: newDuration.inSeconds, code: widget.function.code));
|
||||||
.add(SelectedValueEvent(value: newDuration.inSeconds));
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
// ignore_for_file: must_be_immutable
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
|
import 'package:syncrow_app/features/scene/bloc/create_scene/create_scene_bloc.dart';
|
||||||
@ -26,6 +28,19 @@ class _AlertDialogFunctionsOperationsBodyState
|
|||||||
@override
|
@override
|
||||||
didChangeDependencies() {
|
didChangeDependencies() {
|
||||||
super.didChangeDependencies();
|
super.didChangeDependencies();
|
||||||
|
final tempTaskList = context.read<CreateSceneBloc>().tempTasksList;
|
||||||
|
if (tempTaskList.isEmpty) {
|
||||||
|
context.read<CreateSceneBloc>().add(const ClearTempTaskListEvent());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var element in tempTaskList) {
|
||||||
|
if (element.code == widget.functions[widget.index].code) {
|
||||||
|
groupValue = element.functionValue;
|
||||||
|
} else {
|
||||||
|
context.read<CreateSceneBloc>().add(RemoveFromSelectedValueById(
|
||||||
|
code: widget.functions[widget.index].code));
|
||||||
|
}
|
||||||
|
}
|
||||||
if (widget.functionValue != null) {
|
if (widget.functionValue != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
groupValue = widget.functionValue;
|
groupValue = widget.functionValue;
|
||||||
@ -60,18 +75,18 @@ class _AlertDialogFunctionsOperationsBodyState
|
|||||||
setState(() {
|
setState(() {
|
||||||
groupValue = value;
|
groupValue = value;
|
||||||
});
|
});
|
||||||
context
|
context.read<CreateSceneBloc>().add(SelectedValueEvent(
|
||||||
.read<CreateSceneBloc>()
|
value: value!,
|
||||||
.add(SelectedValueEvent(value: value!));
|
code: widget.functions[widget.index].code));
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
groupValue = operation.value;
|
groupValue = operation.value;
|
||||||
});
|
});
|
||||||
context
|
context.read<CreateSceneBloc>().add(SelectedValueEvent(
|
||||||
.read<CreateSceneBloc>()
|
value: groupValue,
|
||||||
.add(SelectedValueEvent(value: groupValue));
|
code: widget.functions[widget.index].code));
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
// ignore_for_file: must_be_immutable
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
@ -31,6 +33,16 @@ class _AlertDialogTemperatureBodyState
|
|||||||
@override
|
@override
|
||||||
didChangeDependencies() {
|
didChangeDependencies() {
|
||||||
super.didChangeDependencies();
|
super.didChangeDependencies();
|
||||||
|
final tempTaskList = context.read<CreateSceneBloc>().tempTasksList;
|
||||||
|
|
||||||
|
for (var element in tempTaskList) {
|
||||||
|
if (element.code == widget.functions[widget.index].code) {
|
||||||
|
temperature = element.functionValue;
|
||||||
|
} else {
|
||||||
|
context.read<CreateSceneBloc>().add(RemoveFromSelectedValueById(
|
||||||
|
code: widget.functions[widget.index].code));
|
||||||
|
}
|
||||||
|
}
|
||||||
if (widget.functionValue != null) {
|
if (widget.functionValue != null) {
|
||||||
setState(() {
|
setState(() {
|
||||||
temperature = widget.functionValue;
|
temperature = widget.functionValue;
|
||||||
@ -50,9 +62,9 @@ class _AlertDialogTemperatureBodyState
|
|||||||
temperature--;
|
temperature--;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
context
|
context.read<CreateSceneBloc>().add(SelectedValueEvent(
|
||||||
.read<CreateSceneBloc>()
|
value: temperature * 10,
|
||||||
.add(SelectedValueEvent(value: temperature * 10));
|
code: widget.functions[widget.index].code));
|
||||||
},
|
},
|
||||||
icon: const Icon(
|
icon: const Icon(
|
||||||
Icons.remove,
|
Icons.remove,
|
||||||
@ -93,9 +105,9 @@ class _AlertDialogTemperatureBodyState
|
|||||||
temperature++;
|
temperature++;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
context
|
context.read<CreateSceneBloc>().add(SelectedValueEvent(
|
||||||
.read<CreateSceneBloc>()
|
value: temperature * 10,
|
||||||
.add(SelectedValueEvent(value: temperature * 10));
|
code: widget.functions[widget.index].code));
|
||||||
},
|
},
|
||||||
icon: const Icon(
|
icon: const Icon(
|
||||||
Icons.add,
|
Icons.add,
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
// ignore_for_file: must_be_immutable
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
@ -61,6 +63,7 @@ class ThenAddedTasksContainer extends StatelessWidget {
|
|||||||
durationValue:
|
durationValue:
|
||||||
listOfSceneStaticFunction![index!].functionValue,
|
listOfSceneStaticFunction![index!].functionValue,
|
||||||
functionValue: taskList.functionValue,
|
functionValue: taskList.functionValue,
|
||||||
|
function: listOfSceneStaticFunction![index!],
|
||||||
)
|
)
|
||||||
: AlertDialogFunctionsOperationsBody(
|
: AlertDialogFunctionsOperationsBody(
|
||||||
index: index!,
|
index: index!,
|
||||||
@ -69,7 +72,7 @@ class ThenAddedTasksContainer extends StatelessWidget {
|
|||||||
title: listOfSceneStaticFunction![index!].operationName,
|
title: listOfSceneStaticFunction![index!].operationName,
|
||||||
onConfirm: () {
|
onConfirm: () {
|
||||||
// final selectedValue = context.read<CreateSceneBloc>().selectedValue;
|
// final selectedValue = context.read<CreateSceneBloc>().selectedValue;
|
||||||
// context.read<CreateSceneBloc>().add(AddTaskEvent(
|
// context.read<CreateSceneBloc>().add(TempHoldSceneTasksEvent(
|
||||||
// deviceControlModel: DeviceControlModel(
|
// deviceControlModel: DeviceControlModel(
|
||||||
// deviceId: device.uuid,
|
// deviceId: device.uuid,
|
||||||
// code: functions[index].code,
|
// code: functions[index].code,
|
||||||
@ -111,7 +114,7 @@ class ThenAddedTasksContainer extends StatelessWidget {
|
|||||||
|
|
||||||
context
|
context
|
||||||
.read<CreateSceneBloc>()
|
.read<CreateSceneBloc>()
|
||||||
.add(RemoveTaskEvent(taskId: removeFunctionById));
|
.add(RemoveTaskByIdEvent(taskId: removeFunctionById));
|
||||||
|
|
||||||
String removeFunction =
|
String removeFunction =
|
||||||
"${taskList.operationName} with value ${taskList.operationalValues.first.value}";
|
"${taskList.operationName} with value ${taskList.operationalValues.first.value}";
|
||||||
|
|||||||
@ -52,8 +52,8 @@ class ThenDefaultContainer extends StatelessWidget {
|
|||||||
const LightDivider(),
|
const LightDivider(),
|
||||||
sceneId.isNotEmpty
|
sceneId.isNotEmpty
|
||||||
? BlocProvider(
|
? BlocProvider(
|
||||||
create: (context) =>
|
create: (context) => CreateSceneBloc()
|
||||||
CreateSceneBloc()..add(FetchSceneTasks(sceneId: sceneId)),
|
..add(FetchSceneTasksEvent(sceneId: sceneId)),
|
||||||
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(
|
child: BlocBuilder<CreateSceneBloc, CreateSceneState>(
|
||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
if (state is CreateSceneLoading) {
|
if (state is CreateSceneLoading) {
|
||||||
|
|||||||
@ -69,12 +69,14 @@ class SceneItem extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
BodyMedium(
|
FittedBox(
|
||||||
text: scene.name,
|
child: BodyMedium(
|
||||||
maxLines: 1,
|
text: scene.name,
|
||||||
overflow: TextOverflow.fade,
|
maxLines: 1,
|
||||||
fontWeight: FontWeight.bold,
|
overflow: TextOverflow.fade,
|
||||||
fontSize: 16,
|
fontWeight: FontWeight.bold,
|
||||||
|
fontSize: 16,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@ -14,7 +14,8 @@ extension ContextExtension on BuildContext {
|
|||||||
|
|
||||||
double get height => MediaQuery.sizeOf(this).height;
|
double get height => MediaQuery.sizeOf(this).height;
|
||||||
|
|
||||||
InputDecorationTheme get inputDecoration => Theme.of(this).inputDecorationTheme;
|
InputDecorationTheme get inputDecoration =>
|
||||||
|
Theme.of(this).inputDecorationTheme;
|
||||||
|
|
||||||
TextStyle get displayLarge => Theme.of(this).textTheme.displayLarge!;
|
TextStyle get displayLarge => Theme.of(this).textTheme.displayLarge!;
|
||||||
|
|
||||||
@ -59,8 +60,12 @@ extension ContextExtension on BuildContext {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void customAlertDialog(
|
void customAlertDialog({
|
||||||
{required Widget alertBody, required String title, required VoidCallback onConfirm}) {
|
required Widget alertBody,
|
||||||
|
required String title,
|
||||||
|
required VoidCallback onConfirm,
|
||||||
|
VoidCallback? onDismiss,
|
||||||
|
}) {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: this,
|
context: this,
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
@ -109,13 +114,15 @@ extension ContextExtension on BuildContext {
|
|||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
children: [
|
children: [
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: () {
|
onTap: onDismiss ??
|
||||||
Navigator.pop(context);
|
() {
|
||||||
},
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
child: Center(
|
child: Center(
|
||||||
child: BodyMedium(
|
child: BodyMedium(
|
||||||
text: 'Cancel',
|
text: 'Cancel',
|
||||||
style: context.bodyMedium.copyWith(color: ColorsManager.greyColor),
|
style: context.bodyMedium
|
||||||
|
.copyWith(color: ColorsManager.greyColor),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -129,8 +136,8 @@ extension ContextExtension on BuildContext {
|
|||||||
child: Center(
|
child: Center(
|
||||||
child: BodyMedium(
|
child: BodyMedium(
|
||||||
text: 'Confirm',
|
text: 'Confirm',
|
||||||
style: context.bodyMedium
|
style: context.bodyMedium.copyWith(
|
||||||
.copyWith(color: ColorsManager.primaryColorWithOpacity),
|
color: ColorsManager.primaryColorWithOpacity),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user