door sensor

This commit is contained in:
mohammad
2024-09-22 17:27:29 +03:00
parent 58e13da887
commit d97efe229d
10 changed files with 202 additions and 116 deletions
@@ -6,19 +6,18 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/devices/bloc/door_sensor_bloc/door_sensor_event.dart';
import 'package:syncrow_app/features/devices/bloc/door_sensor_bloc/door_sensor_state.dart';
import 'package:syncrow_app/features/devices/model/device_control_model.dart';
import 'package:syncrow_app/features/devices/model/device_report_model.dart';
import 'package:syncrow_app/features/devices/model/door_sensor_model.dart';
import 'package:syncrow_app/features/devices/model/report_model.dart';
import 'package:syncrow_app/features/devices/model/status_model.dart';
import 'package:syncrow_app/services/api/devices_api.dart';
class DoorSensorBloc extends Bloc<DoorSensorEvent, DoorSensorState> {
final String DSId;
final String switchCode;
DoorSensorBloc({required this.DSId, required this.switchCode})
: super(const DoorSensorState()) {
DoorSensorBloc({
required this.DSId,
}) : super(const DoorSensorState()) {
on<DoorSensorInitial>(_fetchWaterHeaterStatus);
on<ReportLogsInitial>(fetchLogsForLastMonth);
on<DoorSensorSwitch>(_changeFirstSwitch);
on<ToggleLowBatteryEvent>(_toggleLowBattery);
on<ToggleClosingReminderEvent>(_toggleClosingReminder);
on<ToggleDoorAlarmEvent>(_toggleDoorAlarm);
@@ -29,6 +28,7 @@ class DoorSensorBloc extends Bloc<DoorSensorEvent, DoorSensorState> {
bool doorAlarm = false;
DoorSensorModel deviceStatus =
DoorSensorModel(doorContactState: false, batteryPercentage: 0);
void _fetchWaterHeaterStatus(
DoorSensorInitial event, Emitter<DoorSensorState> emit) async {
emit(DoorSensorLoadingState());
@@ -43,34 +43,13 @@ class DoorSensorBloc extends Bloc<DoorSensorEvent, DoorSensorState> {
);
emit(UpdateState(doorSensor: deviceStatus));
Future.delayed(const Duration(milliseconds: 500));
// _listenToChanges();
_listenToChanges();
} catch (e) {
emit(DoorSensorFailedState(errorMessage: e.toString()));
return;
}
}
void _changeFirstSwitch(
DoorSensorSwitch event, Emitter<DoorSensorState> emit) async {
emit(LoadingNewSate(doorSensor: deviceStatus));
try {
deviceStatus.doorContactState = !event.switchD;
emit(UpdateState(doorSensor: deviceStatus));
final response = await DevicesAPI.controlDevice(
DeviceControlModel(
deviceId: DSId,
code: 'doorcontact_state',
value: deviceStatus.doorContactState),
DSId);
if (!response['success']) {
// add(InitialEvent(groupScreen: oneGangGroup));
}
} catch (_) {
emit(DoorSensorFailedState(errorMessage: _.toString()));
}
}
// Toggle functions for each switch
void _toggleLowBattery(
ToggleLowBatteryEvent event, Emitter<DoorSensorState> emit) async {
@@ -135,31 +114,8 @@ class DoorSensorBloc extends Bloc<DoorSensorEvent, DoorSensorState> {
}
}
final List<RecordGroup> recordGroups = [
RecordGroup(
date: DateTime(2024, 8, 31),
records: [
Record(status: 'Opened', time: '15:10:25', isOpen: false),
Record(status: 'Closed', time: '12:24:45', isOpen: false),
Record(status: 'Opened', time: '12:20:05', isOpen: true),
],
),
RecordGroup(
date: DateTime(2024, 8, 30),
records: [
Record(status: 'Opened', time: '14:15:30', isOpen: true),
Record(status: 'Closed', time: '10:22:45', isOpen: false),
],
),
RecordGroup(
date: DateTime(2024, 8, 29),
records: [
Record(status: 'Opened', time: '13:45:00', isOpen: true),
Record(status: 'Closed', time: '11:30:15', isOpen: false),
Record(status: 'Opened', time: '09:20:10', isOpen: true),
],
),
];
DeviceReport recordGroups = DeviceReport(startTime: 0, endTime: 0, data: []);
Future<void> fetchLogsForLastMonth(
ReportLogsInitial event, Emitter<DoorSensorState> emit) async {
@@ -174,11 +130,13 @@ class DoorSensorBloc extends Bloc<DoorSensorEvent, DoorSensorState> {
int endTime = now.millisecondsSinceEpoch;
try {
var response = await DevicesAPI.getReportLogs(
startTime: startTime.toString(), // Convert to String if the API expects it
startTime:
startTime.toString(), // Convert to String if the API expects it
endTime: endTime.toString(), // Convert to String if the API expects it
deviceUuid: DSId,
code: 'doorcontact_state',
);
recordGroups = response;
// Process response here
print(response);
} on DioException catch (e) {
@@ -204,8 +162,7 @@ class DoorSensorBloc extends Bloc<DoorSensorEvent, DoorSensorState> {
List<StatusModel> statusList = [];
usersMap['status'].forEach((element) {
statusList
.add(StatusModel(code: element['code'], value: element['value']));
statusList.add(StatusModel(code: element['code'], value: true));
});
deviceStatus = DoorSensorModel.fromJson(statusList);