connect generate reports model and api to view

This commit is contained in:
ashrafzarkanisala
2024-08-27 20:34:41 +03:00
parent 5daf7228af
commit bd99049fe4
8 changed files with 89 additions and 71 deletions

View File

@ -1,31 +0,0 @@
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_reports.dart';
class FakeDeviceReport {
static DeviceReport generateFakeReport() {
return DeviceReport(
deviceUuid: 'fake-uuid-12345',
startTime: DateTime.now().millisecondsSinceEpoch,
endTime: DateTime.now().add(Duration(hours: 1)).millisecondsSinceEpoch,
data: [
{
'date': '13/08/2024',
'time': '13:05',
'status': 'Presence',
'description': 'Description for Presence at 13:05 on 13/08/2024',
},
{
'date': '13/08/2024',
'time': '14:10',
'status': 'No Presence',
'description': 'Description for No Presence at 14:10 on 13/08/2024',
},
{
'date': '14/08/2024',
'time': '15:30',
'status': 'Presence',
'description': 'Description for Presence at 15:30 on 14/08/2024',
},
],
);
}
}

View File

@ -2,7 +2,7 @@ class DeviceReport {
final String? deviceUuid; final String? deviceUuid;
final int? startTime; final int? startTime;
final int? endTime; final int? endTime;
final List<dynamic>? data; final List<DeviceEvent>? data;
DeviceReport({ DeviceReport({
this.deviceUuid, this.deviceUuid,
@ -15,12 +15,37 @@ class DeviceReport {
: deviceUuid = json['deviceUuid'] as String?, : deviceUuid = json['deviceUuid'] as String?,
startTime = json['startTime'] as int?, startTime = json['startTime'] as int?,
endTime = json['endTime'] as int?, endTime = json['endTime'] as int?,
data = json['data'] as List?; data = (json['data'] as List<dynamic>?)
?.map((e) => DeviceEvent.fromJson(e as Map<String, dynamic>))
.toList();
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
'deviceUuid': deviceUuid, 'deviceUuid': deviceUuid,
'startTime': startTime, 'startTime': startTime,
'endTime': endTime, 'endTime': endTime,
'data': data 'data': data?.map((e) => e.toJson()).toList(),
};
}
class DeviceEvent {
final String? code;
final int? eventTime;
final String? value;
DeviceEvent({
this.code,
this.eventTime,
this.value,
});
DeviceEvent.fromJson(Map<String, dynamic> json)
: code = json['code'] as String?,
eventTime = json['eventTime'] as int?,
value = json['value'] as String?;
Map<String, dynamic> toJson() => {
'code': code,
'eventTime': eventTime,
'value': value,
}; };
} }

View File

@ -1,10 +1,10 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/helper/fake_report_data.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.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'; 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/bloc/state.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart'; import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/ceiling_sensor_model.dart';
import 'package:syncrow_web/pages/device_managment/ceiling_sensor/model/help_description.dart';
import 'package:syncrow_web/services/devices_mang_api.dart'; import 'package:syncrow_web/services/devices_mang_api.dart';
class CeilingSensorBloc extends Bloc<CeilingSensorEvent, CeilingSensorState> { class CeilingSensorBloc extends Bloc<CeilingSensorEvent, CeilingSensorState> {
@ -93,17 +93,21 @@ class CeilingSensorBloc extends Bloc<CeilingSensorEvent, CeilingSensorState> {
FutureOr<void> _getDeviceReports(GetCeilingDeviceReportsEvent event, FutureOr<void> _getDeviceReports(GetCeilingDeviceReportsEvent event,
Emitter<CeilingSensorState> emit) async { Emitter<CeilingSensorState> emit) async {
emit(CeilingReportsLoadingState()); if (event.code.isEmpty) {
emit(ShowCeilingDescriptionState(description: reportString));
try {
//await DevicesManagementApi.getDeviceReports(deviceId, event.code)
// .then((value) {
final fakeReport = FakeDeviceReport.generateFakeReport();
emit(CeilingReportsState(deviceReport: fakeReport));
// });
} catch (e) {
emit(CeilingReportsFailedState(error: e.toString()));
return; return;
} else {
emit(CeilingReportsLoadingState());
try {
await DevicesManagementApi.getDeviceReports(deviceId, event.code)
.then((value) {
emit(CeilingReportsState(deviceReport: value));
});
} catch (e) {
emit(CeilingReportsFailedState(error: e.toString()));
return;
}
} }
} }

View File

@ -0,0 +1,17 @@
String reportString = '''
1. Nobody, the report to someone
Instruction: The propagation and processing of electromagnetic waves are complicated. There will be false alarms in the actual use of radar, and there will be some influencing factors in the environment, including:
A. Physical disturbance: including air conditioning, fan, motor and other facilities vibration, cats, dogs, mice, birds and other animals passing through, may cause radar misjudgement of the environment.
B. Space electromagnetic wave disturbance, including the possible existence of high-power electrical equipment around the radar, electromagnetic wave intensive places, the simultaneous coexistence of multiple radars and other environmental factors, may also cause radar misjudgement. Such interference items are few in home and office scenes, but more in factories and industrial environments.
C. Power supply disturbance is mainly caused by power supply radar crosstalk caused by associated facilities and equipment in the mains environment, resulting in unstable power supply of radar and resulting in output misjudgement.
2. In the case of human misreporting no one:
A. The presence of a human body beyond the radar test range.
B. The human body is covered by metal, or by extremely thick office desks and chairs.
C. When sleeping, the body cannot detect breathing micro-movements on the side, and may misjudge as nobody for a short time.
''';

View File

@ -30,7 +30,8 @@ class CeilingSensorControls extends StatelessWidget
..add(CeilingInitialEvent()), ..add(CeilingInitialEvent()),
child: BlocBuilder<CeilingSensorBloc, CeilingSensorState>( child: BlocBuilder<CeilingSensorBloc, CeilingSensorState>(
builder: (context, state) { builder: (context, state) {
if (state is CeilingLoadingInitialState) { if (state is CeilingLoadingInitialState ||
state is CeilingReportsLoadingState) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} else if (state is CeilingUpdateState) { } else if (state is CeilingUpdateState) {
return _buildGridView( return _buildGridView(
@ -39,11 +40,11 @@ class CeilingSensorControls extends StatelessWidget
return ReportsTable( return ReportsTable(
report: state.deviceReport, report: state.deviceReport,
onRowTap: (index) { onRowTap: (index) {
final entry = state.deviceReport.data![index]; // final entry = state.deviceReport.data![index];
context.read<CeilingSensorBloc>().add( // context.read<CeilingSensorBloc>().add(
ShowCeilingDescriptionEvent( // ShowCeilingDescriptionEvent(
description: entry['description']), // description: entry['description']),
); // );
}, },
onClose: () { onClose: () {
context context
@ -154,7 +155,7 @@ class CeilingSensorControls extends StatelessWidget
GestureDetector( GestureDetector(
onTap: () { onTap: () {
context.read<CeilingSensorBloc>().add(GetCeilingDeviceReportsEvent( context.read<CeilingSensorBloc>().add(GetCeilingDeviceReportsEvent(
code: 'illuminance_record', deviceUuid: device.uuid!)); code: 'presence_state', deviceUuid: device.uuid!));
}, },
child: const PresenceStaticWidget( child: const PresenceStaticWidget(
icon: Assets.illuminanceRecordIcon, icon: Assets.illuminanceRecordIcon,

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_reports.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/device_reports.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/table_cell_widget.dart'; import 'package:syncrow_web/pages/device_managment/shared/table/table_cell_widget.dart';
import 'package:syncrow_web/pages/device_managment/shared/table/table_header.dart'; import 'package:syncrow_web/pages/device_managment/shared/table/table_header.dart';
@ -39,13 +40,20 @@ class ReportsTable extends StatelessWidget {
), ),
...report.data!.asMap().entries.map((entry) { ...report.data!.asMap().entries.map((entry) {
int index = entry.key; int index = entry.key;
var data = entry.value; DeviceEvent data = entry.value;
// Parse eventTime into Date and Time
DateTime eventDateTime =
DateTime.fromMillisecondsSinceEpoch(data.eventTime!);
String date = DateFormat('dd/MM/yyyy').format(eventDateTime);
String time = DateFormat('HH:mm').format(eventDateTime);
return TableRow( return TableRow(
children: [ children: [
TableCellWidget(value: data['date']), TableCellWidget(value: date),
TableCellWidget(value: data['time']), TableCellWidget(value: time),
TableCellWidget( TableCellWidget(
value: data['status'], value: data.value!,
onTap: () => onRowTap(index), onTap: () => onRowTap(index),
), ),
], ],

View File

@ -1,6 +1,5 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/helper/fake_report_data.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/event.dart'; import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/event.dart';
import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/state.dart'; import 'package:syncrow_web/pages/device_managment/wall_sensor/bloc/state.dart';
@ -98,11 +97,10 @@ class WallSensorBloc extends Bloc<WallSensorEvent, WallSensorState> {
emit(DeviceReportsLoadingState()); emit(DeviceReportsLoadingState());
try { try {
//await DevicesManagementApi.getDeviceReports(deviceId, event.code) await DevicesManagementApi.getDeviceReports(deviceId, event.code)
// .then((value) { .then((value) {
final fakeReport = FakeDeviceReport.generateFakeReport(); emit(DeviceReportsState(deviceReport: value));
emit(DeviceReportsState(deviceReport: fakeReport)); });
// });
} catch (e) { } catch (e) {
emit(DeviceReportsFailedState(error: e.toString())); emit(DeviceReportsFailedState(error: e.toString()));
return; return;

View File

@ -28,7 +28,8 @@ class WallSensorControls extends StatelessWidget with HelperResponsiveLayout {
WallSensorBloc(deviceId: device.uuid!)..add(WallSensorInitialEvent()), WallSensorBloc(deviceId: device.uuid!)..add(WallSensorInitialEvent()),
child: BlocBuilder<WallSensorBloc, WallSensorState>( child: BlocBuilder<WallSensorBloc, WallSensorState>(
builder: (context, state) { builder: (context, state) {
if (state is WallSensorLoadingInitialState) { if (state is WallSensorLoadingInitialState ||
state is DeviceReportsLoadingState) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} else if (state is WallSensorUpdateState) { } else if (state is WallSensorUpdateState) {
return _buildGridView( return _buildGridView(
@ -36,12 +37,7 @@ class WallSensorControls extends StatelessWidget with HelperResponsiveLayout {
} else if (state is DeviceReportsState) { } else if (state is DeviceReportsState) {
return ReportsTable( return ReportsTable(
report: state.deviceReport, report: state.deviceReport,
onRowTap: (index) { onRowTap: (index) {},
final entry = state.deviceReport.data![index];
context.read<WallSensorBloc>().add(
ShowDescriptionEvent(description: entry['description']),
);
},
onClose: () { onClose: () {
context.read<WallSensorBloc>().add(BackToGridViewEvent()); context.read<WallSensorBloc>().add(BackToGridViewEvent());
}, },
@ -155,7 +151,7 @@ class WallSensorControls extends StatelessWidget with HelperResponsiveLayout {
GestureDetector( GestureDetector(
onTap: () { onTap: () {
context.read<WallSensorBloc>().add(GetDeviceReportsEvent( context.read<WallSensorBloc>().add(GetDeviceReportsEvent(
code: 'illuminance_record', deviceUuid: device.uuid!)); code: 'illuminance_value', deviceUuid: device.uuid!));
}, },
child: const PresenceStaticWidget( child: const PresenceStaticWidget(
icon: Assets.illuminanceRecordIcon, icon: Assets.illuminanceRecordIcon,
@ -165,7 +161,7 @@ class WallSensorControls extends StatelessWidget with HelperResponsiveLayout {
GestureDetector( GestureDetector(
onTap: () { onTap: () {
context.read<WallSensorBloc>().add(GetDeviceReportsEvent( context.read<WallSensorBloc>().add(GetDeviceReportsEvent(
code: 'presence_record', deviceUuid: device.uuid!)); code: 'presence_state', deviceUuid: device.uuid!));
}, },
child: const PresenceStaticWidget( child: const PresenceStaticWidget(
icon: Assets.presenceRecordIcon, icon: Assets.presenceRecordIcon,