Bug fixes

This commit is contained in:
Abdullah Alassaf
2024-11-12 00:15:26 +03:00
parent faf294bb10
commit b547a126ed
23 changed files with 342 additions and 510 deletions
+20 -27
View File
@@ -25,12 +25,12 @@ part 'devices_state.dart';
class DevicesCubit extends Cubit<DevicesState> {
Future<void> _initializeDevices(SpaceModel selectedSpace) async {
// Fetch devices for each room in the selected space
for (var room in selectedSpace.subspaces ?? []) {
for (var room in selectedSpace.subspaces) {
await fetchDevicesByRoomId(selectedSpace, room.id!);
}
// Fetch groups based on the selected space ID
await fetchGroups(selectedSpace.id ?? '');
await fetchGroups(selectedSpace.id);
}
DevicesCubit._() : super(DevicesInitial()) {
@@ -111,9 +111,8 @@ class DevicesCubit extends Cubit<DevicesState> {
// Getter to retrieve all devices from HomeCubit
List<DeviceModel> get allDevices {
List<DeviceModel> devices = [];
if (HomeCubit.getInstance().selectedSpace != null &&
HomeCubit.getInstance().selectedSpace!.subspaces != null) {
for (var room in HomeCubit.getInstance().selectedSpace!.subspaces!) {
if (HomeCubit.getInstance().selectedSpace != null) {
for (var room in HomeCubit.getInstance().selectedSpace!.subspaces) {
if (room.devices != null) {
devices.addAll(room.devices!);
}
@@ -278,15 +277,15 @@ class DevicesCubit extends Cubit<DevicesState> {
if (response['success'] ?? false) {
emitSafe(DeviceControlSuccess(code: control.code));
//this delay is to give tuya server time to update the status
Future.delayed(const Duration(milliseconds: 400), () {
fetchDevicesStatues(
deviceId,
HomeCubit.getInstance()
.selectedSpace!
.subspaces!
.indexOf(HomeCubit.getInstance().selectedRoom!),
code: control.code);
});
// Future.delayed(const Duration(milliseconds: 400), () {
fetchDevicesStatues(
deviceId,
HomeCubit.getInstance()
.selectedSpace!
.subspaces
.indexOf(HomeCubit.getInstance().selectedRoom!),
code: control.code);
// });
} else {
emitSafe(DeviceControlError('Failed to control the device'));
}
@@ -317,20 +316,17 @@ class DevicesCubit extends Cubit<DevicesState> {
emitSafe(GetDevicesLoading());
int roomIndex = HomeCubit.getInstance()
.selectedSpace!
.subspaces!
.subspaces
.indexWhere((element) => element.id == roomId);
try {
HomeCubit.getInstance().selectedSpace!.subspaces![roomIndex].devices =
HomeCubit.getInstance().selectedSpace!.subspaces[roomIndex].devices =
await DevicesAPI.getDevicesByRoomId(
communityUuid: unit!.community.uuid,
spaceUuid: unit.id,
roomId: roomId);
communityUuid: unit!.community.uuid, spaceUuid: unit.id, roomId: roomId);
} catch (e) {
emitSafe(GetDevicesError(e.toString()));
return;
}
final devices =
HomeCubit.getInstance().selectedSpace!.subspaces![roomIndex].devices;
final devices = HomeCubit.getInstance().selectedSpace!.subspaces[roomIndex].devices;
emitSafe(GetDevicesSuccess(devices));
//get status for each device
@@ -347,7 +343,7 @@ class DevicesCubit extends Cubit<DevicesState> {
emitSafe(GetDeviceStatusLoading(code: code));
int deviceIndex = HomeCubit.getInstance()
.selectedSpace!
.subspaces![roomIndex]
.subspaces[roomIndex]
.devices!
.indexWhere((element) => element.uuid == deviceUuid);
List<StatusModel> statuses = [];
@@ -360,11 +356,8 @@ class DevicesCubit extends Cubit<DevicesState> {
emitSafe(GetDeviceStatusError(e.toString()));
return;
}
HomeCubit.getInstance()
.selectedSpace!
.subspaces![roomIndex]
.devices![deviceIndex]
.status = statuses;
HomeCubit.getInstance().selectedSpace!.subspaces[roomIndex].devices![deviceIndex].status =
statuses;
emitSafe(GetDeviceStatusSuccess(code: code));
}
@@ -14,8 +14,7 @@ class PowerClampSwitch extends PowerClampEvent {
final bool switchD;
final String deviceId;
final String productId;
const PowerClampSwitch(
{required this.switchD, this.deviceId = '', this.productId = ''});
const PowerClampSwitch({required this.switchD, this.deviceId = '', this.productId = ''});
@override
List<Object> get props => [switchD, deviceId, productId];
@@ -26,8 +25,8 @@ class PowerClampUpdated extends PowerClampEvent {}
class FetchEnergyData extends PowerClampEvent {}
class SelectDateEvent extends PowerClampEvent {
BuildContext context;
SelectDateEvent({required this.context});
final BuildContext context;
const SelectDateEvent({required this.context});
}
class PowerClampInitial extends PowerClampEvent {
@@ -108,12 +107,9 @@ class StopTimer extends PowerClampEvent {}
class OnClose extends PowerClampEvent {}
class FilterRecordsByDateEvent extends PowerClampEvent {
final DateTime selectedDate;
final String viewType; // 'Day', 'Month', 'Year'
const FilterRecordsByDateEvent(
{required this.selectedDate, required this.viewType});
const FilterRecordsByDateEvent({required this.selectedDate, required this.viewType});
}
@@ -13,13 +13,14 @@ import 'package:syncrow_app/features/shared_widgets/text_widgets/body_large.dart
import 'package:syncrow_app/features/shared_widgets/text_widgets/title_medium.dart';
import 'package:syncrow_app/utils/context_extension.dart';
import 'package:syncrow_app/utils/resource_manager/strings_manager.dart';
class DevicesViewPage extends StatelessWidget {
const DevicesViewPage({super.key});
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => SceneBloc(), // Initialize your SceneBloc here
create: (context) => SceneBloc(), // Initialize your SceneBloc here
child: DevicesViewBody(),
);
}
@@ -42,75 +43,74 @@ class DevicesViewBody extends StatelessWidget {
return HomeCubit.getInstance().spaces?.isEmpty ?? true
? const CreateUnitWidget()
: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Row(
children: [
TitleMedium(
text: StringsManager.devices,
style: context.titleMedium.copyWith(
fontSize: 25,
),
),
],
),
SizedBox(
height: MediaQuery.of(context).size.height*0.1,
child: const SceneView(pageType: true,)
),
const SizedBox(
height: 20,
),
const RoomsSlider(),
const SizedBox(
height: 10,
),
Expanded(
child: PageView(
controller: HomeCubit.getInstance().devicesPageController,
onPageChanged: (index) {
HomeCubit.getInstance().devicesPageChanged(index);
},
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
WizardPage(
groupsList: DevicesCubit.getInstance().allCategories ?? [],
Row(
children: [
TitleMedium(
text: StringsManager.devices,
style: context.titleMedium.copyWith(
fontSize: 25,
),
),
],
),
if (HomeCubit.getInstance().selectedSpace != null)
if (HomeCubit.getInstance().selectedSpace!.subspaces != null)
...HomeCubit.getInstance().selectedSpace!.subspaces!.map((room) {
return RoomPage(
room: room,
);
},
)
SizedBox(
height: MediaQuery.of(context).size.height * 0.1,
child: const SceneView(
pageType: true,
)),
const SizedBox(
height: 20,
),
const RoomsSlider(),
const SizedBox(
height: 10,
),
Expanded(
child: PageView(
controller: HomeCubit.getInstance().devicesPageController,
onPageChanged: (index) {
HomeCubit.getInstance().devicesPageChanged(index);
},
children: [
WizardPage(
groupsList: DevicesCubit.getInstance().allCategories ?? [],
),
if (HomeCubit.getInstance().selectedSpace != null)
...HomeCubit.getInstance().selectedSpace!.subspaces.map(
(room) {
return RoomPage(
room: room,
);
},
)
],
),
),
HomeCubit.getInstance().selectedSpace != null
? Padding(
padding: const EdgeInsets.symmetric(
vertical: 7,
),
child: SmoothPageIndicator(
controller: HomeCubit.getInstance().devicesPageController,
count: HomeCubit.getInstance().selectedSpace!.subspaces.length + 1,
effect: const WormEffect(
paintStyle: PaintingStyle.stroke,
dotHeight: 8,
dotWidth: 8,
),
),
)
: const Center(
child: BodyLarge(text: 'No Home Found'),
),
],
),
),
HomeCubit.getInstance().selectedSpace != null
? Padding(
padding: const EdgeInsets.symmetric(
vertical: 7,
),
child: SmoothPageIndicator(
controller: HomeCubit.getInstance().devicesPageController,
count: HomeCubit.getInstance().selectedSpace!.subspaces!.length + 1,
effect: const WormEffect(
paintStyle: PaintingStyle.stroke,
dotHeight: 8,
dotWidth: 8,
),
),
)
: const Center(
child: BodyLarge(text: 'No Home Found'),
),
],
);
);
}
},
);
}
}
}
@@ -1,7 +1,6 @@
import 'package:flutter/material.dart';
import 'package:syncrow_app/features/devices/model/subspace_model.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:syncrow_app/features/devices/model/room_model.dart';
import 'package:syncrow_app/features/devices/view/widgets/room_page_switch.dart';
import 'package:syncrow_app/generated/assets.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
@@ -52,9 +51,7 @@ class _RoomPageState extends State<RoomPage> {
decoration: InputDecoration(
hintText: 'Search',
hintStyle: const TextStyle(
color: ColorsManager.textGray,
fontSize: 16,
fontWeight: FontWeight.w400),
color: ColorsManager.textGray, fontSize: 16, fontWeight: FontWeight.w400),
prefixIcon: Container(
padding: const EdgeInsets.all(5.0),
margin: const EdgeInsets.all(10.0),
@@ -39,29 +39,23 @@ class RoomsSlider extends StatelessWidget {
),
),
if (HomeCubit.getInstance().selectedSpace != null)
if (HomeCubit.getInstance().selectedSpace!.subspaces != null)
...HomeCubit.getInstance().selectedSpace!.subspaces!.map(
(room) => InkWell(
onTap: () {
HomeCubit.getInstance().roomSliderPageChanged(
HomeCubit.getInstance()
.selectedSpace!
.subspaces!
.indexOf(room));
},
child: TitleMedium(
text: room.name!,
style: context.titleMedium.copyWith(
fontSize: 25,
color:
HomeCubit.getInstance().selectedRoom == room
? ColorsManager.textPrimaryColor
: ColorsManager.textPrimaryColor
.withOpacity(.2),
),
...HomeCubit.getInstance().selectedSpace!.subspaces.map(
(room) => InkWell(
onTap: () {
HomeCubit.getInstance().roomSliderPageChanged(
HomeCubit.getInstance().selectedSpace!.subspaces.indexOf(room));
},
child: TitleMedium(
text: room.name!,
style: context.titleMedium.copyWith(
fontSize: 25,
color: HomeCubit.getInstance().selectedRoom == room
? ColorsManager.textPrimaryColor
: ColorsManager.textPrimaryColor.withOpacity(.2),
),
),
)
),
)
],
),
);
@@ -40,13 +40,10 @@ class SceneListview extends StatelessWidget {
sceneName: scene.name,
),
);
context
.read<SmartSceneSelectBloc>()
.add(const SmartSceneClearEvent());
context.read<SmartSceneSelectBloc>().add(const SmartSceneClearEvent());
BlocProvider.of<CreateSceneBloc>(context).add(
FetchSceneTasksEvent(
sceneId: scene.id, isAutomation: false));
BlocProvider.of<CreateSceneBloc>(context)
.add(FetchSceneTasksEvent(sceneId: scene.id, isAutomation: false));
/// the state to set the scene type must be after the fetch
BlocProvider.of<CreateSceneBloc>(context)
@@ -59,15 +56,13 @@ class SceneListview extends StatelessWidget {
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: scene.iconInBytes != null &&
scene.iconInBytes.isNotEmpty
child: scene.iconInBytes.isNotEmpty
? Image.memory(
scene.iconInBytes,
height: 32,
width: 32,
fit: BoxFit.fill,
errorBuilder: (context, error, stackTrace) =>
Image.asset(
errorBuilder: (context, error, stackTrace) => Image.asset(
Assets.assetsIconsLogo,
height: 32,
width: 32,