Implemented ceiling, wall sensors functionality

This commit is contained in:
Abdullah Alassaf
2024-05-22 23:55:35 +03:00
parent 008ba8be32
commit 44b08c482d
26 changed files with 1296 additions and 493 deletions
@@ -0,0 +1,48 @@
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/devices/bloc/ceiling_bloc/ceiling_sensor_event.dart';
import 'package:syncrow_app/features/devices/bloc/ceiling_bloc/ceiling_sensor_state.dart';
import 'package:syncrow_app/features/devices/model/ceiling_sensor_model.dart';
import 'package:syncrow_app/features/devices/model/device_control_model.dart';
import 'package:syncrow_app/features/devices/model/device_model.dart';
import 'package:syncrow_app/features/devices/model/status_model.dart';
import 'package:syncrow_app/services/api/devices_api.dart';
class CeilingSensorBloc extends Bloc<CeilingSensorEvent, CeilingSensorState> {
final String deviceId;
late DeviceModel deviceModel;
late CeilingSensorModel deviceStatus;
CeilingSensorBloc({required this.deviceId}) : super(InitialState()) {
on<InitialEvent>(_fetchCeilingSensorStatus);
on<ChangeValueEvent>(_changeValue);
}
void _fetchCeilingSensorStatus(InitialEvent event, Emitter<CeilingSensorState> emit) async {
emit(LoadingInitialState());
try {
var response = await DevicesAPI.getDeviceStatus(deviceId);
List<StatusModel> statusModelList = [];
for (var status in response['status']) {
statusModelList.add(StatusModel.fromJson(status));
}
deviceStatus = CeilingSensorModel.fromJson(statusModelList);
emit(UpdateState(ceilingSensorModel: deviceStatus));
} catch (e) {
emit(FailedState(error: e.toString()));
return;
}
}
void _changeValue(ChangeValueEvent event, Emitter<CeilingSensorState> emit) async {
emit(LoadingNewSate(ceilingSensorModel: deviceStatus));
try {
final response = await DevicesAPI.controlDevice(
DeviceControlModel(deviceId: deviceId, code: event.code, value: event.value), deviceId);
if (response['success'] ?? false) {
deviceStatus.sensitivity = event.value;
}
} catch (_) {}
emit(UpdateState(ceilingSensorModel: deviceStatus));
}
}
@@ -0,0 +1,21 @@
import 'package:equatable/equatable.dart';
abstract class CeilingSensorEvent extends Equatable {
const CeilingSensorEvent();
@override
List<Object> get props => [];
}
class LoadingEvent extends CeilingSensorEvent {}
class InitialEvent extends CeilingSensorEvent {}
class ChangeValueEvent extends CeilingSensorEvent {
final int value;
final String code;
const ChangeValueEvent({required this.value, required this.code});
@override
List<Object> get props => [value, code];
}
@@ -0,0 +1,38 @@
import 'package:equatable/equatable.dart';
import 'package:syncrow_app/features/devices/model/ceiling_sensor_model.dart';
class CeilingSensorState extends Equatable {
const CeilingSensorState();
@override
List<Object> get props => [];
}
class InitialState extends CeilingSensorState {}
class LoadingInitialState extends CeilingSensorState {}
class UpdateState extends CeilingSensorState {
final CeilingSensorModel ceilingSensorModel;
const UpdateState({required this.ceilingSensorModel});
@override
List<Object> get props => [ceilingSensorModel];
}
class LoadingNewSate extends CeilingSensorState {
final CeilingSensorModel ceilingSensorModel;
const LoadingNewSate({required this.ceilingSensorModel});
@override
List<Object> get props => [ceilingSensorModel];
}
class FailedState extends CeilingSensorState {
final String error;
const FailedState({required this.error});
@override
List<Object> get props => [error];
}