curtain batch control design

This commit is contained in:
ashrafzarkanisala
2024-09-12 11:21:51 +03:00
parent 28579e0778
commit 3171916faf
4 changed files with 101 additions and 6 deletions

View File

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:syncrow_web/pages/device_managment/ac/view/ac_device_control.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/view/ceiling_sensor_controls.dart';
import 'package:syncrow_web/pages/device_managment/curtain/view/curtain_batch_status_view.dart';
import 'package:syncrow_web/pages/device_managment/curtain/view/curtain_status_view.dart';
import 'package:syncrow_web/pages/device_managment/door_lock/view/door_lock_batch_control_view.dart';
import 'package:syncrow_web/pages/device_managment/door_lock/view/door_lock_control_view.dart';
@ -84,10 +85,13 @@ mixin RouteControlsBasedCode {
// return CeilingSensorControls(
// device: device.first,
// );
// case 'CUR':
// return CurtainStatusControls(
// deviceId: device.first.uuid!,
// );
case 'CUR':
return CurtainBatchStatusView(
devicesIds: devices
.where((e) => (e.productType == 'CUR'))
.map((e) => e.uuid!)
.toList(),
);
// case 'AC':
// return AcDeviceControls(device: device.first);
default:

View File

@ -12,6 +12,7 @@ class CurtainBloc extends Bloc<CurtainEvent, CurtainState> {
CurtainBloc({required this.deviceId}) : super(CurtainInitial()) {
on<CurtainFetchDeviceStatus>(_onFetchDeviceStatus);
on<CurtainFetchBatchStatus>(_onFetchBatchStatus);
on<CurtainControl>(_onCurtainControl);
}
@ -88,4 +89,19 @@ class CurtainBloc extends Bloc<CurtainEvent, CurtainState> {
bool _checkStatus(String command) {
return command.toLowerCase() == 'open';
}
FutureOr<void> _onFetchBatchStatus(
CurtainFetchBatchStatus event, Emitter<CurtainState> emit) async {
emit(CurtainStatusLoading());
try {
final status =
await DevicesManagementApi().getDeviceStatus(event.deviceId);
deviceStatus = _checkStatus(status.status[0].value);
emit(CurtainStatusLoaded(deviceStatus));
} catch (e) {
emit(CurtainError(e.toString()));
}
}
}

View File

@ -1,7 +1,5 @@
import 'package:equatable/equatable.dart';
sealed class CurtainEvent extends Equatable {
const CurtainEvent();
@ -18,6 +16,15 @@ class CurtainFetchDeviceStatus extends CurtainEvent {
List<Object> get props => [deviceId];
}
class CurtainFetchBatchStatus extends CurtainEvent {
final String deviceId;
const CurtainFetchBatchStatus(this.deviceId);
@override
List<Object> get props => [deviceId];
}
class CurtainControl extends CurtainEvent {
final String deviceId;
final String code;

View File

@ -0,0 +1,68 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/common/curtain_toggle.dart';
import 'package:syncrow_web/pages/device_managment/curtain/bloc/curtain_bloc.dart';
import 'package:syncrow_web/pages/device_managment/curtain/bloc/curtain_event.dart';
import 'package:syncrow_web/pages/device_managment/curtain/bloc/curtain_state.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/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
class CurtainBatchStatusView extends StatelessWidget
with HelperResponsiveLayout {
const CurtainBatchStatusView({super.key, required this.devicesIds});
final List<String> devicesIds;
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => CurtainBloc(deviceId: devicesIds.first)
..add(CurtainFetchDeviceStatus(devicesIds.first)),
child: BlocBuilder<CurtainBloc, CurtainState>(
builder: (context, state) {
if (state is CurtainStatusLoading) {
return const Center(child: CircularProgressIndicator());
} else if (state is CurtainStatusLoaded) {
return _buildStatusControls(context, state.status);
} else if (state is CurtainError || state is CurtainControlError) {
return const Center(child: Text('Error fetching status'));
} else {
return const Center(child: CircularProgressIndicator());
}
},
),
);
}
Widget _buildStatusControls(BuildContext context, bool status) {
final isExtraLarge = isExtraLargeScreenSize(context);
final isLarge = isLargeScreenSize(context);
final isMedium = isMediumScreenSize(context);
return GridView(
padding: const EdgeInsets.symmetric(horizontal: 50),
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: isLarge || isExtraLarge
? 3
: isMedium
? 2
: 1,
mainAxisExtent: 140,
crossAxisSpacing: 12,
mainAxisSpacing: 12,
),
children: [
CurtainToggle(
value: status,
code: 'control',
deviceId: devicesIds.first,
label: 'Curtains',
),
FirmwareUpdateWidget(deviceId: devicesIds.first, version: 5),
FactoryResetWidget(deviceId: devicesIds.first),
],
);
}
}