Bug fixes

This commit is contained in:
Abdullah Alassaf
2024-08-29 16:23:25 +03:00
parent 95b1e2c932
commit 6e183dba9f
28 changed files with 236 additions and 351 deletions

View File

@ -5,7 +5,7 @@ import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_mo
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/view/ceiling_sensor_controls.dart';
import 'package:syncrow_web/pages/device_managment/door_lock/view/door_lock_status_view.dart';
import 'package:syncrow_web/pages/device_managment/gateway/view/gateway_view.dart';
import 'package:syncrow_web/pages/device_managment/living_room_switch/view/living_room_device_control.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/view/living_room_device_control.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/view/wall_sensor_conrtols.dart';
mixin RouteControlsBasedCode {

View File

@ -4,7 +4,7 @@ import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart';
import 'package:syncrow_web/pages/device_managment/living_room_switch/models/living_room_model.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/models/living_room_model.dart';
import 'package:syncrow_web/services/devices_mang_api.dart';
part 'living_room_event.dart';
@ -24,18 +24,15 @@ class LivingRoomBloc extends Bloc<LivingRoomEvent, LivingRoomState> {
LivingRoomFetchDeviceStatus event, Emitter<LivingRoomState> emit) async {
emit(LivingRoomDeviceStatusLoading());
try {
final status =
await DevicesManagementApi().getDeviceStatus(event.deviceId);
deviceStatus =
LivingRoomStatusModel.fromJson(event.deviceId, status.status);
final status = await DevicesManagementApi().getDeviceStatus(event.deviceId);
deviceStatus = LivingRoomStatusModel.fromJson(event.deviceId, status.status);
emit(LivingRoomDeviceStatusLoaded(deviceStatus));
} catch (e) {
emit(LivingRoomDeviceManagementError(e.toString()));
}
}
FutureOr<void> _livingRoomControl(
LivingRoomControl event, Emitter<LivingRoomState> emit) async {
FutureOr<void> _livingRoomControl(LivingRoomControl event, Emitter<LivingRoomState> emit) async {
final oldValue = _getValueByCode(event.code);
_updateLocalValue(event.code, event.value);
@ -63,8 +60,8 @@ class LivingRoomBloc extends Bloc<LivingRoomEvent, LivingRoomState> {
}
_timer = Timer(const Duration(seconds: 1), () async {
try {
final response = await DevicesManagementApi()
.deviceControl(deviceId, Status(code: code, value: value));
final response =
await DevicesManagementApi().deviceControl(deviceId, Status(code: code, value: value));
if (!response) {
_revertValueAndEmit(deviceId, code, oldValue, emit);
}
@ -74,8 +71,8 @@ class LivingRoomBloc extends Bloc<LivingRoomEvent, LivingRoomState> {
});
}
void _revertValueAndEmit(String deviceId, String code, dynamic oldValue,
Emitter<LivingRoomState> emit) {
void _revertValueAndEmit(
String deviceId, String code, dynamic oldValue, Emitter<LivingRoomState> emit) {
_updateLocalValue(code, oldValue);
emit(LivingRoomDeviceStatusLoaded(deviceStatus));
emit(const LivingRoomControlError('Failed to control the device.'));

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:syncrow_web/pages/device_managment/living_room_switch/widgets/cieling_light.dart';
import 'package:syncrow_web/pages/device_managment/living_room_switch/widgets/spot_light.dart';
import 'package:syncrow_web/pages/device_managment/living_room_switch/widgets/wall_light.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/widgets/cieling_light.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/widgets/spot_light.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/widgets/wall_light.dart';
mixin LivingRoomHelper {
Widget livingRoomControlWidgets(
@ -18,4 +18,3 @@ mixin LivingRoomHelper {
}
}
}

View File

@ -1,12 +1,11 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/device_managment/living_room_switch/bloc/living_room_bloc.dart';
import 'package:syncrow_web/pages/device_managment/living_room_switch/models/living_room_model.dart';
import 'package:syncrow_web/pages/device_managment/living_room_switch/widgets/living_toggle_widget.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/bloc/living_room_bloc.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/models/living_room_model.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/widgets/living_toggle_widget.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
class LivingRoomDeviceControl extends StatelessWidget
with HelperResponsiveLayout {
class LivingRoomDeviceControl extends StatelessWidget with HelperResponsiveLayout {
final String deviceId;
const LivingRoomDeviceControl({super.key, required this.deviceId});
@ -14,16 +13,15 @@ class LivingRoomDeviceControl extends StatelessWidget
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => LivingRoomBloc(deviceId: deviceId)
..add(LivingRoomFetchDeviceStatus(deviceId)),
create: (context) =>
LivingRoomBloc(deviceId: deviceId)..add(LivingRoomFetchDeviceStatus(deviceId)),
child: BlocBuilder<LivingRoomBloc, LivingRoomState>(
builder: (context, state) {
if (state is LivingRoomDeviceStatusLoading) {
return const Center(child: CircularProgressIndicator());
} else if (state is LivingRoomDeviceStatusLoaded) {
return _buildStatusControls(context, state.status);
} else if (state is LivingRoomDeviceManagementError ||
state is LivingRoomControlError) {
} else if (state is LivingRoomDeviceManagementError || state is LivingRoomControlError) {
return const Center(child: Text('Error fetching status'));
} else {
return const Center(child: CircularProgressIndicator());
@ -33,8 +31,7 @@ class LivingRoomDeviceControl extends StatelessWidget
);
}
Widget _buildStatusControls(
BuildContext context, LivingRoomStatusModel status) {
Widget _buildStatusControls(BuildContext context, LivingRoomStatusModel status) {
final isExtraLarge = isExtraLargeScreenSize(context);
final isLarge = isLargeScreenSize(context);
final isMedium = isMediumScreenSize(context);

View File

@ -2,16 +2,12 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/svg.dart';
import 'package:syncrow_web/pages/device_managment/living_room_switch/bloc/living_room_bloc.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/bloc/living_room_bloc.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
class CeilingLight extends StatelessWidget {
const CeilingLight(
{super.key,
required this.value,
required this.code,
required this.deviceId});
const CeilingLight({super.key, required this.value, required this.code, required this.deviceId});
final bool value;
final String code;

View File

@ -2,7 +2,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:syncrow_web/pages/device_managment/living_room_switch/bloc/living_room_bloc.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/bloc/living_room_bloc.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';

View File

@ -2,16 +2,12 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/svg.dart';
import 'package:syncrow_web/pages/device_managment/living_room_switch/bloc/living_room_bloc.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/bloc/living_room_bloc.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
class SpotLight extends StatelessWidget {
const SpotLight(
{super.key,
required this.value,
required this.code,
required this.deviceId});
const SpotLight({super.key, required this.value, required this.code, required this.deviceId});
final bool value;
final String code;

View File

@ -2,16 +2,12 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/svg.dart';
import 'package:syncrow_web/pages/device_managment/living_room_switch/bloc/living_room_bloc.dart';
import 'package:syncrow_web/pages/device_managment/three_gang_switch/bloc/living_room_bloc.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
class WallLight extends StatelessWidget {
const WallLight(
{super.key,
required this.value,
required this.code,
required this.deviceId});
const WallLight({super.key, required this.value, required this.code, required this.deviceId});
final bool value;
final String code;

View File

@ -21,19 +21,17 @@ class WallSensorControls extends StatelessWidget with HelperResponsiveLayout {
@override
Widget build(BuildContext context) {
final isExtraLarge = isExtraLargeScreenSize(context);
final isLarge = isLargeScreenSize(context);
final isMedium = isMediumScreenSize(context);
return BlocProvider(
create: (context) =>
WallSensorBloc(deviceId: device.uuid!)..add(WallSensorInitialEvent()),
create: (context) => WallSensorBloc(deviceId: device.uuid!)..add(WallSensorInitialEvent()),
child: BlocBuilder<WallSensorBloc, WallSensorState>(
builder: (context, state) {
if (state is WallSensorLoadingInitialState ||
state is DeviceReportsLoadingState) {
if (state is WallSensorLoadingInitialState || state is DeviceReportsLoadingState) {
return const Center(child: CircularProgressIndicator());
} else if (state is WallSensorUpdateState) {
return _buildGridView(
context, state.wallSensorModel, isLarge, isMedium);
return _buildGridView(context, state.wallSensorModel, isExtraLarge, isLarge, isMedium);
} else if (state is DeviceReportsState) {
return ReportsTable(
report: state.deviceReport,
@ -51,7 +49,7 @@ class WallSensorControls extends StatelessWidget with HelperResponsiveLayout {
);
} else if (state is DeviceReportsFailedState) {
final model = context.read<WallSensorBloc>().deviceStatus;
return _buildGridView(context, model, isLarge, isMedium);
return _buildGridView(context, model, isExtraLarge, isLarge, isMedium);
}
return const Center(child: Text('Error fetching status'));
},
@ -59,14 +57,14 @@ class WallSensorControls extends StatelessWidget with HelperResponsiveLayout {
);
}
Widget _buildGridView(BuildContext context, WallSensorModel model,
bool isLarge, bool isMedium) {
Widget _buildGridView(
BuildContext context, WallSensorModel model, bool isExtraLarge, bool isLarge, bool isMedium) {
return GridView(
padding: const EdgeInsets.symmetric(horizontal: 50),
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: isLarge
crossAxisCount: isLarge || isExtraLarge
? 3
: isMedium
? 2
@ -129,11 +127,10 @@ class WallSensorControls extends StatelessWidget with HelperResponsiveLayout {
maxValue: 10000,
steps: 1,
description: 'hr',
action: (int value) =>
context.read<WallSensorBloc>().add(WallSensorChangeValueEvent(
code: 'no_one_time',
value: value,
))),
action: (int value) => context.read<WallSensorBloc>().add(WallSensorChangeValueEvent(
code: 'no_one_time',
value: value,
))),
PresenceUpdateData(
value: model.farDetection.toDouble(),
title: 'Far Detection:',
@ -150,8 +147,9 @@ class WallSensorControls extends StatelessWidget with HelperResponsiveLayout {
),
GestureDetector(
onTap: () {
context.read<WallSensorBloc>().add(GetDeviceReportsEvent(
code: 'illuminance_value', deviceUuid: device.uuid!));
context
.read<WallSensorBloc>()
.add(GetDeviceReportsEvent(code: 'illuminance_value', deviceUuid: device.uuid!));
},
child: const PresenceStaticWidget(
icon: Assets.illuminanceRecordIcon,
@ -160,8 +158,9 @@ class WallSensorControls extends StatelessWidget with HelperResponsiveLayout {
),
GestureDetector(
onTap: () {
context.read<WallSensorBloc>().add(GetDeviceReportsEvent(
code: 'presence_state', deviceUuid: device.uuid!));
context
.read<WallSensorBloc>()
.add(GetDeviceReportsEvent(code: 'presence_state', deviceUuid: device.uuid!));
},
child: const PresenceStaticWidget(
icon: Assets.presenceRecordIcon,