diff --git a/assets/icons/1gang.svg b/assets/icons/1gang.svg
new file mode 100644
index 00000000..647dc350
--- /dev/null
+++ b/assets/icons/1gang.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/icons/2gang.svg b/assets/icons/2gang.svg
new file mode 100644
index 00000000..6cfe191b
--- /dev/null
+++ b/assets/icons/2gang.svg
@@ -0,0 +1,7 @@
+
diff --git a/lib/pages/common/curtain_toggle.dart b/lib/pages/common/curtain_toggle.dart
index a44822c3..305ede03 100644
--- a/lib/pages/common/curtain_toggle.dart
+++ b/lib/pages/common/curtain_toggle.dart
@@ -1,6 +1,6 @@
import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
+import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
@@ -22,13 +22,7 @@ class CurtainToggle extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(20),
- color: ColorsManager.greyColor.withOpacity(0.2),
- border: Border.all(color: ColorsManager.boxDivider),
- ),
- padding: const EdgeInsets.all(16),
+ return DeviceControlsContainer(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
diff --git a/lib/pages/common/custom_table.dart b/lib/pages/common/custom_table.dart
index 1de04c02..5b6692ae 100644
--- a/lib/pages/common/custom_table.dart
+++ b/lib/pages/common/custom_table.dart
@@ -1,5 +1,7 @@
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/all_devices/bloc/device_managment_bloc.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
@@ -78,20 +80,22 @@ class _DynamicTableState extends State {
_selectAll = false;
}
- void _toggleSelectAll(bool? value) {
- setState(() {
- _selectAll = value ?? false;
- _selectedRows = List.filled(widget.data.length, _selectAll);
- });
- widget.onSelectionChanged?.call(_selectedRows);
- }
-
void _toggleRowSelection(int index) {
setState(() {
_selectedRows[index] = !_selectedRows[index];
_selectAll = _selectedRows.every((isSelected) => isSelected);
});
widget.onSelectionChanged?.call(_selectedRows);
+ context.read().add(UpdateSelection(_selectedRows));
+ }
+
+ void _toggleSelectAll(bool? value) {
+ setState(() {
+ _selectAll = value ?? false;
+ _selectedRows = List.filled(widget.data.length, _selectAll);
+ });
+ widget.onSelectionChanged?.call(_selectedRows);
+ context.read().add(UpdateSelection(_selectedRows));
}
@override
@@ -130,13 +134,9 @@ class _DynamicTableState extends State {
),
Text(
// no password
- widget.tableName == 'AccessManagement'
- ? 'No Password '
- : 'No Devices',
- style: Theme.of(context)
- .textTheme
- .bodySmall!
- .copyWith(color: ColorsManager.grayColor),
+ widget.tableName == 'AccessManagement' ? 'No Password ' : 'No Devices',
+ style:
+ Theme.of(context).textTheme.bodySmall!.copyWith(color: ColorsManager.grayColor),
)
],
),
@@ -155,10 +155,8 @@ class _DynamicTableState extends State {
final row = widget.data[index];
return Row(
children: [
- if (widget.withCheckBox)
- _buildRowCheckbox(index, widget.size.height * 0.10),
- ...row.map((cell) =>
- _buildTableCell(cell.toString(), widget.size.height * 0.10)),
+ if (widget.withCheckBox) _buildRowCheckbox(index, widget.size.height * 0.10),
+ ...row.map((cell) => _buildTableCell(cell.toString(), widget.size.height * 0.10)),
],
);
},
diff --git a/lib/pages/device_managment/ac/view/ac_device_batch_control.dart b/lib/pages/device_managment/ac/view/ac_device_batch_control.dart
index 1930e9c4..2da394c7 100644
--- a/lib/pages/device_managment/ac/view/ac_device_batch_control.dart
+++ b/lib/pages/device_managment/ac/view/ac_device_batch_control.dart
@@ -15,8 +15,7 @@ import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
-class AcDeviceBatchControlView extends StatelessWidget
- with HelperResponsiveLayout {
+class AcDeviceBatchControlView extends StatelessWidget with HelperResponsiveLayout {
const AcDeviceBatchControlView({super.key, required this.devicesIds});
final List devicesIds;
@@ -27,8 +26,7 @@ class AcDeviceBatchControlView extends StatelessWidget
final isLarge = isLargeScreenSize(context);
final isMedium = isMediumScreenSize(context);
return BlocProvider(
- create: (context) => AcBloc(deviceId: devicesIds.first)
- ..add(AcFetchBatchStatusEvent(devicesIds)),
+ create: (context) => AcBloc(deviceId: devicesIds.first)..add(AcFetchBatchStatusEvent(devicesIds)),
child: BlocBuilder(
builder: (context, state) {
if (state is ACStatusLoaded) {
@@ -66,6 +64,7 @@ class AcDeviceBatchControlView extends StatelessWidget
tempSet: state.status.tempSet,
code: 'temp_set',
devicesIds: devicesIds,
+ isBatch: true,
),
BatchAcMode(
value: state.status.acMode,
@@ -99,8 +98,7 @@ class AcDeviceBatchControlView extends StatelessWidget
),
Text(
'h',
- style: context.textTheme.bodySmall!
- .copyWith(color: ColorsManager.blackColor),
+ style: context.textTheme.bodySmall!.copyWith(color: ColorsManager.blackColor),
),
Text(
'30',
@@ -109,9 +107,7 @@ class AcDeviceBatchControlView extends StatelessWidget
fontWeight: FontWeight.bold,
),
),
- Text('m',
- style: context.textTheme.bodySmall!
- .copyWith(color: ColorsManager.blackColor)),
+ Text('m', style: context.textTheme.bodySmall!.copyWith(color: ColorsManager.blackColor)),
IconButton(
onPressed: () {},
icon: const Icon(
@@ -133,7 +129,7 @@ class AcDeviceBatchControlView extends StatelessWidget
code: 'child_lock',
value: state.status.childLock,
label: 'Child Lock',
- icon: state.status.childLock ? Assets.unlock : Assets.acLock,
+ icon: state.status.childLock ? Assets.acLock : Assets.unlock,
onChange: (value) {
context.read().add(AcBatchControlEvent(
devicesIds: devicesIds,
@@ -147,8 +143,7 @@ class AcDeviceBatchControlView extends StatelessWidget
callFactoryReset: () {
context.read().add(AcFactoryResetEvent(
deviceId: state.status.uuid,
- factoryResetModel:
- FactoryResetModel(devicesUuid: devicesIds),
+ factoryResetModel: FactoryResetModel(devicesUuid: devicesIds),
));
},
),
diff --git a/lib/pages/device_managment/ac/view/ac_device_control.dart b/lib/pages/device_managment/ac/view/ac_device_control.dart
index 3c383854..37d3a402 100644
--- a/lib/pages/device_managment/ac/view/ac_device_control.dart
+++ b/lib/pages/device_managment/ac/view/ac_device_control.dart
@@ -24,8 +24,7 @@ class AcDeviceControlsView extends StatelessWidget with HelperResponsiveLayout {
final isLarge = isLargeScreenSize(context);
final isMedium = isMediumScreenSize(context);
return BlocProvider(
- create: (context) => AcBloc(deviceId: device.uuid!)
- ..add(AcFetchDeviceStatusEvent(device.uuid!)),
+ create: (context) => AcBloc(deviceId: device.uuid!)..add(AcFetchDeviceStatusEvent(device.uuid!)),
child: BlocBuilder(
builder: (context, state) {
if (state is ACStatusLoaded) {
@@ -98,8 +97,7 @@ class AcDeviceControlsView extends StatelessWidget with HelperResponsiveLayout {
),
Text(
'h',
- style: context.textTheme.bodySmall!
- .copyWith(color: ColorsManager.blackColor),
+ style: context.textTheme.bodySmall!.copyWith(color: ColorsManager.blackColor),
),
Text(
'30',
@@ -108,9 +106,7 @@ class AcDeviceControlsView extends StatelessWidget with HelperResponsiveLayout {
fontWeight: FontWeight.bold,
),
),
- Text('m',
- style: context.textTheme.bodySmall!
- .copyWith(color: ColorsManager.blackColor)),
+ Text('m', style: context.textTheme.bodySmall!.copyWith(color: ColorsManager.blackColor)),
IconButton(
onPressed: () {},
icon: const Icon(
@@ -132,7 +128,7 @@ class AcDeviceControlsView extends StatelessWidget with HelperResponsiveLayout {
code: 'child_lock',
value: state.status.childLock,
label: 'Child Lock',
- icon: state.status.childLock ? Assets.unlock : Assets.acLock,
+ icon: state.status.childLock ? Assets.acLock : Assets.unlock,
onChange: (value) {
context.read().add(
AcControlEvent(
diff --git a/lib/pages/device_managment/ac/view/batch_control_list/batch_ac_mode.dart b/lib/pages/device_managment/ac/view/batch_control_list/batch_ac_mode.dart
index 8b601ac2..60d48256 100644
--- a/lib/pages/device_managment/ac/view/batch_control_list/batch_ac_mode.dart
+++ b/lib/pages/device_managment/ac/view/batch_control_list/batch_ac_mode.dart
@@ -1,11 +1,12 @@
import 'package:flutter/material.dart';
-import 'package:flutter_svg/flutter_svg.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
-import 'package:syncrow_web/pages/device_managment/ac/model/ac_model.dart';
-import 'package:syncrow_web/utils/color_manager.dart';
-import 'package:syncrow_web/utils/constants/assets.dart';
+import 'package:flutter_svg/flutter_svg.dart';
import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_bloc.dart';
import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_event.dart';
+import 'package:syncrow_web/pages/device_managment/ac/model/ac_model.dart';
+import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
+import 'package:syncrow_web/utils/color_manager.dart';
+import 'package:syncrow_web/utils/constants/assets.dart';
class BatchAcMode extends StatelessWidget {
const BatchAcMode({
@@ -21,30 +22,20 @@ class BatchAcMode extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(20),
- color: ColorsManager.greyColor.withOpacity(0.2),
- border: Border.all(color: ColorsManager.boxDivider),
- ),
- padding: const EdgeInsets.all(16),
+ return DeviceControlsContainer(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
- _buildIconContainer(context, TempModes.cold, Assets.freezing,
- value == TempModes.cold),
- _buildIconContainer(
- context, TempModes.hot, Assets.acSun, value == TempModes.hot),
- _buildIconContainer(context, TempModes.wind, Assets.acAirConditioner,
- value == TempModes.wind),
+ _buildIconContainer(context, TempModes.cold, Assets.freezing, value == TempModes.cold),
+ _buildIconContainer(context, TempModes.hot, Assets.acSun, value == TempModes.hot),
+ _buildIconContainer(context, TempModes.wind, Assets.acAirConditioner, value == TempModes.wind),
],
),
);
}
- Widget _buildIconContainer(
- BuildContext context, TempModes mode, String assetPath, bool isSelected) {
+ Widget _buildIconContainer(BuildContext context, TempModes mode, String assetPath, bool isSelected) {
return Flexible(
child: GestureDetector(
onTap: () {
diff --git a/lib/pages/device_managment/ac/view/batch_control_list/batch_current_temp.dart b/lib/pages/device_managment/ac/view/batch_control_list/batch_current_temp.dart
index ba5ea639..be7441df 100644
--- a/lib/pages/device_managment/ac/view/batch_control_list/batch_current_temp.dart
+++ b/lib/pages/device_managment/ac/view/batch_control_list/batch_current_temp.dart
@@ -1,11 +1,13 @@
import 'dart:async';
+
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_bloc.dart';
import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_event.dart';
import 'package:syncrow_web/pages/device_managment/shared/celciuse_symbol.dart';
+import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
import 'package:syncrow_web/pages/device_managment/shared/increament_decreament.dart';
import 'package:syncrow_web/utils/color_manager.dart';
-import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_bloc.dart';
class BatchCurrentTemp extends StatefulWidget {
const BatchCurrentTemp({
@@ -14,12 +16,14 @@ class BatchCurrentTemp extends StatefulWidget {
required this.devicesIds,
required this.currentTemp,
required this.tempSet,
+ this.isBatch,
});
final String code;
final List devicesIds;
final int currentTemp;
final int tempSet;
+ final bool? isBatch;
@override
State createState() => _CurrentTempState();
@@ -67,49 +71,39 @@ class _CurrentTempState extends State {
@override
Widget build(BuildContext context) {
- return Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(20),
- color: ColorsManager.greyColor.withOpacity(0.2),
- border: Border.all(color: ColorsManager.boxDivider),
- ),
- padding: const EdgeInsets.all(16),
+ return DeviceControlsContainer(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- Column(
- mainAxisAlignment: MainAxisAlignment.start,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text(
- 'Current Temperature',
- style: Theme.of(context)
- .textTheme
- .bodySmall!
- .copyWith(color: Colors.grey),
- ),
- const SizedBox(
- height: 5,
- ),
- Row(
- children: [
- Text(
- (widget.currentTemp > 99
- ? widget.currentTemp / 10
- : widget.currentTemp)
- .toString(),
- style: Theme.of(context)
- .textTheme
- .bodySmall!
- .copyWith(color: Colors.grey),
- ),
- const CelsiusSymbol(
- color: Colors.grey,
- )
- ],
- ),
- ],
- ),
+ widget.isBatch == true
+ ? Text(
+ 'Set Temperature',
+ style: Theme.of(context).textTheme.bodySmall!.copyWith(color: Colors.grey),
+ )
+ : Column(
+ mainAxisAlignment: MainAxisAlignment.start,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ 'Current Temperature',
+ style: Theme.of(context).textTheme.bodySmall!.copyWith(color: Colors.grey),
+ ),
+ const SizedBox(
+ height: 5,
+ ),
+ Row(
+ children: [
+ Text(
+ (widget.currentTemp > 99 ? widget.currentTemp / 10 : widget.currentTemp).toString(),
+ style: Theme.of(context).textTheme.bodySmall!.copyWith(color: Colors.grey),
+ ),
+ const CelsiusSymbol(
+ color: Colors.grey,
+ )
+ ],
+ ),
+ ],
+ ),
const Spacer(),
IncrementDecrementWidget(
value: _adjustedValue.toString(),
diff --git a/lib/pages/device_managment/ac/view/batch_control_list/batch_fan_speed.dart b/lib/pages/device_managment/ac/view/batch_control_list/batch_fan_speed.dart
index 11882473..ba49047a 100644
--- a/lib/pages/device_managment/ac/view/batch_control_list/batch_fan_speed.dart
+++ b/lib/pages/device_managment/ac/view/batch_control_list/batch_fan_speed.dart
@@ -1,11 +1,12 @@
import 'package:flutter/material.dart';
-import 'package:flutter_svg/flutter_svg.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
-import 'package:syncrow_web/pages/device_managment/ac/model/ac_model.dart';
-import 'package:syncrow_web/utils/color_manager.dart';
-import 'package:syncrow_web/utils/constants/assets.dart';
+import 'package:flutter_svg/flutter_svg.dart';
import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_bloc.dart';
import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_event.dart';
+import 'package:syncrow_web/pages/device_managment/ac/model/ac_model.dart';
+import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
+import 'package:syncrow_web/utils/color_manager.dart';
+import 'package:syncrow_web/utils/constants/assets.dart';
class BatchFanSpeedControl extends StatelessWidget {
const BatchFanSpeedControl({
@@ -21,23 +22,16 @@ class BatchFanSpeedControl extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(20),
- color: ColorsManager.greyColor.withOpacity(0.2),
- border: Border.all(color: ColorsManager.boxDivider),
- ),
- padding: const EdgeInsets.all(8),
+ return DeviceControlsContainer(
+ padding: 8,
child: Column(
children: [
Wrap(
runSpacing: 8,
spacing: 8,
children: [
- _buildIconContainer(context, FanSpeeds.auto, Assets.acFanAuto,
- value == FanSpeeds.auto),
- _buildIconContainer(context, FanSpeeds.low, Assets.acFanLow,
- value == FanSpeeds.low),
+ _buildIconContainer(context, FanSpeeds.auto, Assets.acFanAuto, value == FanSpeeds.auto),
+ _buildIconContainer(context, FanSpeeds.low, Assets.acFanLow, value == FanSpeeds.low),
],
),
const SizedBox(height: 8),
@@ -45,10 +39,8 @@ class BatchFanSpeedControl extends StatelessWidget {
runSpacing: 8,
spacing: 8,
children: [
- _buildIconContainer(context, FanSpeeds.middle, Assets.acFanMiddle,
- value == FanSpeeds.middle),
- _buildIconContainer(context, FanSpeeds.high, Assets.acFanHigh,
- value == FanSpeeds.high),
+ _buildIconContainer(context, FanSpeeds.middle, Assets.acFanMiddle, value == FanSpeeds.middle),
+ _buildIconContainer(context, FanSpeeds.high, Assets.acFanHigh, value == FanSpeeds.high),
],
)
],
@@ -56,8 +48,7 @@ class BatchFanSpeedControl extends StatelessWidget {
);
}
- Widget _buildIconContainer(BuildContext context, FanSpeeds speed,
- String assetPath, bool isSelected) {
+ Widget _buildIconContainer(BuildContext context, FanSpeeds speed, String assetPath, bool isSelected) {
return GestureDetector(
onTap: () {
context.read().add(
diff --git a/lib/pages/device_managment/ac/view/control_list/ac_mode.dart b/lib/pages/device_managment/ac/view/control_list/ac_mode.dart
index 65c7ae0a..c6ffc052 100644
--- a/lib/pages/device_managment/ac/view/control_list/ac_mode.dart
+++ b/lib/pages/device_managment/ac/view/control_list/ac_mode.dart
@@ -1,11 +1,12 @@
import 'package:flutter/material.dart';
-import 'package:flutter_svg/flutter_svg.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
-import 'package:syncrow_web/pages/device_managment/ac/model/ac_model.dart';
-import 'package:syncrow_web/utils/color_manager.dart';
-import 'package:syncrow_web/utils/constants/assets.dart';
+import 'package:flutter_svg/flutter_svg.dart';
import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_bloc.dart';
import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_event.dart';
+import 'package:syncrow_web/pages/device_managment/ac/model/ac_model.dart';
+import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
+import 'package:syncrow_web/utils/color_manager.dart';
+import 'package:syncrow_web/utils/constants/assets.dart';
class AcMode extends StatelessWidget {
const AcMode({
@@ -21,30 +22,20 @@ class AcMode extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(20),
- color: ColorsManager.greyColor.withOpacity(0.2),
- border: Border.all(color: ColorsManager.boxDivider),
- ),
- padding: const EdgeInsets.all(16),
+ return DeviceControlsContainer(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
- _buildIconContainer(context, TempModes.cold, Assets.freezing,
- value == TempModes.cold),
- _buildIconContainer(
- context, TempModes.hot, Assets.acSun, value == TempModes.hot),
- _buildIconContainer(context, TempModes.wind, Assets.acAirConditioner,
- value == TempModes.wind),
+ _buildIconContainer(context, TempModes.cold, Assets.freezing, value == TempModes.cold),
+ _buildIconContainer(context, TempModes.hot, Assets.acSun, value == TempModes.hot),
+ _buildIconContainer(context, TempModes.wind, Assets.acAirConditioner, value == TempModes.wind),
],
),
);
}
- Widget _buildIconContainer(
- BuildContext context, TempModes mode, String assetPath, bool isSelected) {
+ Widget _buildIconContainer(BuildContext context, TempModes mode, String assetPath, bool isSelected) {
return Flexible(
child: GestureDetector(
onTap: () {
diff --git a/lib/pages/device_managment/ac/view/control_list/ac_toggle.dart b/lib/pages/device_managment/ac/view/control_list/ac_toggle.dart
index e709a6b4..4e81ec09 100644
--- a/lib/pages/device_managment/ac/view/control_list/ac_toggle.dart
+++ b/lib/pages/device_managment/ac/view/control_list/ac_toggle.dart
@@ -1,9 +1,9 @@
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/ac/bloc/ac_bloc.dart';
import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_event.dart';
+import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
@@ -25,13 +25,7 @@ class AcToggle extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(20),
- color: ColorsManager.greyColor.withOpacity(0.2),
- border: Border.all(color: ColorsManager.boxDivider),
- ),
- padding: const EdgeInsets.all(16),
+ return DeviceControlsContainer(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
diff --git a/lib/pages/device_managment/ac/view/control_list/current_temp.dart b/lib/pages/device_managment/ac/view/control_list/current_temp.dart
index 0327e357..7618846c 100644
--- a/lib/pages/device_managment/ac/view/control_list/current_temp.dart
+++ b/lib/pages/device_managment/ac/view/control_list/current_temp.dart
@@ -1,11 +1,13 @@
import 'dart:async';
+
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_bloc.dart';
import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_event.dart';
import 'package:syncrow_web/pages/device_managment/shared/celciuse_symbol.dart';
+import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
import 'package:syncrow_web/pages/device_managment/shared/increament_decreament.dart';
import 'package:syncrow_web/utils/color_manager.dart';
-import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_bloc.dart';
class CurrentTemp extends StatefulWidget {
const CurrentTemp({
@@ -67,13 +69,7 @@ class _CurrentTempState extends State {
@override
Widget build(BuildContext context) {
- return Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(20),
- color: ColorsManager.greyColor.withOpacity(0.2),
- border: Border.all(color: ColorsManager.boxDivider),
- ),
- padding: const EdgeInsets.all(16),
+ return DeviceControlsContainer(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -83,10 +79,7 @@ class _CurrentTempState extends State {
children: [
Text(
'Current Temperature',
- style: Theme.of(context)
- .textTheme
- .bodySmall!
- .copyWith(color: Colors.grey),
+ style: Theme.of(context).textTheme.bodySmall!.copyWith(color: Colors.grey),
),
const SizedBox(
height: 5,
@@ -94,14 +87,8 @@ class _CurrentTempState extends State {
Row(
children: [
Text(
- (widget.currentTemp > 99
- ? widget.currentTemp / 10
- : widget.currentTemp)
- .toString(),
- style: Theme.of(context)
- .textTheme
- .bodySmall!
- .copyWith(color: Colors.grey),
+ (widget.currentTemp > 99 ? widget.currentTemp / 10 : widget.currentTemp).toString(),
+ style: Theme.of(context).textTheme.bodySmall!.copyWith(color: Colors.grey),
),
const CelsiusSymbol(
color: Colors.grey,
diff --git a/lib/pages/device_managment/ac/view/control_list/fan_speed.dart b/lib/pages/device_managment/ac/view/control_list/fan_speed.dart
index 8612c689..952e112b 100644
--- a/lib/pages/device_managment/ac/view/control_list/fan_speed.dart
+++ b/lib/pages/device_managment/ac/view/control_list/fan_speed.dart
@@ -1,11 +1,12 @@
import 'package:flutter/material.dart';
-import 'package:flutter_svg/flutter_svg.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
-import 'package:syncrow_web/pages/device_managment/ac/model/ac_model.dart';
-import 'package:syncrow_web/utils/color_manager.dart';
-import 'package:syncrow_web/utils/constants/assets.dart';
+import 'package:flutter_svg/flutter_svg.dart';
import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_bloc.dart';
import 'package:syncrow_web/pages/device_managment/ac/bloc/ac_event.dart';
+import 'package:syncrow_web/pages/device_managment/ac/model/ac_model.dart';
+import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
+import 'package:syncrow_web/utils/color_manager.dart';
+import 'package:syncrow_web/utils/constants/assets.dart';
class FanSpeedControl extends StatelessWidget {
const FanSpeedControl({
@@ -21,23 +22,15 @@ class FanSpeedControl extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(20),
- color: ColorsManager.greyColor.withOpacity(0.2),
- border: Border.all(color: ColorsManager.boxDivider),
- ),
- padding: const EdgeInsets.all(8),
+ return DeviceControlsContainer(
child: Column(
children: [
Wrap(
runSpacing: 8,
spacing: 8,
children: [
- _buildIconContainer(context, FanSpeeds.auto, Assets.acFanAuto,
- value == FanSpeeds.auto),
- _buildIconContainer(context, FanSpeeds.low, Assets.acFanLow,
- value == FanSpeeds.low),
+ _buildIconContainer(context, FanSpeeds.auto, Assets.acFanAuto, value == FanSpeeds.auto),
+ _buildIconContainer(context, FanSpeeds.low, Assets.acFanLow, value == FanSpeeds.low),
],
),
const SizedBox(height: 8),
@@ -45,10 +38,8 @@ class FanSpeedControl extends StatelessWidget {
runSpacing: 8,
spacing: 8,
children: [
- _buildIconContainer(context, FanSpeeds.middle, Assets.acFanMiddle,
- value == FanSpeeds.middle),
- _buildIconContainer(context, FanSpeeds.high, Assets.acFanHigh,
- value == FanSpeeds.high),
+ _buildIconContainer(context, FanSpeeds.middle, Assets.acFanMiddle, value == FanSpeeds.middle),
+ _buildIconContainer(context, FanSpeeds.high, Assets.acFanHigh, value == FanSpeeds.high),
],
)
],
@@ -56,8 +47,7 @@ class FanSpeedControl extends StatelessWidget {
);
}
- Widget _buildIconContainer(BuildContext context, FanSpeeds speed,
- String assetPath, bool isSelected) {
+ Widget _buildIconContainer(BuildContext context, FanSpeeds speed, String assetPath, bool isSelected) {
return GestureDetector(
onTap: () {
context.read().add(
diff --git a/lib/pages/device_managment/all_devices/bloc/device_managment_bloc.dart b/lib/pages/device_managment/all_devices/bloc/device_managment_bloc.dart
index fc066335..5c35f9e9 100644
--- a/lib/pages/device_managment/all_devices/bloc/device_managment_bloc.dart
+++ b/lib/pages/device_managment/all_devices/bloc/device_managment_bloc.dart
@@ -6,8 +6,7 @@ import 'package:syncrow_web/services/devices_mang_api.dart';
part 'device_managment_event.dart';
part 'device_managment_state.dart';
-class DeviceManagementBloc
- extends Bloc {
+class DeviceManagementBloc extends Bloc {
int _selectedIndex = 0;
List _devices = [];
int _onlineCount = 0;
@@ -28,8 +27,7 @@ class DeviceManagementBloc
on(_onUpdateSelection);
}
- Future _onFetchDevices(
- FetchDevices event, Emitter emit) async {
+ Future _onFetchDevices(FetchDevices event, Emitter emit) async {
emit(DeviceManagementLoading());
try {
final devices = await DevicesManagementApi().fetchDevices();
@@ -51,8 +49,7 @@ class DeviceManagementBloc
}
}
- void _onFilterDevices(
- FilterDevices event, Emitter emit) async {
+ void _onFilterDevices(FilterDevices event, Emitter emit) async {
if (_devices.isNotEmpty) {
_filteredDevices = List.from(_devices.where((device) {
switch (event.filter) {
@@ -83,8 +80,7 @@ class DeviceManagementBloc
}
}
- Future _onResetFilters(
- ResetFilters event, Emitter emit) async {
+ Future _onResetFilters(ResetFilters event, Emitter emit) async {
productName = '';
_selectedDevices.clear();
_filteredDevices = List.from(_devices);
@@ -100,8 +96,7 @@ class DeviceManagementBloc
));
}
- void _onResetSelectedDevices(
- ResetSelectedDevices event, Emitter emit) {
+ void _onResetSelectedDevices(ResetSelectedDevices event, Emitter emit) {
_selectedDevices.clear();
if (state is DeviceManagementLoaded) {
@@ -127,14 +122,12 @@ class DeviceManagementBloc
}
}
- void _onSelectedFilterChanged(
- SelectedFilterChanged event, Emitter emit) {
+ void _onSelectedFilterChanged(SelectedFilterChanged event, Emitter emit) {
_selectedIndex = event.selectedIndex;
add(FilterDevices(_getFilterFromIndex(_selectedIndex)));
}
- void _onSelectDevice(
- SelectDevice event, Emitter emit) {
+ void _onSelectDevice(SelectDevice event, Emitter emit) {
final selectedUuid = event.selectedDevice.uuid;
if (_selectedDevices.any((device) => device.uuid == selectedUuid)) {
@@ -145,8 +138,7 @@ class DeviceManagementBloc
List clonedSelectedDevices = List.from(_selectedDevices);
- bool isControlButtonEnabled =
- _checkIfControlButtonEnabled(clonedSelectedDevices);
+ bool isControlButtonEnabled = _checkIfControlButtonEnabled(clonedSelectedDevices);
if (state is DeviceManagementLoaded) {
emit(DeviceManagementLoaded(
@@ -155,8 +147,7 @@ class DeviceManagementBloc
onlineCount: _onlineCount,
offlineCount: _offlineCount,
lowBatteryCount: _lowBatteryCount,
- selectedDevice:
- clonedSelectedDevices.isNotEmpty ? clonedSelectedDevices : null,
+ selectedDevice: clonedSelectedDevices.isNotEmpty ? clonedSelectedDevices : null,
isControlButtonEnabled: isControlButtonEnabled,
));
} else if (state is DeviceManagementFiltered) {
@@ -166,15 +157,13 @@ class DeviceManagementBloc
onlineCount: _onlineCount,
offlineCount: _offlineCount,
lowBatteryCount: _lowBatteryCount,
- selectedDevice:
- clonedSelectedDevices.isNotEmpty ? clonedSelectedDevices : null,
+ selectedDevice: clonedSelectedDevices.isNotEmpty ? clonedSelectedDevices : null,
isControlButtonEnabled: isControlButtonEnabled,
));
}
}
- void _onUpdateSelection(
- UpdateSelection event, Emitter emit) {
+ void _onUpdateSelection(UpdateSelection event, Emitter emit) {
List selectedDevices = [];
List devicesToSelectFrom = [];
@@ -217,8 +206,7 @@ class DeviceManagementBloc
bool _checkIfControlButtonEnabled(List selectedDevices) {
if (selectedDevices.length > 1) {
- final productTypes =
- selectedDevices.map((device) => device.productType).toSet();
+ final productTypes = selectedDevices.map((device) => device.productType).toSet();
return productTypes.length == 1;
} else if (selectedDevices.length == 1) {
return true;
@@ -229,10 +217,7 @@ class DeviceManagementBloc
void _calculateDeviceCounts() {
_onlineCount = _devices.where((device) => device.online == true).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) {
@@ -248,8 +233,7 @@ class DeviceManagementBloc
}
}
- void _onSearchDevices(
- SearchDevices event, Emitter emit) {
+ void _onSearchDevices(SearchDevices event, Emitter emit) {
if ((event.community == null || event.community!.isEmpty) &&
(event.unitName == null || event.unitName!.isEmpty) &&
(event.productName == null || event.productName!.isEmpty)) {
@@ -263,38 +247,21 @@ class DeviceManagementBloc
List devicesToSearch = _filteredDevices;
if (devicesToSearch.isNotEmpty) {
- _selectedDevices.clear();
- _selectedIndex = _selectedIndex;
-
final filteredDevices = devicesToSearch.where((device) {
final matchesCommunity = event.community == null ||
event.community!.isEmpty ||
- (device.room?.name
- ?.toLowerCase()
- .contains(event.community!.toLowerCase()) ??
- false);
+ (device.room?.name?.toLowerCase().contains(event.community!.toLowerCase()) ?? false);
final matchesUnit = event.unitName == null ||
event.unitName!.isEmpty ||
- (device.unit?.name
- ?.toLowerCase()
- .contains(event.unitName!.toLowerCase()) ??
- false);
+ (device.unit?.name?.toLowerCase().contains(event.unitName!.toLowerCase()) ?? false);
final matchesProductName = event.productName == null ||
event.productName!.isEmpty ||
- (device.name
- ?.toLowerCase()
- .contains(event.productName!.toLowerCase()) ??
- false);
+ (device.name?.toLowerCase().contains(event.productName!.toLowerCase()) ?? false);
final matchesDeviceName = event.productName == null ||
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();
emit(DeviceManagementFiltered(
diff --git a/lib/pages/device_managment/all_devices/widgets/device_managment_body.dart b/lib/pages/device_managment/all_devices/widgets/device_managment_body.dart
index 21ed882c..2787c7b9 100644
--- a/lib/pages/device_managment/all_devices/widgets/device_managment_body.dart
+++ b/lib/pages/device_managment/all_devices/widgets/device_managment_body.dart
@@ -1,14 +1,14 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
-import 'package:syncrow_web/pages/device_managment/shared/device_batch_control_dialog.dart';
-import 'package:syncrow_web/utils/extension/build_context_x.dart';
import 'package:syncrow_web/pages/common/buttons/default_button.dart';
import 'package:syncrow_web/pages/common/custom_table.dart';
import 'package:syncrow_web/pages/common/filter/filter_widget.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/bloc/device_managment_bloc.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart';
-import 'package:syncrow_web/pages/device_managment/shared/device_control_dialog.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/widgets/device_search_filters.dart';
+import 'package:syncrow_web/pages/device_managment/shared/device_batch_control_dialog.dart';
+import 'package:syncrow_web/pages/device_managment/shared/device_control_dialog.dart';
+import 'package:syncrow_web/utils/extension/build_context_x.dart';
import 'package:syncrow_web/utils/format_date_time.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
import 'package:syncrow_web/utils/style.dart';
@@ -37,8 +37,7 @@ class DeviceManagementBody extends StatelessWidget with HelperResponsiveLayout {
offlineCount = state.offlineCount;
lowBatteryCount = state.lowBatteryCount;
isControlButtonEnabled = state.isControlButtonEnabled;
- selectedDevices =
- state.selectedDevice ?? context.read().selectedDevices;
+ selectedDevices = state.selectedDevice ?? [];
} else if (state is DeviceManagementFiltered) {
devicesToShow = state.filteredDevices;
selectedIndex = state.selectedIndex;
@@ -46,14 +45,12 @@ class DeviceManagementBody extends StatelessWidget with HelperResponsiveLayout {
offlineCount = state.offlineCount;
lowBatteryCount = state.lowBatteryCount;
isControlButtonEnabled = state.isControlButtonEnabled;
- selectedDevices =
- state.selectedDevice ?? context.read().selectedDevices;
+ selectedDevices = state.selectedDevice ?? [];
} else if (state is DeviceManagementInitial) {
devicesToShow = [];
selectedIndex = 0;
isControlButtonEnabled = false;
}
-
final tabs = [
'All',
'Online ($onlineCount)',
@@ -66,8 +63,7 @@ class DeviceManagementBody extends StatelessWidget with HelperResponsiveLayout {
return Column(
children: [
Container(
- padding:
- isLargeScreenSize(context) ? const EdgeInsets.all(30) : const EdgeInsets.all(15),
+ padding: isLargeScreenSize(context) ? const EdgeInsets.all(30) : const EdgeInsets.all(15),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -98,8 +94,7 @@ class DeviceManagementBody extends StatelessWidget with HelperResponsiveLayout {
),
);
} else if (selectedDevices.length > 1) {
- final productTypes =
- selectedDevices.map((device) => device.productType).toSet();
+ final productTypes = selectedDevices.map((device) => device.productType).toSet();
if (productTypes.length == 1) {
showDialog(
context: context,
@@ -128,9 +123,7 @@ class DeviceManagementBody extends StatelessWidget with HelperResponsiveLayout {
),
Expanded(
child: Padding(
- padding: isLargeScreenSize(context)
- ? const EdgeInsets.all(30)
- : const EdgeInsets.all(15),
+ padding: isLargeScreenSize(context) ? const EdgeInsets.all(30) : const EdgeInsets.all(15),
child: DynamicTable(
withSelectAll: true,
cellDecoration: containerDecoration,
@@ -160,21 +153,16 @@ class DeviceManagementBody extends StatelessWidget with HelperResponsiveLayout {
device.unit?.name ?? '',
device.room?.name ?? '',
device.batteryLevel != null ? '${device.batteryLevel}%' : '-',
- formatDateTime(
- DateTime.fromMillisecondsSinceEpoch((device.createTime ?? 0) * 1000)),
+ formatDateTime(DateTime.fromMillisecondsSinceEpoch((device.createTime ?? 0) * 1000)),
device.online == true ? 'Online' : 'Offline',
- formatDateTime(
- DateTime.fromMillisecondsSinceEpoch((device.updateTime ?? 0) * 1000)),
+ formatDateTime(DateTime.fromMillisecondsSinceEpoch((device.updateTime ?? 0) * 1000)),
];
}).toList(),
onSelectionChanged: (selectedRows) {
context.read().add(UpdateSelection(selectedRows));
},
- initialSelectedIds: context
- .read()
- .selectedDevices
- .map((device) => device.uuid!)
- .toList(),
+ initialSelectedIds:
+ context.read().selectedDevices.map((device) => device.uuid!).toList(),
isEmpty: devicesToShow.isEmpty,
),
),
diff --git a/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart b/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart
index a2382ba6..22ac90d7 100644
--- a/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart
+++ b/lib/pages/device_managment/ceiling_sensor/bloc/bloc.dart
@@ -1,4 +1,5 @@
import 'dart:async';
+
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/ceiling_sensor/bloc/event.dart';
@@ -23,12 +24,10 @@ class CeilingSensorBloc extends Bloc {
on(_onFactoryReset);
}
- void _fetchCeilingSensorStatus(
- CeilingInitialEvent event, Emitter emit) async {
+ void _fetchCeilingSensorStatus(CeilingInitialEvent event, Emitter emit) async {
emit(CeilingLoadingInitialState());
try {
- var response =
- await DevicesManagementApi().getDeviceStatus(event.deviceId);
+ var response = await DevicesManagementApi().getDeviceStatus(event.deviceId);
deviceStatus = CeilingSensorModel.fromJson(response.status);
emit(CeilingUpdateState(ceilingSensorModel: deviceStatus));
// _listenToChanges();
@@ -57,8 +56,7 @@ class CeilingSensorBloc extends Bloc {
// } catch (_) {}
// }
- void _changeValue(
- CeilingChangeValueEvent event, Emitter emit) async {
+ void _changeValue(CeilingChangeValueEvent event, Emitter emit) async {
emit(CeilingLoadingNewSate(ceilingSensorModel: deviceStatus));
if (event.code == 'sensitivity') {
deviceStatus.sensitivity = event.value;
@@ -79,8 +77,7 @@ class CeilingSensorBloc extends Bloc {
);
}
- Future _onBatchControl(
- CeilingBatchControlEvent event, Emitter emit) async {
+ Future _onBatchControl(CeilingBatchControlEvent event, Emitter emit) async {
emit(CeilingLoadingNewSate(ceilingSensorModel: deviceStatus));
if (event.code == 'sensitivity') {
deviceStatus.sensitivity = event.value;
@@ -123,11 +120,9 @@ class CeilingSensorBloc extends Bloc {
try {
late bool response;
if (isBatch) {
- response = await DevicesManagementApi()
- .deviceBatchControl(deviceId, code, value);
+ response = await DevicesManagementApi().deviceBatchControl(deviceId, code, value);
} else {
- response = await DevicesManagementApi()
- .deviceControl(deviceId, Status(code: code, value: value));
+ response = await DevicesManagementApi().deviceControl(deviceId, Status(code: code, value: value));
}
if (!response) {
@@ -145,16 +140,17 @@ class CeilingSensorBloc extends Bloc {
});
}
- FutureOr _getDeviceReports(GetCeilingDeviceReportsEvent event,
- Emitter emit) async {
+ FutureOr _getDeviceReports(GetCeilingDeviceReportsEvent event, Emitter emit) async {
if (event.code.isEmpty) {
emit(ShowCeilingDescriptionState(description: reportString));
return;
} else {
emit(CeilingReportsLoadingState());
+ final from = DateTime.now().subtract(const Duration(days: 30)).millisecondsSinceEpoch;
+ final to = DateTime.now().millisecondsSinceEpoch;
try {
- await DevicesManagementApi.getDeviceReports(deviceId, event.code)
+ await DevicesManagementApi.getDeviceReportsByDate(deviceId, event.code, from.toString(), to.toString())
.then((value) {
emit(CeilingReportsState(deviceReport: value));
});
@@ -165,23 +161,19 @@ class CeilingSensorBloc extends Bloc {
}
}
- void _showDescription(
- ShowCeilingDescriptionEvent event, Emitter emit) {
+ void _showDescription(ShowCeilingDescriptionEvent event, Emitter emit) {
emit(ShowCeilingDescriptionState(description: event.description));
}
- void _backToGridView(
- BackToCeilingGridViewEvent event, Emitter emit) {
+ void _backToGridView(BackToCeilingGridViewEvent event, Emitter emit) {
emit(CeilingUpdateState(ceilingSensorModel: deviceStatus));
}
FutureOr _fetchCeilingSensorBatchControl(
- CeilingFetchDeviceStatusEvent event,
- Emitter emit) async {
+ CeilingFetchDeviceStatusEvent event, Emitter emit) async {
emit(CeilingLoadingInitialState());
try {
- var response =
- await DevicesManagementApi().getBatchStatus(event.devicesIds);
+ var response = await DevicesManagementApi().getBatchStatus(event.devicesIds);
deviceStatus = CeilingSensorModel.fromJson(response.status);
emit(CeilingUpdateState(ceilingSensorModel: deviceStatus));
} catch (e) {
@@ -190,8 +182,7 @@ class CeilingSensorBloc extends Bloc {
}
}
- FutureOr _onFactoryReset(
- CeilingFactoryResetEvent event, Emitter emit) async {
+ FutureOr _onFactoryReset(CeilingFactoryResetEvent event, Emitter emit) async {
emit(CeilingLoadingNewSate(ceilingSensorModel: deviceStatus));
try {
final response = await DevicesManagementApi().factoryReset(
diff --git a/lib/pages/device_managment/garage_door/widgets/schedule__garage_table.dart b/lib/pages/device_managment/garage_door/widgets/schedule__garage_table.dart
index 48ebbcad..07cd9c7a 100644
--- a/lib/pages/device_managment/garage_door/widgets/schedule__garage_table.dart
+++ b/lib/pages/device_managment/garage_door/widgets/schedule__garage_table.dart
@@ -26,8 +26,7 @@ class ScheduleGarageTableWidget extends StatelessWidget {
Table(
border: TableBorder.all(
color: ColorsManager.graysColor,
- borderRadius: const BorderRadius.only(
- topLeft: Radius.circular(20), topRight: Radius.circular(20)),
+ borderRadius: const BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20)),
),
children: [
TableRow(
@@ -51,21 +50,17 @@ class ScheduleGarageTableWidget extends StatelessWidget {
BlocBuilder(
builder: (context, state) {
if (state is ScheduleGarageLoadingState) {
- return const SizedBox(
- height: 200,
- child: Center(child: CircularProgressIndicator()));
+ return const SizedBox(height: 200, child: Center(child: CircularProgressIndicator()));
}
- if (state is GarageDoorLoadedState &&
- state.status.schedules == null) {
+ if (state is GarageDoorLoadedState && state.status.schedules?.isEmpty == true) {
return _buildEmptyState(context);
} else if (state is GarageDoorLoadedState) {
return Container(
height: 200,
decoration: BoxDecoration(
border: Border.all(color: ColorsManager.graysColor),
- borderRadius: const BorderRadius.only(
- bottomLeft: Radius.circular(20),
- bottomRight: Radius.circular(20)),
+ borderRadius:
+ const BorderRadius.only(bottomLeft: Radius.circular(20), bottomRight: Radius.circular(20)),
),
child: _buildTableBody(state, context));
}
@@ -83,8 +78,7 @@ class ScheduleGarageTableWidget extends StatelessWidget {
height: 200,
decoration: BoxDecoration(
border: Border.all(color: ColorsManager.graysColor),
- borderRadius: const BorderRadius.only(
- bottomLeft: Radius.circular(20), bottomRight: Radius.circular(20)),
+ borderRadius: const BorderRadius.only(bottomLeft: Radius.circular(20), bottomRight: Radius.circular(20)),
),
child: Center(
child: Column(
@@ -118,8 +112,7 @@ class ScheduleGarageTableWidget extends StatelessWidget {
children: [
if (state.status.schedules != null)
for (int i = 0; i < state.status.schedules!.length; i++)
- _buildScheduleRow(
- state.status.schedules![i], i, context, state),
+ _buildScheduleRow(state.status.schedules![i], i, context, state),
],
),
),
@@ -141,8 +134,7 @@ class ScheduleGarageTableWidget extends StatelessWidget {
);
}
- TableRow _buildScheduleRow(ScheduleModel schedule, int index,
- BuildContext context, GarageDoorLoadedState state) {
+ TableRow _buildScheduleRow(ScheduleModel schedule, int index, BuildContext context, GarageDoorLoadedState state) {
return TableRow(
children: [
Center(
@@ -160,8 +152,7 @@ class ScheduleGarageTableWidget extends StatelessWidget {
width: 24,
height: 24,
child: schedule.enable
- ? const Icon(Icons.radio_button_checked,
- color: ColorsManager.blueColor)
+ ? const Icon(Icons.radio_button_checked, color: ColorsManager.blueColor)
: const Icon(
Icons.radio_button_unchecked,
color: ColorsManager.grayColor,
@@ -169,9 +160,7 @@ class ScheduleGarageTableWidget extends StatelessWidget {
),
),
),
- Center(
- child: Text(_getSelectedDays(
- ScheduleModel.parseSelectedDays(schedule.days)))),
+ Center(child: Text(_getSelectedDays(ScheduleModel.parseSelectedDays(schedule.days)))),
Center(child: Text(formatIsoStringToTime(schedule.time, context))),
Center(child: Text(schedule.function.value ? 'On' : 'Off')),
Center(
@@ -181,24 +170,18 @@ class ScheduleGarageTableWidget extends StatelessWidget {
TextButton(
style: TextButton.styleFrom(padding: EdgeInsets.zero),
onPressed: () {
- GarageDoorDialogHelper.showAddGarageDoorScheduleDialog(
- context,
- schedule: schedule,
- index: index,
- isEdit: true);
+ GarageDoorDialogHelper.showAddGarageDoorScheduleDialog(context,
+ schedule: schedule, index: index, isEdit: true);
},
child: Text(
'Edit',
- style: context.textTheme.bodySmall!
- .copyWith(color: ColorsManager.blueColor),
+ style: context.textTheme.bodySmall!.copyWith(color: ColorsManager.blueColor),
),
),
TextButton(
style: TextButton.styleFrom(padding: EdgeInsets.zero),
onPressed: () {
- context
- .read()
- .add(DeleteGarageDoorScheduleEvent(
+ context.read().add(DeleteGarageDoorScheduleEvent(
index: index,
scheduleId: schedule.scheduleId,
deviceId: state.status.uuid,
@@ -206,8 +189,7 @@ class ScheduleGarageTableWidget extends StatelessWidget {
},
child: Text(
'Delete',
- style: context.textTheme.bodySmall!
- .copyWith(color: ColorsManager.blueColor),
+ style: context.textTheme.bodySmall!.copyWith(color: ColorsManager.blueColor),
),
),
],
diff --git a/lib/pages/device_managment/gateway/bloc/gate_way_bloc.dart b/lib/pages/device_managment/gateway/bloc/gate_way_bloc.dart
index f4c16ba0..e14672ae 100644
--- a/lib/pages/device_managment/gateway/bloc/gate_way_bloc.dart
+++ b/lib/pages/device_managment/gateway/bloc/gate_way_bloc.dart
@@ -16,12 +16,10 @@ class GateWayBloc extends Bloc {
on(_onFactoryReset);
}
- FutureOr _getGatWayById(
- GatWayById event, Emitter emit) async {
+ FutureOr _getGatWayById(GatWayById event, Emitter emit) async {
emit(GatewayLoadingState());
try {
- List devicesList =
- await DevicesManagementApi.getDevicesByGatewayId(event.getWayId);
+ List devicesList = await DevicesManagementApi.getDevicesByGatewayId(event.getWayId);
emit(UpdateGatewayState(list: devicesList));
} catch (e) {
@@ -30,8 +28,7 @@ class GateWayBloc extends Bloc {
}
}
- FutureOr _onFactoryReset(
- GateWayFactoryReset event, Emitter emit) async {
+ FutureOr _onFactoryReset(GateWayFactoryReset event, Emitter emit) async {
emit(GatewayLoadingState());
try {
final response = await DevicesManagementApi().factoryReset(
diff --git a/lib/pages/device_managment/gateway/view/gateway_view.dart b/lib/pages/device_managment/gateway/view/gateway_view.dart
index ce9b06da..2bfc6822 100644
--- a/lib/pages/device_managment/gateway/view/gateway_view.dart
+++ b/lib/pages/device_managment/gateway/view/gateway_view.dart
@@ -74,7 +74,7 @@ class _DeviceItem extends StatelessWidget {
padding: const EdgeInsets.all(8),
color: ColorsManager.whiteColors,
child: SvgPicture.asset(
- device.icon,
+ device.icon ?? 'assets/icons/gateway.svg',
width: 35,
height: 35,
fit: BoxFit.contain,
diff --git a/lib/pages/device_managment/shared/device_controls_container.dart b/lib/pages/device_managment/shared/device_controls_container.dart
index 158b43cf..4f1dea59 100644
--- a/lib/pages/device_managment/shared/device_controls_container.dart
+++ b/lib/pages/device_managment/shared/device_controls_container.dart
@@ -2,15 +2,17 @@ import 'package:flutter/material.dart';
import 'package:syncrow_web/utils/color_manager.dart';
class DeviceControlsContainer extends StatelessWidget {
- const DeviceControlsContainer({required this.child, super.key});
+ const DeviceControlsContainer({required this.child, this.padding, super.key});
final Widget child;
+ final double? padding;
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
- color: ColorsManager.grayColor.withOpacity(0.2),
+ color: ColorsManager.greyColor.withOpacity(0.2),
+
// boxShadow: [
// BoxShadow(
// color: ColorsManager.blackColor.withOpacity(0.05),
@@ -19,7 +21,7 @@ class DeviceControlsContainer extends StatelessWidget {
// spreadRadius: 0)
// ],
),
- padding: const EdgeInsets.all(12),
+ padding: EdgeInsets.all(padding ?? 12),
child: child,
);
}
diff --git a/lib/pages/device_managment/shared/toggle_widget.dart b/lib/pages/device_managment/shared/toggle_widget.dart
index 942c1b32..ad0ba8ad 100644
--- a/lib/pages/device_managment/shared/toggle_widget.dart
+++ b/lib/pages/device_managment/shared/toggle_widget.dart
@@ -1,5 +1,6 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter_svg/flutter_svg.dart';
+import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';
@@ -30,13 +31,7 @@ class ToggleWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return Container(
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(20),
- color: ColorsManager.greyColor.withOpacity(0.2),
- border: Border.all(color: ColorsManager.boxDivider),
- ),
- padding: const EdgeInsets.all(16),
+ return DeviceControlsContainer(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
diff --git a/lib/pages/visitor_password/model/device_model.dart b/lib/pages/visitor_password/model/device_model.dart
index 6d1c714d..c357da52 100644
--- a/lib/pages/visitor_password/model/device_model.dart
+++ b/lib/pages/visitor_password/model/device_model.dart
@@ -1,6 +1,6 @@
+import 'package:syncrow_web/utils/constants/app_enum.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/enum/device_types.dart';
-import 'package:syncrow_web/utils/constants/app_enum.dart';
class DeviceModel {
dynamic productUuid;
@@ -51,7 +51,6 @@ class DeviceModel {
factory DeviceModel.fromJson(Map json) {
String tempIcon = '';
DeviceType type = devicesTypesMap[json['productType']] ?? DeviceType.Other;
-
if (type == DeviceType.LightBulb) {
tempIcon = Assets.lightBulb;
} else if (type == DeviceType.CeilingSensor || type == DeviceType.WallSensor) {
@@ -66,9 +65,16 @@ class DeviceModel {
tempIcon = Assets.gangSwitch;
} else if (type == DeviceType.Gateway) {
tempIcon = Assets.gateway;
+ } else if (type == DeviceType.OneGang) {
+ tempIcon = Assets.oneGang;
+ } else if (type == DeviceType.TwoGang) {
+ tempIcon = Assets.twoGang;
+ } else if (type == DeviceType.WH) {
+ tempIcon = Assets.waterHeater;
} else {
- tempIcon = Assets.logo;
+ tempIcon = Assets.blackLogo;
}
+
return DeviceModel(
productUuid: json['productUuid'],
productType: json['productType'],
diff --git a/lib/services/devices_mang_api.dart b/lib/services/devices_mang_api.dart
index b22eedbb..dc0af9a8 100644
--- a/lib/services/devices_mang_api.dart
+++ b/lib/services/devices_mang_api.dart
@@ -68,8 +68,7 @@ class DevicesManagementApi {
}
}
- Future deviceBatchControl(
- List uuids, String code, dynamic value) async {
+ Future deviceBatchControl(List uuids, String code, dynamic value) async {
try {
final body = {
'devicesUuid': uuids,
@@ -93,8 +92,7 @@ class DevicesManagementApi {
}
}
- static Future> getDevicesByGatewayId(
- String gatewayId) async {
+ static Future> getDevicesByGatewayId(String gatewayId) async {
final response = await HTTPService().get(
path: ApiEndpoints.gatewayApi.replaceAll('{gatewayUuid}', gatewayId),
showServerMessage: false,
@@ -128,9 +126,7 @@ class DevicesManagementApi {
String code,
) async {
final response = await HTTPService().get(
- path: ApiEndpoints.getDeviceLogs
- .replaceAll('{uuid}', uuid)
- .replaceAll('{code}', code),
+ path: ApiEndpoints.getDeviceLogs.replaceAll('{uuid}', uuid).replaceAll('{code}', code),
showServerMessage: false,
expectedResponseModel: (json) {
return DeviceReport.fromJson(json);
@@ -139,8 +135,7 @@ class DevicesManagementApi {
return response;
}
- static Future getDeviceReportsByDate(String uuid, String code,
- [String? from, String? to]) async {
+ static Future getDeviceReportsByDate(String uuid, String code, [String? from, String? to]) async {
final response = await HTTPService().get(
path: ApiEndpoints.getDeviceLogsByDate
.replaceAll('{uuid}', uuid)
@@ -179,8 +174,7 @@ class DevicesManagementApi {
}
}
- Future addScheduleRecord(
- ScheduleEntry sendSchedule, String uuid) async {
+ Future addScheduleRecord(ScheduleEntry sendSchedule, String uuid) async {
try {
final response = await HTTPService().post(
path: ApiEndpoints.scheduleByDeviceId.replaceAll('{deviceUuid}', uuid),
@@ -197,13 +191,10 @@ class DevicesManagementApi {
}
}
- Future> getDeviceSchedules(
- String uuid, String category) async {
+ Future> getDeviceSchedules(String uuid, String category) async {
try {
final response = await HTTPService().get(
- path: ApiEndpoints.getScheduleByDeviceId
- .replaceAll('{deviceUuid}', uuid)
- .replaceAll('{category}', category),
+ path: ApiEndpoints.getScheduleByDeviceId.replaceAll('{deviceUuid}', uuid).replaceAll('{category}', category),
showServerMessage: true,
expectedResponseModel: (json) {
List schedules = [];
@@ -220,10 +211,7 @@ class DevicesManagementApi {
}
}
- Future updateScheduleRecord(
- {required bool enable,
- required String uuid,
- required String scheduleId}) async {
+ Future updateScheduleRecord({required bool enable, required String uuid, required String scheduleId}) async {
try {
final response = await HTTPService().put(
path: ApiEndpoints.updateScheduleByDeviceId
diff --git a/lib/utils/constants/assets.dart b/lib/utils/constants/assets.dart
index 05ef096e..4ac64bb6 100644
--- a/lib/utils/constants/assets.dart
+++ b/lib/utils/constants/assets.dart
@@ -13,12 +13,10 @@ class Assets {
static const String rightLine = "assets/images/right_line.png";
static const String google = "assets/images/google.svg";
static const String facebook = "assets/images/facebook.svg";
- static const String invisiblePassword =
- "assets/images/Password_invisible.svg";
+ static const String invisiblePassword = "assets/images/Password_invisible.svg";
static const String visiblePassword = "assets/images/password_visible.svg";
static const String accessIcon = "assets/images/access_icon.svg";
- static const String spaseManagementIcon =
- "assets/images/spase_management_icon.svg";
+ static const String spaseManagementIcon = "assets/images/spase_management_icon.svg";
static const String devicesIcon = "assets/images/devices_icon.svg";
static const String moveinIcon = "assets/images/movein_icon.svg";
static const String constructionIcon = "assets/images/construction_icon.svg";
@@ -31,15 +29,13 @@ class Assets {
static const String emptyTable = "assets/images/empty_table.svg";
// General assets
- static const String motionlessDetection =
- "assets/icons/motionless_detection.svg";
+ static const String motionlessDetection = "assets/icons/motionless_detection.svg";
static const String acHeating = "assets/icons/ac_heating.svg";
static const String acPowerOff = "assets/icons/ac_power_off.svg";
static const String acFanMiddle = "assets/icons/ac_fan_middle.svg";
static const String switchAlarmSound = "assets/icons/switch_alarm_sound.svg";
static const String resetOff = "assets/icons/reset_off.svg";
- static const String sensitivityOperationIcon =
- "assets/icons/sesitivity_operation_icon.svg";
+ static const String sensitivityOperationIcon = "assets/icons/sesitivity_operation_icon.svg";
static const String motionDetection = "assets/icons/motion_detection.svg";
static const String freezing = "assets/icons/freezing.svg";
static const String indicator = "assets/icons/indicator.svg";
@@ -60,56 +56,35 @@ class Assets {
static const String celsiusDegrees = "assets/icons/celsius_degrees.svg";
static const String masterState = "assets/icons/master_state.svg";
static const String acPower = "assets/icons/ac_power.svg";
- static const String farDetectionFunction =
- "assets/icons/far_detection_function.svg";
+ static const String farDetectionFunction = "assets/icons/far_detection_function.svg";
static const String nobodyTime = "assets/icons/nobody_time.svg";
// Automation functions
- static const String tempPasswordUnlock =
- "assets/icons/automation_functions/temp_password_unlock.svg";
- static const String doorlockNormalOpen =
- "assets/icons/automation_functions/doorlock_normal_open.svg";
- static const String doorbell =
- "assets/icons/automation_functions/doorbell.svg";
- static const String remoteUnlockViaApp =
- "assets/icons/automation_functions/remote_unlock_via_app.svg";
- static const String doubleLock =
- "assets/icons/automation_functions/double_lock.svg";
- static const String selfTestResult =
- "assets/icons/automation_functions/self_test_result.svg";
- static const String lockAlarm =
- "assets/icons/automation_functions/lock_alarm.svg";
- static const String presenceState =
- "assets/icons/automation_functions/presence_state.svg";
- static const String currentTemp =
- "assets/icons/automation_functions/current_temp.svg";
- static const String presence =
- "assets/icons/automation_functions/presence.svg";
- static const String residualElectricity =
- "assets/icons/automation_functions/residual_electricity.svg";
- static const String hijackAlarm =
- "assets/icons/automation_functions/hijack_alarm.svg";
- static const String passwordUnlock =
- "assets/icons/automation_functions/password_unlock.svg";
- static const String remoteUnlockRequest =
- "assets/icons/automation_functions/remote_unlock_req.svg";
- static const String cardUnlock =
- "assets/icons/automation_functions/card_unlock.svg";
+ static const String tempPasswordUnlock = "assets/icons/automation_functions/temp_password_unlock.svg";
+ static const String doorlockNormalOpen = "assets/icons/automation_functions/doorlock_normal_open.svg";
+ static const String doorbell = "assets/icons/automation_functions/doorbell.svg";
+ static const String remoteUnlockViaApp = "assets/icons/automation_functions/remote_unlock_via_app.svg";
+ static const String doubleLock = "assets/icons/automation_functions/double_lock.svg";
+ static const String selfTestResult = "assets/icons/automation_functions/self_test_result.svg";
+ static const String lockAlarm = "assets/icons/automation_functions/lock_alarm.svg";
+ static const String presenceState = "assets/icons/automation_functions/presence_state.svg";
+ static const String currentTemp = "assets/icons/automation_functions/current_temp.svg";
+ static const String presence = "assets/icons/automation_functions/presence.svg";
+ static const String residualElectricity = "assets/icons/automation_functions/residual_electricity.svg";
+ static const String hijackAlarm = "assets/icons/automation_functions/hijack_alarm.svg";
+ static const String passwordUnlock = "assets/icons/automation_functions/password_unlock.svg";
+ static const String remoteUnlockRequest = "assets/icons/automation_functions/remote_unlock_req.svg";
+ static const String cardUnlock = "assets/icons/automation_functions/card_unlock.svg";
static const String motion = "assets/icons/automation_functions/motion.svg";
- static const String fingerprintUnlock =
- "assets/icons/automation_functions/fingerprint_unlock.svg";
+ static const String fingerprintUnlock = "assets/icons/automation_functions/fingerprint_unlock.svg";
// Presence Sensor Assets
static const String sensorMotionIcon = "assets/icons/sensor_motion_ic.svg";
- static const String sensorPresenceIcon =
- "assets/icons/sensor_presence_ic.svg";
+ static const String sensorPresenceIcon = "assets/icons/sensor_presence_ic.svg";
static const String sensorVacantIcon = "assets/icons/sensor_vacant_ic.svg";
- static const String illuminanceRecordIcon =
- "assets/icons/illuminance_record_ic.svg";
- static const String presenceRecordIcon =
- "assets/icons/presence_record_ic.svg";
- static const String helpDescriptionIcon =
- "assets/icons/help_description_ic.svg";
+ static const String illuminanceRecordIcon = "assets/icons/illuminance_record_ic.svg";
+ static const String presenceRecordIcon = "assets/icons/presence_record_ic.svg";
+ static const String helpDescriptionIcon = "assets/icons/help_description_ic.svg";
static const String lightPulp = "assets/icons/light_pulb.svg";
static const String acDevice = "assets/icons/ac_device.svg";
@@ -183,9 +158,14 @@ class Assets {
//assets/icons/water_leak_normal.svg
static const String waterLeakNormal = 'assets/icons/water_leak_normal.svg';
//assets/icons/water_leak_detected.svg
- static const String waterLeakDetected =
- 'assets/icons/water_leak_detected.svg';
+ static const String waterLeakDetected = 'assets/icons/water_leak_detected.svg';
//assets/icons/automation_records.svg
static const String automationRecords = 'assets/icons/automation_records.svg';
+
+ //assets/icons/1gang.svg
+ static const String oneGang = 'assets/icons/1gang.svg';
+
+ //assets/icons/2gang.svg
+ static const String twoGang = 'assets/icons/2gang.svg';
}
diff --git a/lib/utils/enum/device_types.dart b/lib/utils/enum/device_types.dart
index 94821ef6..9ddead07 100644
--- a/lib/utils/enum/device_types.dart
+++ b/lib/utils/enum/device_types.dart
@@ -4,10 +4,13 @@ enum DeviceType {
DoorLock,
Curtain,
Blind,
+ OneGang,
+ TwoGang,
ThreeGang,
Gateway,
CeilingSensor,
WallSensor,
+ WH,
Other,
}
@@ -18,4 +21,8 @@ Map devicesTypesMap = {
"DL": DeviceType.DoorLock,
"WPS": DeviceType.WallSensor,
"3G": DeviceType.ThreeGang,
+ "2G": DeviceType.TwoGang,
+ "1G": DeviceType.OneGang,
+ "CUR": DeviceType.Curtain,
+ "WH": DeviceType.WH,
};