mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-10 15:17:31 +00:00
curtain batch control design
This commit is contained in:
@ -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/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/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/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/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_batch_control_view.dart';
|
||||||
import 'package:syncrow_web/pages/device_managment/door_lock/view/door_lock_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(
|
// return CeilingSensorControls(
|
||||||
// device: device.first,
|
// device: device.first,
|
||||||
// );
|
// );
|
||||||
// case 'CUR':
|
case 'CUR':
|
||||||
// return CurtainStatusControls(
|
return CurtainBatchStatusView(
|
||||||
// deviceId: device.first.uuid!,
|
devicesIds: devices
|
||||||
// );
|
.where((e) => (e.productType == 'CUR'))
|
||||||
|
.map((e) => e.uuid!)
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
// case 'AC':
|
// case 'AC':
|
||||||
// return AcDeviceControls(device: device.first);
|
// return AcDeviceControls(device: device.first);
|
||||||
default:
|
default:
|
||||||
|
@ -12,6 +12,7 @@ class CurtainBloc extends Bloc<CurtainEvent, CurtainState> {
|
|||||||
|
|
||||||
CurtainBloc({required this.deviceId}) : super(CurtainInitial()) {
|
CurtainBloc({required this.deviceId}) : super(CurtainInitial()) {
|
||||||
on<CurtainFetchDeviceStatus>(_onFetchDeviceStatus);
|
on<CurtainFetchDeviceStatus>(_onFetchDeviceStatus);
|
||||||
|
on<CurtainFetchBatchStatus>(_onFetchBatchStatus);
|
||||||
on<CurtainControl>(_onCurtainControl);
|
on<CurtainControl>(_onCurtainControl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,4 +89,19 @@ class CurtainBloc extends Bloc<CurtainEvent, CurtainState> {
|
|||||||
bool _checkStatus(String command) {
|
bool _checkStatus(String command) {
|
||||||
return command.toLowerCase() == 'open';
|
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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
|
|
||||||
|
|
||||||
sealed class CurtainEvent extends Equatable {
|
sealed class CurtainEvent extends Equatable {
|
||||||
const CurtainEvent();
|
const CurtainEvent();
|
||||||
|
|
||||||
@ -18,6 +16,15 @@ class CurtainFetchDeviceStatus extends CurtainEvent {
|
|||||||
List<Object> get props => [deviceId];
|
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 {
|
class CurtainControl extends CurtainEvent {
|
||||||
final String deviceId;
|
final String deviceId;
|
||||||
final String code;
|
final String code;
|
||||||
|
@ -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),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user