integrate report and table view two sensors, use mock data for reports

This commit is contained in:
ashrafzarkanisala
2024-08-27 03:11:51 +03:00
parent 40deaff8a0
commit 7d700f47dd
9 changed files with 398 additions and 209 deletions

View File

@ -4,10 +4,13 @@ import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_mo
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/bloc.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/event.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/bloc/state.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart';
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_display_data.dart';
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_static_widget.dart';
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_status.dart';
import 'package:syncrow_web/pages/device_managment/shared/sensors_widgets/presence_update_data.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/description_view.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/report_table.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
@ -29,99 +32,133 @@ class CeilingSensorControls extends StatelessWidget
if (state is CeilingLoadingInitialState) {
return const Center(child: CircularProgressIndicator());
} else if (state is CeilingUpdateState) {
return GridView(
padding: const EdgeInsets.symmetric(horizontal: 50),
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: isLarge
? 3
: isMedium
? 2
: 1,
mainAxisExtent: 133,
crossAxisSpacing: 12,
mainAxisSpacing: 12,
),
children: [
PresenceState(
value: state.ceilingSensorModel.presenceState,
),
PresenceDisplayValue(
value: state.ceilingSensorModel.sportsPara.toString(),
postfix: '',
description: 'Sports para',
),
PresenceDisplayValue(
value: state.ceilingSensorModel.presenceRange.toString(),
postfix: 'm',
description: 'Detection Range',
),
PresenceUpdateData(
value: state.ceilingSensorModel.sensitivity.toDouble(),
title: 'Sensitivity:',
minValue: 1,
maxValue: 5,
steps: 1,
action: (int value) {
context.read<CeilingSensorBloc>().add(
CeilingChangeValueEvent(
code: 'sensitivity',
value: value,
),
);
},
),
PresenceUpdateData(
value: state.ceilingSensorModel.maxDistance.toDouble(),
title: 'Maximum Distance:',
minValue: 0,
maxValue: 500,
steps: 50,
description: 'm',
action: (int value) => context.read<CeilingSensorBloc>().add(
CeilingChangeValueEvent(
code: 'moving_max_dis',
value: value,
),
),
),
PresenceUpdateData(
value:
(state.ceilingSensorModel.noBodyTime.toDouble() / 3600)
.roundToDouble(),
title: 'Nobody Time:',
minValue: 0,
maxValue: 300000,
steps: 5000,
description: 'hr',
action: (int value) => context
.read<CeilingSensorBloc>()
.add(CeilingChangeValueEvent(
code: 'none_body_time',
value: value,
))),
GestureDetector(
onTap: () {},
child: const PresenceStaticWidget(
icon: Assets.illuminanceRecordIcon,
description: 'Presence Record',
),
),
GestureDetector(
onTap: () {},
child: const PresenceStaticWidget(
icon: Assets.helpDescriptionIcon,
description: 'Help Description',
),
),
],
return _buildGridView(
context, state.ceilingSensorModel, isLarge, isMedium);
} else if (state is CeilingReportsState) {
return ReportsTable(
report: state.deviceReport,
onRowTap: (index) {
final entry = state.deviceReport.data![index];
context.read<CeilingSensorBloc>().add(
ShowCeilingDescriptionEvent(
description: entry['description']),
);
},
onClose: () {
context.read<CeilingSensorBloc>().add(BackToCeilingGridViewEvent());
},
);
} else {
return const Center(child: Text('Error fetching status'));
} else if (state is ShowCeilingDescriptionState) {
return DescriptionView(
description: state.description,
onClose: () {
context.read<CeilingSensorBloc>().add(BackToCeilingGridViewEvent());
},
);
} else if (state is CeilingReportsFailedState) {
final model = context.read<CeilingSensorBloc>().deviceStatus;
return _buildGridView(context, model, isLarge, isMedium);
}
return const Center(child: Text('Error fetching status'));
},
),
);
}
Widget _buildGridView(BuildContext context, CeilingSensorModel model,
bool isLarge, bool isMedium) {
return GridView(
padding: const EdgeInsets.symmetric(horizontal: 50),
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: isLarge
? 3
: isMedium
? 2
: 1,
mainAxisExtent: 133,
crossAxisSpacing: 12,
mainAxisSpacing: 12,
),
children: [
PresenceState(
value: model.presenceState,
),
PresenceDisplayValue(
value: model.sportsPara.toString(),
postfix: '',
description: 'Sports para',
),
PresenceDisplayValue(
value: model.presenceRange.toString(),
postfix: 'm',
description: 'Detection Range',
),
PresenceUpdateData(
value: model.sensitivity.toDouble(),
title: 'Sensitivity:',
minValue: 1,
maxValue: 5,
steps: 1,
action: (int value) {
context.read<CeilingSensorBloc>().add(
CeilingChangeValueEvent(
code: 'sensitivity',
value: value,
),
);
},
),
PresenceUpdateData(
value: model.maxDistance.toDouble(),
title: 'Maximum Distance:',
minValue: 0,
maxValue: 500,
steps: 50,
description: 'm',
action: (int value) => context.read<CeilingSensorBloc>().add(
CeilingChangeValueEvent(
code: 'moving_max_dis',
value: value,
),
),
),
PresenceUpdateData(
value:
(model.noBodyTime.toDouble() / 3600).roundToDouble(),
title: 'Nobody Time:',
minValue: 0,
maxValue: 300000,
steps: 5000,
description: 'hr',
action: (int value) => context
.read<CeilingSensorBloc>()
.add(CeilingChangeValueEvent(
code: 'none_body_time',
value: value,
))),
GestureDetector(
onTap: () {
context.read<CeilingSensorBloc>().add(GetCeilingDeviceReportsEvent(
code: 'illuminance_record', deviceUuid: device.uuid!));
},
child: const PresenceStaticWidget(
icon: Assets.illuminanceRecordIcon,
description: 'Presence Record',
),
),
GestureDetector(
onTap: () {
context.read<CeilingSensorBloc>().add(GetCeilingDeviceReportsEvent(
code: 'presence_record', deviceUuid: device.uuid!));
},
child: const PresenceStaticWidget(
icon: Assets.presenceRecordIcon,
description: 'Presence Record',
),
),
],
);
}
}