mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-10 07:07:19 +00:00
push schedule basic design and bloc manegment
This commit is contained in:
@ -3,6 +3,7 @@
|
||||
import 'dart:async';
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart';
|
||||
import 'package:syncrow_web/pages/device_managment/water_heater/models/water_heater_status_model.dart';
|
||||
import 'package:syncrow_web/services/devices_mang_api.dart';
|
||||
@ -17,6 +18,9 @@ class WaterHeaterBloc extends Bloc<WaterHeaterEvent, WaterHeaterState> {
|
||||
on<UpdateScheduleEvent>(_updateScheduleEvent);
|
||||
on<StopScheduleEvent>(_stopScheduleEvent);
|
||||
on<DecrementCountdownEvent>(_onDecrementCountdown);
|
||||
on<AddScheduleEvent>(_onAddSchedule);
|
||||
on<DeleteScheduleEvent>(_onDeleteSchedule);
|
||||
on<UpdateScheduleEntryEvent>(_onUpdateSchedule);
|
||||
}
|
||||
|
||||
late WaterHeaterStatusModel deviceStatus;
|
||||
@ -179,7 +183,7 @@ class WaterHeaterBloc extends Bloc<WaterHeaterEvent, WaterHeaterState> {
|
||||
}
|
||||
}
|
||||
|
||||
_onDecrementCountdown(
|
||||
_onDecrementCountdown(
|
||||
DecrementCountdownEvent event,
|
||||
Emitter<WaterHeaterState> emit,
|
||||
) {
|
||||
@ -294,6 +298,54 @@ class WaterHeaterBloc extends Bloc<WaterHeaterEvent, WaterHeaterState> {
|
||||
}
|
||||
}
|
||||
|
||||
FutureOr<void> _onAddSchedule(
|
||||
AddScheduleEvent event,
|
||||
Emitter<WaterHeaterState> emit,
|
||||
) {
|
||||
if (state is WaterHeaterDeviceStatusLoaded) {
|
||||
final currentState = state as WaterHeaterDeviceStatusLoaded;
|
||||
final newSchedule = ScheduleEntry(
|
||||
selectedDays: event.selectedDays,
|
||||
time: event.time,
|
||||
functionOn: event.functionOn,
|
||||
);
|
||||
final updatedSchedules = List<ScheduleEntry>.from(currentState.schedules)
|
||||
..add(newSchedule);
|
||||
|
||||
emit(currentState.copyWith(schedules: updatedSchedules));
|
||||
}
|
||||
}
|
||||
|
||||
FutureOr<void> _onDeleteSchedule(
|
||||
DeleteScheduleEvent event,
|
||||
Emitter<WaterHeaterState> emit,
|
||||
) {
|
||||
if (state is WaterHeaterDeviceStatusLoaded) {
|
||||
final currentState = state as WaterHeaterDeviceStatusLoaded;
|
||||
final updatedSchedules = List<ScheduleEntry>.from(currentState.schedules)
|
||||
..removeAt(event.index);
|
||||
|
||||
emit(currentState.copyWith(schedules: updatedSchedules));
|
||||
}
|
||||
}
|
||||
|
||||
FutureOr<void> _onUpdateSchedule(
|
||||
UpdateScheduleEntryEvent event,
|
||||
Emitter<WaterHeaterState> emit,
|
||||
) {
|
||||
if (state is WaterHeaterDeviceStatusLoaded) {
|
||||
final currentState = state as WaterHeaterDeviceStatusLoaded;
|
||||
final updatedSchedules = List<ScheduleEntry>.from(currentState.schedules);
|
||||
updatedSchedules[event.index] = ScheduleEntry(
|
||||
selectedDays: event.selectedDays,
|
||||
time: event.time,
|
||||
functionOn: event.functionOn,
|
||||
);
|
||||
|
||||
emit(currentState.copyWith(schedules: updatedSchedules));
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> close() {
|
||||
_countdownTimer?.cancel();
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
part of 'water_heater_bloc.dart';
|
||||
|
||||
sealed class WaterHeaterEvent extends Equatable {
|
||||
@ -63,3 +62,44 @@ final class WaterHeaterFetchBatchStatusEvent extends WaterHeaterEvent {
|
||||
}
|
||||
|
||||
final class DecrementCountdownEvent extends WaterHeaterEvent {}
|
||||
|
||||
final class AddScheduleEvent extends WaterHeaterEvent {
|
||||
final List<bool> selectedDays;
|
||||
final TimeOfDay time;
|
||||
final bool functionOn;
|
||||
|
||||
const AddScheduleEvent({
|
||||
required this.selectedDays,
|
||||
required this.time,
|
||||
required this.functionOn,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [selectedDays, time, functionOn];
|
||||
}
|
||||
|
||||
final class DeleteScheduleEvent extends WaterHeaterEvent {
|
||||
final int index;
|
||||
|
||||
const DeleteScheduleEvent(this.index);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [index];
|
||||
}
|
||||
|
||||
final class UpdateScheduleEntryEvent extends WaterHeaterEvent {
|
||||
final int index;
|
||||
final List<bool> selectedDays;
|
||||
final TimeOfDay time;
|
||||
final bool functionOn;
|
||||
|
||||
const UpdateScheduleEntryEvent({
|
||||
required this.index,
|
||||
required this.selectedDays,
|
||||
required this.time,
|
||||
required this.functionOn,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [index, selectedDays, time, functionOn];
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ final class WaterHeaterDeviceStatusLoaded extends WaterHeaterState {
|
||||
final int? minutes;
|
||||
final bool? isActive;
|
||||
final Duration? countdownRemaining;
|
||||
final List<ScheduleEntry> schedules;
|
||||
|
||||
const WaterHeaterDeviceStatusLoaded(
|
||||
this.status, {
|
||||
@ -28,13 +29,20 @@ final class WaterHeaterDeviceStatusLoaded extends WaterHeaterState {
|
||||
this.minutes,
|
||||
this.isActive,
|
||||
this.countdownRemaining,
|
||||
this.schedules = const [],
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props =>
|
||||
[status, scheduleMode, hours, minutes, isActive, countdownRemaining];
|
||||
List<Object?> get props => [
|
||||
status,
|
||||
scheduleMode,
|
||||
hours,
|
||||
minutes,
|
||||
isActive,
|
||||
countdownRemaining,
|
||||
schedules,
|
||||
];
|
||||
|
||||
/// Creates a new instance with updated fields.
|
||||
WaterHeaterDeviceStatusLoaded copyWith({
|
||||
WaterHeaterStatusModel? status,
|
||||
ScheduleModes? scheduleMode,
|
||||
@ -42,6 +50,7 @@ final class WaterHeaterDeviceStatusLoaded extends WaterHeaterState {
|
||||
int? minutes,
|
||||
bool? isActive,
|
||||
Duration? countdownRemaining,
|
||||
List<ScheduleEntry>? schedules,
|
||||
}) {
|
||||
return WaterHeaterDeviceStatusLoaded(
|
||||
status ?? this.status,
|
||||
@ -50,10 +59,27 @@ final class WaterHeaterDeviceStatusLoaded extends WaterHeaterState {
|
||||
minutes: minutes ?? this.minutes,
|
||||
isActive: isActive ?? this.isActive,
|
||||
countdownRemaining: countdownRemaining ?? this.countdownRemaining,
|
||||
schedules: schedules ?? this.schedules,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class ScheduleEntry {
|
||||
final List<bool> selectedDays;
|
||||
final TimeOfDay time;
|
||||
final bool functionOn;
|
||||
|
||||
ScheduleEntry({
|
||||
required this.selectedDays,
|
||||
required this.time,
|
||||
required this.functionOn,
|
||||
});
|
||||
|
||||
@override
|
||||
String toString() =>
|
||||
'ScheduleEntry(selectedDays: $selectedDays, time: $time, functionOn: $functionOn)';
|
||||
}
|
||||
|
||||
final class WaterHeaterFailedState extends WaterHeaterState {
|
||||
final String error;
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user