pull changes

This commit is contained in:
ashrafzarkanisala
2024-10-09 13:29:12 +03:00
19 changed files with 254 additions and 272 deletions

View File

@ -64,8 +64,10 @@ class AccessBloc extends Bloc<AccessEvent, AccessState> {
} }
} }
Future<void> selectTime(
Future<void> selectTime(SelectTime event, Emitter<AccessState> emit,) async { SelectTime event,
Emitter<AccessState> emit,
) async {
emit(AccessLoaded()); emit(AccessLoaded());
final DateTime? picked = await showDatePicker( final DateTime? picked = await showDatePicker(
context: event.context, context: event.context,
@ -97,7 +99,8 @@ class AccessBloc extends Bloc<AccessEvent, AccessState> {
} }
} else { } else {
if (effectiveTimeTimeStamp != null && selectedTimestamp < effectiveTimeTimeStamp!) { if (effectiveTimeTimeStamp != null && selectedTimestamp < effectiveTimeTimeStamp!) {
CustomSnackBar.displaySnackBar('Expiration Time cannot be earlier than Effective Time.'); CustomSnackBar.displaySnackBar(
'Expiration Time cannot be earlier than Effective Time.');
} else { } else {
endTime = selectedDateTime.toString().split('.').first; endTime = selectedDateTime.toString().split('.').first;
expirationTimeTimeStamp = selectedTimestamp; expirationTimeTimeStamp = selectedTimestamp;
@ -106,14 +109,11 @@ class AccessBloc extends Bloc<AccessEvent, AccessState> {
} }
} }
emit(ChangeTimeState()); emit(ChangeTimeState());
} }
Future<void> _filterData(FilterDataEvent event, Emitter<AccessState> emit) async { Future<void> _filterData(FilterDataEvent event, Emitter<AccessState> emit) async {
emit(AccessLoaded()); emit(AccessLoaded());
try { try {
print(event.emailAuthorizer?.toLowerCase());
// Convert search text to lower case for case-insensitive search // Convert search text to lower case for case-insensitive search
final searchText = event.passwordName?.toLowerCase() ?? ''; final searchText = event.passwordName?.toLowerCase() ?? '';
final searchEmailText = event.emailAuthorizer?.toLowerCase() ?? ''; final searchEmailText = event.emailAuthorizer?.toLowerCase() ?? '';
@ -128,8 +128,10 @@ class AccessBloc extends Bloc<AccessEvent, AccessState> {
DateTime.fromMillisecondsSinceEpoch(int.parse(item.invalidTime.toString()) * 1000) DateTime.fromMillisecondsSinceEpoch(int.parse(item.invalidTime.toString()) * 1000)
.toUtc() .toUtc()
.toLocal(); .toLocal();
DateTime effectiveDateAndTime = DateTime(effectiveDate.year, effectiveDate.month, effectiveDate.day,effectiveDate.hour,effectiveDate.minute); DateTime effectiveDateAndTime = DateTime(effectiveDate.year, effectiveDate.month,
DateTime invalidDateAndTime = DateTime(invalidDate.year, invalidDate.month, invalidDate.day,invalidDate.hour,invalidDate.minute); effectiveDate.day, effectiveDate.hour, effectiveDate.minute);
DateTime invalidDateAndTime = DateTime(invalidDate.year, invalidDate.month, invalidDate.day,
invalidDate.hour, invalidDate.minute);
// Filter by password name, making the search case-insensitive // Filter by password name, making the search case-insensitive
if (searchText.isNotEmpty) { if (searchText.isNotEmpty) {
@ -139,7 +141,8 @@ class AccessBloc extends Bloc<AccessEvent, AccessState> {
} }
} }
if (searchEmailText.isNotEmpty) { if (searchEmailText.isNotEmpty) {
final bool matchesName = item.authorizerEmail.toString().toLowerCase().contains(searchEmailText); final bool matchesName =
item.authorizerEmail.toString().toLowerCase().contains(searchEmailText);
if (!matchesName) { if (!matchesName) {
matchesCriteria = false; matchesCriteria = false;
} }
@ -148,12 +151,8 @@ class AccessBloc extends Bloc<AccessEvent, AccessState> {
if (event.startTime != null && event.endTime == null) { if (event.startTime != null && event.endTime == null) {
DateTime startDateTime = DateTime startDateTime =
DateTime.fromMillisecondsSinceEpoch(event.startTime! * 1000).toUtc().toLocal(); DateTime.fromMillisecondsSinceEpoch(event.startTime! * 1000).toUtc().toLocal();
startDateTime = DateTime( startDateTime = DateTime(startDateTime.year, startDateTime.month, startDateTime.day,
startDateTime.year, startDateTime.hour, startDateTime.minute);
startDateTime.month,
startDateTime.day,
startDateTime.hour,
startDateTime.minute);
if (effectiveDateAndTime.isBefore(startDateTime)) { if (effectiveDateAndTime.isBefore(startDateTime)) {
matchesCriteria = false; matchesCriteria = false;
} }
@ -162,13 +161,8 @@ class AccessBloc extends Bloc<AccessEvent, AccessState> {
if (event.endTime != null && event.startTime == null) { if (event.endTime != null && event.startTime == null) {
DateTime startDateTime = DateTime startDateTime =
DateTime.fromMillisecondsSinceEpoch(event.endTime! * 1000).toUtc().toLocal(); DateTime.fromMillisecondsSinceEpoch(event.endTime! * 1000).toUtc().toLocal();
startDateTime = DateTime( startDateTime = DateTime(startDateTime.year, startDateTime.month, startDateTime.day,
startDateTime.year, startDateTime.hour, startDateTime.minute);
startDateTime.month,
startDateTime.day,
startDateTime.hour,
startDateTime.minute
);
if (invalidDateAndTime.isAfter(startDateTime)) { if (invalidDateAndTime.isAfter(startDateTime)) {
matchesCriteria = false; matchesCriteria = false;
} }
@ -180,9 +174,12 @@ class AccessBloc extends Bloc<AccessEvent, AccessState> {
DateTime.fromMillisecondsSinceEpoch(event.startTime! * 1000).toUtc().toLocal(); DateTime.fromMillisecondsSinceEpoch(event.startTime! * 1000).toUtc().toLocal();
DateTime endDateTime = DateTime endDateTime =
DateTime.fromMillisecondsSinceEpoch(event.endTime! * 1000).toUtc().toLocal(); DateTime.fromMillisecondsSinceEpoch(event.endTime! * 1000).toUtc().toLocal();
startDateTime = DateTime(startDateTime.year, startDateTime.month, startDateTime.day,startDateTime.hour,startDateTime.minute); startDateTime = DateTime(startDateTime.year, startDateTime.month, startDateTime.day,
endDateTime = DateTime(endDateTime.year, endDateTime.month, endDateTime.day,endDateTime.hour,endDateTime.minute); startDateTime.hour, startDateTime.minute);
if (effectiveDateAndTime.isBefore(startDateTime) || invalidDateAndTime.isAfter(endDateTime)) { endDateTime = DateTime(endDateTime.year, endDateTime.month, endDateTime.day,
endDateTime.hour, endDateTime.minute);
if (effectiveDateAndTime.isBefore(startDateTime) ||
invalidDateAndTime.isAfter(endDateTime)) {
matchesCriteria = false; matchesCriteria = false;
} }
} }
@ -205,7 +202,6 @@ class AccessBloc extends Bloc<AccessEvent, AccessState> {
} }
} }
resetSearch(ResetSearch event, Emitter<AccessState> emit) async { resetSearch(ResetSearch event, Emitter<AccessState> emit) async {
emit(AccessLoaded()); emit(AccessLoaded());
startTime = 'Start Time'; startTime = 'Start Time';
@ -224,7 +220,6 @@ class AccessBloc extends Bloc<AccessEvent, AccessState> {
" ${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}"; " ${dateTime.hour.toString().padLeft(2, '0')}:${dateTime.minute.toString().padLeft(2, '0')}";
} }
Future<void> onTabChanged(TabChangedEvent event, Emitter<AccessState> emit) async { Future<void> onTabChanged(TabChangedEvent event, Emitter<AccessState> emit) async {
try { try {
emit(AccessLoaded()); emit(AccessLoaded());
@ -257,6 +252,4 @@ class AccessBloc extends Bloc<AccessEvent, AccessState> {
emit(FailedState(e.toString())); emit(FailedState(e.toString()));
} }
} }
} }

View File

@ -101,8 +101,7 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
email: forgetEmailController.text, otpCode: forgetOtp.text); email: forgetEmailController.text, otpCode: forgetOtp.text);
if (response == true) { if (response == true) {
await AuthenticationAPI.forgetPassword( await AuthenticationAPI.forgetPassword(
password: forgetPasswordController.text, password: forgetPasswordController.text, email: forgetEmailController.text);
email: forgetEmailController.text);
_timer?.cancel(); _timer?.cancel();
emit(const TimerState(isButtonEnabled: true, remainingTime: 0)); emit(const TimerState(isButtonEnabled: true, remainingTime: 0));
emit(SuccessForgetState()); emit(SuccessForgetState());
@ -124,7 +123,6 @@ class AuthBloc extends Bloc<AuthEvent, AuthState> {
emit(AuthInitialState()); emit(AuthInitialState());
} }
} }
} }
String? validateCode(String? value) { String? validateCode(String? value) {

View File

@ -220,7 +220,8 @@ class DeviceManagementBloc extends Bloc<DeviceManagementEvent, DeviceManagementS
void _calculateDeviceCounts() { void _calculateDeviceCounts() {
_onlineCount = _devices.where((device) => device.online == true).length; _onlineCount = _devices.where((device) => device.online == true).length;
_offlineCount = _devices.where((device) => device.online == false).length; _offlineCount = _devices.where((device) => device.online == false).length;
_lowBatteryCount = _devices.where((device) => device.batteryLevel != null && device.batteryLevel! < 20).length; _lowBatteryCount =
_devices.where((device) => device.batteryLevel != null && device.batteryLevel! < 20).length;
} }
String _getFilterFromIndex(int index) { String _getFilterFromIndex(int index) {
@ -253,6 +254,8 @@ class DeviceManagementBloc extends Bloc<DeviceManagementEvent, DeviceManagementS
productName = ''; productName = '';
if (state is DeviceManagementFiltered) { if (state is DeviceManagementFiltered) {
add(FilterDevices(_getFilterFromIndex(_selectedIndex))); add(FilterDevices(_getFilterFromIndex(_selectedIndex)));
} else {
return;
} }
} }
@ -272,7 +275,8 @@ class DeviceManagementBloc extends Bloc<DeviceManagementEvent, DeviceManagementS
(device.name?.toLowerCase().contains(event.productName!.toLowerCase()) ?? false); (device.name?.toLowerCase().contains(event.productName!.toLowerCase()) ?? false);
final matchesDeviceName = event.productName == null || final matchesDeviceName = event.productName == null ||
event.productName!.isEmpty || event.productName!.isEmpty ||
(device.categoryName?.toLowerCase().contains(event.productName!.toLowerCase()) ?? false); (device.categoryName?.toLowerCase().contains(event.productName!.toLowerCase()) ??
false);
return matchesCommunity && matchesUnit && (matchesProductName || matchesDeviceName); return matchesCommunity && matchesUnit && (matchesProductName || matchesDeviceName);
}).toList(); }).toList();

View File

@ -2,8 +2,8 @@ import 'dart:async';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/event.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/ceiling_event.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/state.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/ceiling_state.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/help_description.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/help_description.dart';
import 'package:syncrow_web/services/devices_mang_api.dart'; import 'package:syncrow_web/services/devices_mang_api.dart';
@ -24,7 +24,8 @@ class CeilingSensorBloc extends Bloc<CeilingSensorEvent, CeilingSensorState> {
on<CeilingFactoryResetEvent>(_onFactoryReset); on<CeilingFactoryResetEvent>(_onFactoryReset);
} }
void _fetchCeilingSensorStatus(CeilingInitialEvent event, Emitter<CeilingSensorState> emit) async { void _fetchCeilingSensorStatus(
CeilingInitialEvent event, Emitter<CeilingSensorState> emit) async {
emit(CeilingLoadingInitialState()); emit(CeilingLoadingInitialState());
try { try {
var response = await DevicesManagementApi().getDeviceStatus(event.deviceId); var response = await DevicesManagementApi().getDeviceStatus(event.deviceId);
@ -77,7 +78,8 @@ class CeilingSensorBloc extends Bloc<CeilingSensorEvent, CeilingSensorState> {
); );
} }
Future<void> _onBatchControl(CeilingBatchControlEvent event, Emitter<CeilingSensorState> emit) async { Future<void> _onBatchControl(
CeilingBatchControlEvent event, Emitter<CeilingSensorState> emit) async {
emit(CeilingLoadingNewSate(ceilingSensorModel: deviceStatus)); emit(CeilingLoadingNewSate(ceilingSensorModel: deviceStatus));
if (event.code == 'sensitivity') { if (event.code == 'sensitivity') {
deviceStatus.sensitivity = event.value; deviceStatus.sensitivity = event.value;
@ -122,7 +124,8 @@ class CeilingSensorBloc extends Bloc<CeilingSensorEvent, CeilingSensorState> {
if (isBatch) { if (isBatch) {
response = await DevicesManagementApi().deviceBatchControl(deviceId, code, value); response = await DevicesManagementApi().deviceBatchControl(deviceId, code, value);
} else { } else {
response = await DevicesManagementApi().deviceControl(deviceId, Status(code: code, value: value)); response = await DevicesManagementApi()
.deviceControl(deviceId, Status(code: code, value: value));
} }
if (!response) { if (!response) {
@ -140,18 +143,19 @@ class CeilingSensorBloc extends Bloc<CeilingSensorEvent, CeilingSensorState> {
}); });
} }
FutureOr<void> _getDeviceReports(GetCeilingDeviceReportsEvent event, Emitter<CeilingSensorState> emit) async { FutureOr<void> _getDeviceReports(
GetCeilingDeviceReportsEvent event, Emitter<CeilingSensorState> emit) async {
if (event.code.isEmpty) { if (event.code.isEmpty) {
emit(ShowCeilingDescriptionState(description: reportString)); emit(ShowCeilingDescriptionState(description: reportString));
return; return;
} else { } else {
emit(CeilingReportsLoadingState()); emit(CeilingReportsLoadingState());
final from = DateTime.now().subtract(const Duration(days: 30)).millisecondsSinceEpoch; // final from = DateTime.now().subtract(const Duration(days: 30)).millisecondsSinceEpoch;
final to = DateTime.now().millisecondsSinceEpoch; // final to = DateTime.now().millisecondsSinceEpoch;
try { try {
await DevicesManagementApi.getDeviceReportsByDate(deviceId, event.code, from.toString(), to.toString()) // await DevicesManagementApi.getDeviceReportsByDate(deviceId, event.code, from.toString(), to.toString())
.then((value) { await DevicesManagementApi.getDeviceReports(deviceId, event.code).then((value) {
emit(CeilingReportsState(deviceReport: value)); emit(CeilingReportsState(deviceReport: value));
}); });
} catch (e) { } catch (e) {
@ -182,7 +186,8 @@ class CeilingSensorBloc extends Bloc<CeilingSensorEvent, CeilingSensorState> {
} }
} }
FutureOr<void> _onFactoryReset(CeilingFactoryResetEvent event, Emitter<CeilingSensorState> emit) async { FutureOr<void> _onFactoryReset(
CeilingFactoryResetEvent event, Emitter<CeilingSensorState> emit) async {
emit(CeilingLoadingNewSate(ceilingSensorModel: deviceStatus)); emit(CeilingLoadingNewSate(ceilingSensorModel: deviceStatus));
try { try {
final response = await DevicesManagementApi().factoryReset( final response = await DevicesManagementApi().factoryReset(

View File

@ -46,22 +46,19 @@ class CeilingSensorModel {
_spaceType = getSpaceType(status.value ?? 'none'); _spaceType = getSpaceType(status.value ?? 'none');
break; break;
case 'sensitivity': case 'sensitivity':
_sensitivity = status.value is int _sensitivity =
? status.value status.value is int ? status.value : int.tryParse(status.value ?? '1') ?? 1;
: int.tryParse(status.value ?? '1') ?? 1;
break; break;
case 'checking_result': case 'checking_result':
_checkingResult = status.value ?? ''; _checkingResult = status.value ?? '';
break; break;
case 'presence_range': case 'presence_range':
_presenceRange = status.value is int _presenceRange =
? status.value status.value is int ? status.value : int.tryParse(status.value ?? '0') ?? 0;
: int.tryParse(status.value ?? '0') ?? 0;
break; break;
case 'sports_para': case 'sports_para':
_sportsPara = status.value is int _sportsPara =
? status.value status.value is int ? status.value : int.tryParse(status.value ?? '0') ?? 0;
: int.tryParse(status.value ?? '0') ?? 0;
break; break;
case 'body_movement': case 'body_movement':
_bodyMovement = status.value ?? ''; _bodyMovement = status.value ?? '';
@ -70,9 +67,7 @@ class CeilingSensorModel {
_noBodyTime = status.value ?? 'none'; _noBodyTime = status.value ?? 'none';
break; break;
case 'moving_max_dis': case 'moving_max_dis':
_maxDis = status.value is int _maxDis = status.value is int ? status.value : int.tryParse(status.value ?? '0') ?? 0;
? status.value
: int.tryParse(status.value ?? '0') ?? 0;
break; break;
} }
} }

View File

@ -1,9 +1,9 @@
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_web/pages/device_managment/all_devices/models/factory_reset_model.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_reset_model.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/bloc.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/ceiling_bloc.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/event.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/ceiling_event.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/state.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/ceiling_state.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart';
import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart';
import 'package:syncrow_web/pages/device_managment/shared/batch_control/firmware_update.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/firmware_update.dart';
@ -12,8 +12,7 @@ import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presen
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presense_nobody_time.dart'; import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presense_nobody_time.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart'; import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
class CeilingSensorBatchControlView extends StatelessWidget class CeilingSensorBatchControlView extends StatelessWidget with HelperResponsiveLayout {
with HelperResponsiveLayout {
const CeilingSensorBatchControlView({super.key, required this.devicesIds}); const CeilingSensorBatchControlView({super.key, required this.devicesIds});
final List<String> devicesIds; final List<String> devicesIds;
@ -28,12 +27,11 @@ class CeilingSensorBatchControlView extends StatelessWidget
..add(CeilingFetchDeviceStatusEvent(devicesIds)), ..add(CeilingFetchDeviceStatusEvent(devicesIds)),
child: BlocBuilder<CeilingSensorBloc, CeilingSensorState>( child: BlocBuilder<CeilingSensorBloc, CeilingSensorState>(
builder: (context, state) { builder: (context, state) {
if (state is CeilingLoadingInitialState || if (state is CeilingLoadingInitialState || state is CeilingReportsLoadingState) {
state is CeilingReportsLoadingState) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} else if (state is CeilingUpdateState) { } else if (state is CeilingUpdateState) {
return _buildGridView(context, state.ceilingSensorModel, return _buildGridView(
isExtraLarge, isLarge, isMedium); context, state.ceilingSensorModel, isExtraLarge, isLarge, isMedium);
} }
return const Center(child: Text('Error fetching status')); return const Center(child: Text('Error fetching status'));
}, },
@ -41,8 +39,8 @@ class CeilingSensorBatchControlView extends StatelessWidget
); );
} }
Widget _buildGridView(BuildContext context, CeilingSensorModel model, Widget _buildGridView(BuildContext context, CeilingSensorModel model, bool isExtraLarge,
bool isExtraLarge, bool isLarge, bool isMedium) { bool isLarge, bool isMedium) {
return GridView( return GridView(
padding: const EdgeInsets.symmetric(horizontal: 50), padding: const EdgeInsets.symmetric(horizontal: 50),
shrinkWrap: true, shrinkWrap: true,
@ -118,8 +116,7 @@ class CeilingSensorBatchControlView extends StatelessWidget
context.read<CeilingSensorBloc>().add( context.read<CeilingSensorBloc>().add(
CeilingFactoryResetEvent( CeilingFactoryResetEvent(
devicesId: devicesIds.first, devicesId: devicesIds.first,
factoryResetModel: factoryResetModel: FactoryResetModel(devicesUuid: devicesIds),
FactoryResetModel(devicesUuid: devicesIds),
), ),
); );
}, },

View File

@ -1,9 +1,9 @@
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_web/pages/device_managment/all_devices/models/devices_model.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/bloc.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/ceiling_bloc.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/event.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/ceiling_event.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/state.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/ceiling_state.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart';
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_display_data.dart'; import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_display_data.dart';
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_space_type.dart'; import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_space_type.dart';
@ -16,8 +16,7 @@ import 'package:syncrow_web/pages/device_managment/shared/table/report_table.dar
import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart'; import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
class CeilingSensorControlsView extends StatelessWidget class CeilingSensorControlsView extends StatelessWidget with HelperResponsiveLayout {
with HelperResponsiveLayout {
const CeilingSensorControlsView({super.key, required this.device}); const CeilingSensorControlsView({super.key, required this.device});
final AllDevicesModel device; final AllDevicesModel device;
@ -32,35 +31,29 @@ class CeilingSensorControlsView extends StatelessWidget
..add(CeilingInitialEvent(device.uuid ?? '')), ..add(CeilingInitialEvent(device.uuid ?? '')),
child: BlocBuilder<CeilingSensorBloc, CeilingSensorState>( child: BlocBuilder<CeilingSensorBloc, CeilingSensorState>(
builder: (context, state) { builder: (context, state) {
if (state is CeilingLoadingInitialState || if (state is CeilingLoadingInitialState || state is CeilingReportsLoadingState) {
state is CeilingReportsLoadingState) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} else if (state is CeilingUpdateState) { } else if (state is CeilingUpdateState) {
return _buildGridView(context, state.ceilingSensorModel, return _buildGridView(
isExtraLarge, isLarge, isMedium); context, state.ceilingSensorModel, isExtraLarge, isLarge, isMedium);
} else if (state is CeilingReportsState) { } else if (state is CeilingReportsState) {
return ReportsTable( return ReportsTable(
report: state.deviceReport, report: state.deviceReport,
onRowTap: (index) {}, onRowTap: (index) {},
onClose: () { onClose: () {
context context.read<CeilingSensorBloc>().add(BackToCeilingGridViewEvent());
.read<CeilingSensorBloc>()
.add(BackToCeilingGridViewEvent());
}, },
); );
} else if (state is ShowCeilingDescriptionState) { } else if (state is ShowCeilingDescriptionState) {
return DescriptionView( return DescriptionView(
description: state.description, description: state.description,
onClose: () { onClose: () {
context context.read<CeilingSensorBloc>().add(BackToCeilingGridViewEvent());
.read<CeilingSensorBloc>()
.add(BackToCeilingGridViewEvent());
}, },
); );
} else if (state is CeilingReportsFailedState) { } else if (state is CeilingReportsFailedState) {
final model = context.read<CeilingSensorBloc>().deviceStatus; final model = context.read<CeilingSensorBloc>().deviceStatus;
return _buildGridView( return _buildGridView(context, model, isExtraLarge, isLarge, isMedium);
context, model, isExtraLarge, isLarge, isMedium);
} }
return const Center(child: Text('Error fetching status')); return const Center(child: Text('Error fetching status'));
}, },
@ -68,8 +61,8 @@ class CeilingSensorControlsView extends StatelessWidget
); );
} }
Widget _buildGridView(BuildContext context, CeilingSensorModel model, Widget _buildGridView(BuildContext context, CeilingSensorModel model, bool isExtraLarge,
bool isExtraLarge, bool isLarge, bool isMedium) { bool isLarge, bool isMedium) {
return GridView( return GridView(
padding: const EdgeInsets.symmetric(horizontal: 50), padding: const EdgeInsets.symmetric(horizontal: 50),
shrinkWrap: true, shrinkWrap: true,
@ -150,8 +143,8 @@ class CeilingSensorControlsView extends StatelessWidget
), ),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
context.read<CeilingSensorBloc>().add(GetCeilingDeviceReportsEvent( context.read<CeilingSensorBloc>().add(
code: 'presence_state', deviceUuid: device.uuid!)); GetCeilingDeviceReportsEvent(code: 'presence_state', deviceUuid: device.uuid!));
}, },
child: const PresenceStaticWidget( child: const PresenceStaticWidget(
icon: Assets.illuminanceRecordIcon, icon: Assets.illuminanceRecordIcon,
@ -160,8 +153,9 @@ class CeilingSensorControlsView extends StatelessWidget
), ),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
context.read<CeilingSensorBloc>().add(GetCeilingDeviceReportsEvent( context
code: '', deviceUuid: device.uuid!)); .read<CeilingSensorBloc>()
.add(GetCeilingDeviceReportsEvent(code: '', deviceUuid: device.uuid!));
}, },
child: const PresenceStaticWidget( child: const PresenceStaticWidget(
icon: Assets.helpDescriptionIcon, icon: Assets.helpDescriptionIcon,

View File

@ -3,6 +3,8 @@ import 'package:intl/intl.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_reports.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/device_reports.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/table_cell_widget.dart'; import 'package:syncrow_web/pages/device_managment/shared/table/table_cell_widget.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/table_header.dart'; import 'package:syncrow_web/pages/device_managment/shared/table/table_header.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';
// ignore: must_be_immutable // ignore: must_be_immutable
class ReportsTable extends StatelessWidget { class ReportsTable extends StatelessWidget {
@ -31,7 +33,18 @@ class ReportsTable extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Stack( return report.data == null || report.data!.isEmpty
? Container(
padding: const EdgeInsets.all(20.0),
width: MediaQuery.sizeOf(context).width,
alignment: AlignmentDirectional.center,
height: 100,
child: Text(
'No reports found',
style: context.textTheme.bodyLarge!.copyWith(color: ColorsManager.grayColor),
),
)
: Stack(
children: [ children: [
Padding( Padding(
padding: const EdgeInsets.all(20.0), padding: const EdgeInsets.all(20.0),
@ -66,12 +79,10 @@ class ReportsTable extends StatelessWidget {
if (hideValueShowDescription == true) { if (hideValueShowDescription == true) {
if (mainDoorSensor != null && mainDoorSensor == true) { if (mainDoorSensor != null && mainDoorSensor == true) {
value = data.value == 'true' ? 'Open' : 'Close'; value = data.value == 'true' ? 'Open' : 'Close';
} else if (garageDoorSensor != null && } else if (garageDoorSensor != null && garageDoorSensor == true) {
garageDoorSensor == true) {
value = data.value == 'true' ? 'Opened' : 'Closed'; value = data.value == 'true' ? 'Opened' : 'Closed';
} else if (waterLeak != null && waterLeak == true) { } else if (waterLeak != null && waterLeak == true) {
value = value = data.value == 'normal' ? 'Normal' : 'Leak Detected';
data.value == 'normal' ? 'Normal' : 'Leak Detected';
} else { } else {
value = '${data.value!} ${thirdColumnDescription ?? ''}'; value = '${data.value!} ${thirdColumnDescription ?? ''}';
} }
@ -89,7 +100,7 @@ class ReportsTable extends StatelessWidget {
), ),
], ],
); );
}), })
], ],
), ),
), ),

View File

@ -31,7 +31,6 @@ class ToggleWidget extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
debugPrint(label.toString());
return DeviceControlsContainer( return DeviceControlsContainer(
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,

View File

@ -1,8 +1,8 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/event.dart'; import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/wall_event.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/state.dart'; import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/wall_state.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/model/wall_sensor_model.dart'; import 'package:syncrow_web/pages/device_managment/wall_sensor/model/wall_sensor_model.dart';
import 'package:syncrow_web/services/devices_mang_api.dart'; import 'package:syncrow_web/services/devices_mang_api.dart';
@ -38,12 +38,10 @@ class WallSensorBloc extends Bloc<WallSensorEvent, WallSensorState> {
// Fetch batch status // Fetch batch status
FutureOr<void> _fetchWallSensorBatchControl( FutureOr<void> _fetchWallSensorBatchControl(
WallSensorFetchBatchStatusEvent event, WallSensorFetchBatchStatusEvent event, Emitter<WallSensorState> emit) async {
Emitter<WallSensorState> emit) async {
emit(WallSensorLoadingInitialState()); emit(WallSensorLoadingInitialState());
try { try {
var response = var response = await DevicesManagementApi().getBatchStatus(event.devicesIds);
await DevicesManagementApi().getBatchStatus(event.devicesIds);
deviceStatus = WallSensorModel.fromJson(response.status); deviceStatus = WallSensorModel.fromJson(response.status);
emit(WallSensorUpdateState(wallSensorModel: deviceStatus)); emit(WallSensorUpdateState(wallSensorModel: deviceStatus));
} catch (e) { } catch (e) {
@ -70,8 +68,7 @@ class WallSensorBloc extends Bloc<WallSensorEvent, WallSensorState> {
// } catch (_) {} // } catch (_) {}
// } // }
void _changeValue( void _changeValue(WallSensorChangeValueEvent event, Emitter<WallSensorState> emit) async {
WallSensorChangeValueEvent event, Emitter<WallSensorState> emit) async {
emit(WallSensorLoadingNewSate(wallSensorModel: deviceStatus)); emit(WallSensorLoadingNewSate(wallSensorModel: deviceStatus));
if (event.code == 'far_detection') { if (event.code == 'far_detection') {
deviceStatus.farDetection = event.value; deviceStatus.farDetection = event.value;
@ -128,8 +125,7 @@ class WallSensorBloc extends Bloc<WallSensorEvent, WallSensorState> {
try { try {
late bool response; late bool response;
if (isBatch) { if (isBatch) {
response = await DevicesManagementApi() response = await DevicesManagementApi().deviceBatchControl(deviceId, code, value);
.deviceBatchControl(deviceId, code, value);
} else { } else {
response = await DevicesManagementApi() response = await DevicesManagementApi()
.deviceControl(deviceId, Status(code: code, value: value)); .deviceControl(deviceId, Status(code: code, value: value));
@ -148,10 +144,13 @@ class WallSensorBloc extends Bloc<WallSensorEvent, WallSensorState> {
FutureOr<void> _getDeviceReports( FutureOr<void> _getDeviceReports(
GetDeviceReportsEvent event, Emitter<WallSensorState> emit) async { GetDeviceReportsEvent event, Emitter<WallSensorState> emit) async {
emit(DeviceReportsLoadingState()); emit(DeviceReportsLoadingState());
// final from = DateTime.now().subtract(const Duration(days: 30)).millisecondsSinceEpoch;
// final to = DateTime.now().millisecondsSinceEpoch;
try { try {
await DevicesManagementApi.getDeviceReports(deviceId, event.code) // await DevicesManagementApi.getDeviceReportsByDate(
.then((value) { // deviceId, event.code, from.toString(), to.toString())
await DevicesManagementApi.getDeviceReports(deviceId, event.code).then((value) {
emit(DeviceReportsState(deviceReport: value, code: event.code)); emit(DeviceReportsState(deviceReport: value, code: event.code));
}); });
} catch (e) { } catch (e) {
@ -160,13 +159,11 @@ class WallSensorBloc extends Bloc<WallSensorEvent, WallSensorState> {
} }
} }
void _showDescription( void _showDescription(ShowDescriptionEvent event, Emitter<WallSensorState> emit) {
ShowDescriptionEvent event, Emitter<WallSensorState> emit) {
emit(WallSensorShowDescriptionState(description: event.description)); emit(WallSensorShowDescriptionState(description: event.description));
} }
void _backToGridView( void _backToGridView(BackToGridViewEvent event, Emitter<WallSensorState> emit) {
BackToGridViewEvent event, Emitter<WallSensorState> emit) {
emit(WallSensorUpdateState(wallSensorModel: deviceStatus)); emit(WallSensorUpdateState(wallSensorModel: deviceStatus));
} }

View File

@ -4,14 +4,13 @@ import 'package:syncrow_web/pages/device_managment/all_devices/models/factory_re
import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/factory_reset.dart';
import 'package:syncrow_web/pages/device_managment/shared/batch_control/firmware_update.dart'; import 'package:syncrow_web/pages/device_managment/shared/batch_control/firmware_update.dart';
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_update_data.dart'; import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_update_data.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/bloc.dart'; import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/wall_bloc.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/event.dart'; import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/wall_event.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/state.dart'; import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/wall_state.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/model/wall_sensor_model.dart'; import 'package:syncrow_web/pages/device_managment/wall_sensor/model/wall_sensor_model.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart'; import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
class WallSensorBatchControlView extends StatelessWidget class WallSensorBatchControlView extends StatelessWidget with HelperResponsiveLayout {
with HelperResponsiveLayout {
const WallSensorBatchControlView({super.key, required this.devicesIds}); const WallSensorBatchControlView({super.key, required this.devicesIds});
final List<String> devicesIds; final List<String> devicesIds;
@ -26,16 +25,13 @@ class WallSensorBatchControlView extends StatelessWidget
..add(WallSensorFetchBatchStatusEvent(devicesIds)), ..add(WallSensorFetchBatchStatusEvent(devicesIds)),
child: BlocBuilder<WallSensorBloc, WallSensorState>( child: BlocBuilder<WallSensorBloc, WallSensorState>(
builder: (context, state) { builder: (context, state) {
if (state is WallSensorLoadingInitialState || if (state is WallSensorLoadingInitialState || state is DeviceReportsLoadingState) {
state is DeviceReportsLoadingState) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} else if (state is WallSensorUpdateState) { } else if (state is WallSensorUpdateState) {
return _buildGridView(context, state.wallSensorModel, isExtraLarge, return _buildGridView(context, state.wallSensorModel, isExtraLarge, isLarge, isMedium);
isLarge, isMedium);
} else if (state is DeviceReportsFailedState) { } else if (state is DeviceReportsFailedState) {
final model = context.read<WallSensorBloc>().deviceStatus; final model = context.read<WallSensorBloc>().deviceStatus;
return _buildGridView( return _buildGridView(context, model, isExtraLarge, isLarge, isMedium);
context, model, isExtraLarge, isLarge, isMedium);
} }
return const Center(child: Text('Error fetching status')); return const Center(child: Text('Error fetching status'));
}, },
@ -43,8 +39,8 @@ class WallSensorBatchControlView extends StatelessWidget
); );
} }
Widget _buildGridView(BuildContext context, WallSensorModel model, Widget _buildGridView(
bool isExtraLarge, bool isLarge, bool isMedium) { BuildContext context, WallSensorModel model, bool isExtraLarge, bool isLarge, bool isMedium) {
return GridView( return GridView(
padding: const EdgeInsets.symmetric(horizontal: 50, vertical: 20), padding: const EdgeInsets.symmetric(horizontal: 50, vertical: 20),
shrinkWrap: true, shrinkWrap: true,
@ -97,8 +93,7 @@ class WallSensorBatchControlView extends StatelessWidget
maxValue: 10000, maxValue: 10000,
steps: 1, steps: 1,
description: 'sec', description: 'sec',
action: (int value) => action: (int value) => context.read<WallSensorBloc>().add(WallSensorBatchControlEvent(
context.read<WallSensorBloc>().add(WallSensorBatchControlEvent(
deviceIds: devicesIds, deviceIds: devicesIds,
code: 'no_one_time', code: 'no_one_time',
value: value, value: value,

View File

@ -3,9 +3,9 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/description_view.dart'; import 'package:syncrow_web/pages/device_managment/shared/table/description_view.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/report_table.dart'; import 'package:syncrow_web/pages/device_managment/shared/table/report_table.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/bloc.dart'; import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/wall_bloc.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/event.dart'; import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/wall_event.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/state.dart'; import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/wall_state.dart';
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_display_data.dart'; import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_display_data.dart';
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_static_widget.dart'; import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_static_widget.dart';
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_status.dart'; import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_status.dart';
@ -14,8 +14,7 @@ import 'package:syncrow_web/pages/device_managment/wall_sensor/model/wall_sensor
import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart'; import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
class WallSensorControlsView extends StatelessWidget class WallSensorControlsView extends StatelessWidget with HelperResponsiveLayout {
with HelperResponsiveLayout {
const WallSensorControlsView({super.key, required this.device}); const WallSensorControlsView({super.key, required this.device});
final AllDevicesModel device; final AllDevicesModel device;
@ -26,23 +25,19 @@ class WallSensorControlsView extends StatelessWidget
final isLarge = isLargeScreenSize(context); final isLarge = isLargeScreenSize(context);
final isMedium = isMediumScreenSize(context); final isMedium = isMediumScreenSize(context);
return BlocProvider( return BlocProvider(
create: (context) => WallSensorBloc(deviceId: device.uuid!) create: (context) =>
..add(WallSensorFetchStatusEvent()), WallSensorBloc(deviceId: device.uuid!)..add(WallSensorFetchStatusEvent()),
child: BlocBuilder<WallSensorBloc, WallSensorState>( child: BlocBuilder<WallSensorBloc, WallSensorState>(
builder: (context, state) { builder: (context, state) {
if (state is WallSensorLoadingInitialState || if (state is WallSensorLoadingInitialState || state is DeviceReportsLoadingState) {
state is DeviceReportsLoadingState) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} else if (state is WallSensorUpdateState) { } else if (state is WallSensorUpdateState) {
return _buildGridView(context, state.wallSensorModel, isExtraLarge, return _buildGridView(context, state.wallSensorModel, isExtraLarge, isLarge, isMedium);
isLarge, isMedium);
} else if (state is DeviceReportsState) { } else if (state is DeviceReportsState) {
return ReportsTable( return ReportsTable(
report: state.deviceReport, report: state.deviceReport,
thirdColumnTitle: thirdColumnTitle: state.code == 'illuminance_value' ? "Value" : 'Status',
state.code == 'illuminance_value' ? "Value" : 'Status', thirdColumnDescription: state.code == 'illuminance_value' ? "Lux" : null,
thirdColumnDescription:
state.code == 'illuminance_value' ? "Lux" : null,
onRowTap: (index) {}, onRowTap: (index) {},
onClose: () { onClose: () {
context.read<WallSensorBloc>().add(BackToGridViewEvent()); context.read<WallSensorBloc>().add(BackToGridViewEvent());
@ -57,8 +52,7 @@ class WallSensorControlsView extends StatelessWidget
); );
} else if (state is DeviceReportsFailedState) { } else if (state is DeviceReportsFailedState) {
final model = context.read<WallSensorBloc>().deviceStatus; final model = context.read<WallSensorBloc>().deviceStatus;
return _buildGridView( return _buildGridView(context, model, isExtraLarge, isLarge, isMedium);
context, model, isExtraLarge, isLarge, isMedium);
} }
return const Center(child: Text('Error fetching status')); return const Center(child: Text('Error fetching status'));
}, },
@ -66,8 +60,8 @@ class WallSensorControlsView extends StatelessWidget
); );
} }
Widget _buildGridView(BuildContext context, WallSensorModel model, Widget _buildGridView(
bool isExtraLarge, bool isLarge, bool isMedium) { BuildContext context, WallSensorModel model, bool isExtraLarge, bool isLarge, bool isMedium) {
return GridView( return GridView(
padding: const EdgeInsets.symmetric(horizontal: 50), padding: const EdgeInsets.symmetric(horizontal: 50),
shrinkWrap: true, shrinkWrap: true,
@ -136,8 +130,7 @@ class WallSensorControlsView extends StatelessWidget
maxValue: 10000, maxValue: 10000,
steps: 1, steps: 1,
description: 'sec', description: 'sec',
action: (int value) => action: (int value) => context.read<WallSensorBloc>().add(WallSensorChangeValueEvent(
context.read<WallSensorBloc>().add(WallSensorChangeValueEvent(
code: 'no_one_time', code: 'no_one_time',
value: value, value: value,
))), ))),
@ -157,8 +150,9 @@ class WallSensorControlsView extends StatelessWidget
), ),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
context.read<WallSensorBloc>().add(GetDeviceReportsEvent( context
code: 'illuminance_value', deviceUuid: device.uuid!)); .read<WallSensorBloc>()
.add(GetDeviceReportsEvent(code: 'illuminance_value', deviceUuid: device.uuid!));
}, },
child: const PresenceStaticWidget( child: const PresenceStaticWidget(
icon: Assets.illuminanceRecordIcon, icon: Assets.illuminanceRecordIcon,
@ -167,8 +161,9 @@ class WallSensorControlsView extends StatelessWidget
), ),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
context.read<WallSensorBloc>().add(GetDeviceReportsEvent( context
code: 'presence_state', deviceUuid: device.uuid!)); .read<WallSensorBloc>()
.add(GetDeviceReportsEvent(code: 'presence_state', deviceUuid: device.uuid!));
}, },
child: const PresenceStaticWidget( child: const PresenceStaticWidget(
icon: Assets.presenceRecordIcon, icon: Assets.presenceRecordIcon,

View File

@ -76,7 +76,8 @@ class VisitorPasswordBloc extends Bloc<VisitorPasswordEvent, VisitorPasswordStat
Future<void> selectTimeVisitorPassword( Future<void> selectTimeVisitorPassword(
SelectTimeVisitorPassword event, SelectTimeVisitorPassword event,
Emitter<VisitorPasswordState> emit,) async { Emitter<VisitorPasswordState> emit,
) async {
final DateTime? picked = await showDatePicker( final DateTime? picked = await showDatePicker(
context: event.context, context: event.context,
initialDate: DateTime.now(), initialDate: DateTime.now(),
@ -359,7 +360,6 @@ class VisitorPasswordBloc extends Bloc<VisitorPasswordEvent, VisitorPasswordStat
context: event.context, context: event.context,
initialTime: TimeOfDay.now(), initialTime: TimeOfDay.now(),
); );
print('timePicked=$timePicked');
if (timePicked != null) { if (timePicked != null) {
final selectedDateTime = DateTime( final selectedDateTime = DateTime(

View File

@ -72,7 +72,7 @@ class DeviceModel {
} else if (type == DeviceType.WH) { } else if (type == DeviceType.WH) {
tempIcon = Assets.waterHeater; tempIcon = Assets.waterHeater;
} else if (type == DeviceType.DoorSensor) { } else if (type == DeviceType.DoorSensor) {
tempIcon = Assets.sensors; tempIcon = Assets.openCloseDoor;
} else if (type == DeviceType.GarageDoor) { } else if (type == DeviceType.GarageDoor) {
tempIcon = Assets.openedDoor; tempIcon = Assets.openedDoor;
} else if (type == DeviceType.WaterLeak) { } else if (type == DeviceType.WaterLeak) {

View File

@ -12,7 +12,6 @@ class AccessMangApi {
path: ApiEndpoints.visitorPassword, path: ApiEndpoints.visitorPassword,
showServerMessage: true, showServerMessage: true,
expectedResponseModel: (json) { expectedResponseModel: (json) {
print(json);
List<dynamic> jsonData = json; List<dynamic> jsonData = json;
List<PasswordModel> passwordList = jsonData.map((jsonItem) { List<PasswordModel> passwordList = jsonData.map((jsonItem) {
return PasswordModel.fromJson(jsonItem); return PasswordModel.fromJson(jsonItem);