power_clamp

This commit is contained in:
mohammad
2024-10-21 16:39:10 +03:00
parent 9b0e6ff898
commit 3684ac4d27
16 changed files with 719 additions and 261 deletions

View File

@ -1,6 +1,5 @@
import 'dart:async';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart';
import 'package:syncrow_web/pages/device_managment/power_clamp/bloc/smart_power_event.dart';
import 'package:syncrow_web/pages/device_managment/power_clamp/bloc/smart_power_state.dart';
import 'package:syncrow_web/pages/device_managment/power_clamp/models/wall_light_status_model.dart';
@ -9,118 +8,60 @@ import 'package:syncrow_web/services/devices_mang_api.dart';
class SmartPowerBloc extends Bloc<SmartPowerEvent, SmartPowerState> {
SmartPowerBloc({required this.deviceId}) : super(SmartPowerInitial()) {
on<SmartPowerFetchDeviceEvent>(_onFetchDeviceStatus);
on<SmartPowerControl>(_onControl);
// on<SmartPowerControl>(_onControl);
on<SmartPowerFetchBatchEvent>(_onFetchBatchStatus);
on<SmartPowerBatchControl>(_onBatchControl);
on<WallLightFactoryReset>(_onFactoryReset);
// on<WallLightFactoryReset>(_onFactoryReset);
}
late SmartPowerStatusModel deviceStatus;
late PowerClampModel deviceStatus;
final String deviceId;
Timer? _timer;
List<Map<String, dynamic>> phaseData = [];
FutureOr<void> _onFetchDeviceStatus(
SmartPowerFetchDeviceEvent event, Emitter<SmartPowerState> emit) async {
emit(SmartPowerLoading());
try {
// final status =
// await DevicesManagementApi().getDeviceStatus(event.deviceId);
// deviceStatus =
// SmartPowerStatusModel.fromJson(event.deviceId, status.status);
var status = await DevicesManagementApi().getPowerClampInfo(event.deviceId);
deviceStatus = PowerClampModel.fromJson(status);
phaseData = [
{
'name': 'Phase A',
'voltage': '${deviceStatus.status.phaseA.dataPoints[0].value} V',
'current': '${deviceStatus.status.phaseA.dataPoints[1].value} A',
'activePower': '${deviceStatus.status.phaseA.dataPoints[2].value} W',
'powerFactor': '${deviceStatus.status.phaseA.dataPoints[3].value}',
},
{
'name': 'Phase B',
'voltage': '${deviceStatus.status.phaseB.dataPoints[0].value} V',
'current': '${deviceStatus.status.phaseB.dataPoints[1].value} A',
'activePower': '${deviceStatus.status.phaseB.dataPoints[2].value} W',
'powerFactor': '${deviceStatus.status.phaseB.dataPoints[3].value}',
},
{
'name': 'Phase C',
'voltage': '${deviceStatus.status.phaseC.dataPoints[0].value} V',
'current': '${deviceStatus.status.phaseC.dataPoints[1].value} A',
'activePower': '${deviceStatus.status.phaseC.dataPoints[2].value} W',
'powerFactor': '${deviceStatus.status.phaseC.dataPoints[3].value}',
},
];
emit(SmartPowerStatusLoaded(deviceStatus));
} catch (e) {
emit(SmartPowerError(e.toString()));
}
}
FutureOr<void> _onControl(
SmartPowerControl event, Emitter<SmartPowerState> emit) async {
final oldValue = _getValueByCode(event.code);
_updateLocalValue(event.code, event.value);
emit(SmartPowerStatusLoaded(deviceStatus));
await _runDebounce(
deviceId: event.deviceId,
code: event.code,
value: event.value,
oldValue: oldValue,
emit: emit,
isBatch: false,
);
}
Future<void> _runDebounce({
required dynamic deviceId,
required String code,
required bool value,
required bool oldValue,
required Emitter<SmartPowerState> emit,
required bool isBatch,
}) async {
late String id;
if (deviceId is List) {
id = deviceId.first;
} else {
id = deviceId;
}
if (_timer != null) {
_timer!.cancel();
}
_timer = Timer(const Duration(milliseconds: 500), () async {
try {
late bool response;
if (isBatch) {
response = await DevicesManagementApi()
.deviceBatchControl(deviceId, code, value);
} else {
response = await DevicesManagementApi()
.deviceControl(deviceId, Status(code: code, value: value));
}
if (!response) {
_revertValueAndEmit(id, code, oldValue, emit);
}
} catch (e) {
_revertValueAndEmit(id, code, oldValue, emit);
}
});
}
void _revertValueAndEmit(String deviceId, String code, bool oldValue,
Emitter<SmartPowerState> emit) {
_updateLocalValue(code, oldValue);
emit(SmartPowerStatusLoaded(deviceStatus));
}
void _updateLocalValue(String code, bool value) {
if (code == 'switch_1') {
deviceStatus = deviceStatus.copyWith(switch1: value);
}
}
bool _getValueByCode(String code) {
switch (code) {
case 'switch_1':
return deviceStatus.switch1;
default:
return false;
}
}
Future<void> _onFetchBatchStatus(
SmartPowerFetchBatchEvent event, Emitter<SmartPowerState> emit) async {
emit(SmartPowerLoading());
try {
final status =
await DevicesManagementApi().getBatchStatus(event.devicesIds);
deviceStatus =
SmartPowerStatusModel.fromJson(event.devicesIds.first, status.status);
// deviceStatus =
// SmartPowerStatusModel.fromJson(event.devicesIds.first, status.status);
emit(SmartPowerStatusLoaded(deviceStatus));
} catch (e) {
emit(SmartPowerError(e.toString()));
@ -135,37 +76,30 @@ class SmartPowerBloc extends Bloc<SmartPowerEvent, SmartPowerState> {
FutureOr<void> _onBatchControl(
SmartPowerBatchControl event, Emitter<SmartPowerState> emit) async {
final oldValue = _getValueByCode(event.code);
// final oldValue = _getValueByCode(event.code);
_updateLocalValue(event.code, event.value);
// _updateLocalValue(event.code, event.value);
emit(SmartPowerStatusLoaded(deviceStatus));
await _runDebounce(
deviceId: event.devicesIds,
code: event.code,
value: event.value,
oldValue: oldValue,
emit: emit,
isBatch: true,
);
}
FutureOr<void> _onFactoryReset(
WallLightFactoryReset event, Emitter<SmartPowerState> emit) async {
emit(SmartPowerLoading());
try {
final response = await DevicesManagementApi().factoryReset(
event.factoryReset,
event.deviceId,
);
if (!response) {
emit(SmartPowerError('Failed'));
} else {
emit(SmartPowerStatusLoaded(deviceStatus));
FutureOr<void> _onFactoryReset(
WallLightFactoryReset event, Emitter<SmartPowerState> emit) async {
emit(SmartPowerLoading());
try {
final response = await DevicesManagementApi().factoryReset(
event.factoryReset,
event.deviceId,
);
if (!response) {
emit(SmartPowerError('Failed'));
} else {
emit(SmartPowerStatusLoaded(deviceStatus));
}
} catch (e) {
emit(SmartPowerError(e.toString()));
}
} catch (e) {
emit(SmartPowerError(e.toString()));
}
}
}

View File

@ -57,3 +57,12 @@ class WallLightFactoryReset extends SmartPowerEvent {
@override
List<Object> get props => [deviceId, factoryReset];
}
class PageChangedEvent extends SmartPowerEvent {
final int newPage;
PageChangedEvent(this.newPage);
}
class PageArrowPressedEvent extends SmartPowerEvent {
final int direction;
PageArrowPressedEvent(this.direction);
}

View File

@ -11,7 +11,7 @@ class SmartPowerInitial extends SmartPowerState {}
class SmartPowerLoading extends SmartPowerState {}
class SmartPowerStatusLoaded extends SmartPowerState {
final SmartPowerStatusModel status;
final PowerClampModel status;
SmartPowerStatusLoaded(this.status);
@ -54,3 +54,4 @@ class SmartPowerBatchStatusLoaded extends SmartPowerState {
@override
List<Object> get props => [status];
}

View File

@ -1,47 +1,86 @@
import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart';
// PowerClampModel class to represent the response
class PowerClampModel {
String productUuid;
String productType;
PowerStatus status;
class SmartPowerStatusModel {
final String uuid;
final bool switch1;
final int countDown;
SmartPowerStatusModel({
required this.uuid,
required this.switch1,
required this.countDown,
PowerClampModel({
required this.productUuid,
required this.productType,
required this.status,
});
factory SmartPowerStatusModel.fromJson(String id, List<Status> jsonList) {
late bool switch1;
late int countDown;
for (var status in jsonList) {
switch (status.code) {
case 'switch_1':
switch1 = status.value ?? false;
break;
case 'countdown_1':
countDown = status.value ?? 0;
break;
}
}
return SmartPowerStatusModel(
uuid: id,
switch1: switch1,
countDown: countDown,
);
}
SmartPowerStatusModel copyWith({
String? uuid,
bool? switch1,
int? countDown,
}) {
return SmartPowerStatusModel(
uuid: uuid ?? this.uuid,
switch1: switch1 ?? this.switch1,
countDown: countDown ?? this.countDown,
factory PowerClampModel.fromJson(Map<String, dynamic> json) {
return PowerClampModel(
productUuid: json['productUuid'],
productType: json['productType'],
status: PowerStatus.fromJson(json['status']),
);
}
}
class PowerStatus {
Phase phaseA;
Phase phaseB;
Phase phaseC;
Phase general;
PowerStatus({
required this.phaseA,
required this.phaseB,
required this.phaseC,
required this.general,
});
factory PowerStatus.fromJson(Map<String, dynamic> json) {
return PowerStatus(
phaseA: Phase.fromJson(json['phaseA']),
phaseB: Phase.fromJson(json['phaseB']),
phaseC: Phase.fromJson(json['phaseC']),
general: Phase.fromJson(json['general']
// List<DataPoint>.from(
// json['general'].map((x) => DataPoint.fromJson(x))),
));
}
}
class Phase {
List<DataPoint> dataPoints;
Phase({required this.dataPoints});
factory Phase.fromJson(List<dynamic> json) {
return Phase(
dataPoints: json.map((x) => DataPoint.fromJson(x)).toList(),
);
}
}
class DataPoint {
dynamic code;
dynamic customName;
dynamic dpId;
dynamic time;
dynamic type;
dynamic value;
DataPoint({
required this.code,
required this.customName,
required this.dpId,
required this.time,
required this.type,
required this.value,
});
factory DataPoint.fromJson(Map<String, dynamic> json) {
return DataPoint(
code: json['code'],
customName: json['customName'],
dpId: json['dpId'],
time: json['time'],
type: json['type'],
value: json['value'],
);
}
}

View File

@ -0,0 +1,124 @@
import 'package:flutter/material.dart';
import 'package:syncrow_web/pages/device_managment/power_clamp/view/power_info_card.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
class PhaseWidget extends StatefulWidget {
final List<Map<String, dynamic>> phaseData;
PhaseWidget({
required this.phaseData,
});
@override
_PhaseWidgetState createState() => _PhaseWidgetState();
}
class _PhaseWidgetState extends State<PhaseWidget> {
int _selectedPhaseIndex = 0;
@override
Widget build(BuildContext context) {
return Column(
children: [
SizedBox(height: 10),
Row(
children: List.generate(widget.phaseData.length, (index) {
return InkWell(
onTap: () {
setState(() {
_selectedPhaseIndex = index;
});
},
child: Padding(
padding: const EdgeInsets.only(left: 10, right: 10),
child: Text(
widget.phaseData[index]['name'],
style: TextStyle(
fontWeight: FontWeight.bold,
color: _selectedPhaseIndex == index
? Colors.black
: Colors.grey,
),
),
),
);
}),
),
SizedBox(height: 10),
_selectedPhaseIndex == 0
? phase(
totalActive: widget.phaseData[0]['activePower'] ?? '0',
totalCurrent: widget.phaseData[0]['current'] ?? '0',
totalFactor: widget.phaseData[0]['powerFactor'] ?? '0',
totalVoltage: widget.phaseData[0]['voltage'] ?? '0',
)
: _selectedPhaseIndex == 1
? phase(
totalActive: widget.phaseData[1]['activePower'] ?? '0',
totalCurrent: widget.phaseData[1]['current'] ?? '0',
totalFactor: widget.phaseData[1]['powerFactor'] ?? '0',
totalVoltage: widget.phaseData[1]['voltage'] ?? '0',
)
: phase(
totalActive: widget.phaseData[2]['activePower'] ?? '0',
totalCurrent: widget.phaseData[2]['current'] ?? '0',
totalFactor: widget.phaseData[2]['powerFactor'] ?? '0',
totalVoltage: widget.phaseData[2]['voltage'] ?? '0',
),
],
);
}
}
class phase extends StatelessWidget {
const phase({
super.key,
required this.totalVoltage,
required this.totalCurrent,
required this.totalActive,
required this.totalFactor,
});
final String totalVoltage;
final String totalCurrent;
final String totalActive;
final String totalFactor;
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
PowerClampInfoCard(
iconPath: Assets.voltageIcon,
title: 'Voltage',
value: totalVoltage,
unit: '',
),
PowerClampInfoCard(
iconPath: Assets.voltMeterIcon,
title: 'Current',
value: totalCurrent,
unit: '',
),
PowerClampInfoCard(
iconPath: Assets.powerActiveIcon,
title: 'Active Power',
value: totalActive,
unit: '',
),
PowerClampInfoCard(
iconPath: Assets.speedoMeter,
title: 'Power Factor',
value: totalFactor,
unit: '',
),
],
),
],
),
);
}
}

View File

@ -28,9 +28,62 @@ class _EnergyConsumptionPageState extends State<EnergyConsumptionPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
return Container(
color: ColorsManager.whiteColors,
child: Column(
children: [
const Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'Total Consumption',
style: TextStyle(
fontWeight: FontWeight.w700,
fontSize: 20,
),
),
Text(
'8623.20 kWh',
style: TextStyle(
fontWeight: FontWeight.w700,
fontSize: 20,
),
),
],
),
const Row(
children: [
Text(
'Energy consumption',
style: TextStyle(
color: ColorsManager.grayColor,
fontWeight: FontWeight.w700,
fontSize: 12,
),
),
],
),
const Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'01/08/2024 - 31/08/2024',
style: TextStyle(
color: ColorsManager.grayColor,
fontWeight: FontWeight.w400,
fontSize: 8,
),
),
Text(
'1000.00 kWh',
style: TextStyle(
color: ColorsManager.grayColor,
fontWeight: FontWeight.w400,
fontSize: 8,
),
),
],
),
Expanded(
child: Padding(
padding: const EdgeInsets.only(top: 15),
@ -78,7 +131,7 @@ class _EnergyConsumptionPageState extends State<EnergyConsumptionPage> {
),
topTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: true,
showTitles: false,
reservedSize: 70,
getTitlesWidget: (value, meta) {
int index = value.toInt();

View File

@ -24,56 +24,50 @@ class PowerClampInfoCard extends StatelessWidget {
padding: const EdgeInsets.all(5.0),
child: Container(
decoration: BoxDecoration(
color: Colors.white,
color: ColorsManager.graysColor,
borderRadius: BorderRadius.circular(20),
),
height: 55,
color: ColorsManager.graysColor,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Expanded(
child: SvgPicture.asset(
iconPath,
fit: BoxFit.fill,
),
SvgPicture.asset(
iconPath,
fit: BoxFit.fill,
),
Expanded(
flex: 3,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
value,
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.w700,
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(
fontSize: 8,
fontWeight: FontWeight.w400,
),
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
value,
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.w700,
),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
value,
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.w700,
),
Text(
unit,
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.w700,
),
Text(
unit,
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.w700,
),
),
],
),
],
),
),
],
),
],
)
],
),

View File

@ -1,66 +1,234 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/device_managment/power_clamp/bloc/smart_power_bloc.dart';
import 'package:syncrow_web/pages/device_managment/power_clamp/bloc/smart_power_event.dart';
import 'package:syncrow_web/pages/device_managment/power_clamp/bloc/smart_power_state.dart';
import 'package:syncrow_web/pages/device_managment/power_clamp/view/power_chart.dart';
import 'package:syncrow_web/pages/device_managment/power_clamp/view/power_info_card.dart';
import 'package:syncrow_web/pages/device_managment/power_clamp/view/phase_widget.dart';
import 'package:syncrow_web/pages/device_managment/shared/device_controls_container.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
//Smart Power Clamp
class SmartPowerDeviceControl extends StatelessWidget
class SmartPowerDeviceControl extends StatefulWidget
with HelperResponsiveLayout {
final String deviceId;
const SmartPowerDeviceControl({super.key, required this.deviceId});
@override
State<SmartPowerDeviceControl> createState() =>
_SmartPowerDeviceControlState();
}
class _SmartPowerDeviceControlState extends State<SmartPowerDeviceControl> {
@override
Widget build(BuildContext context) {
return _buildStatusControls(
context,
return BlocProvider(
create: (context) => SmartPowerBloc(deviceId: widget.deviceId)
..add(SmartPowerFetchDeviceEvent(widget.deviceId)),
child: BlocBuilder<SmartPowerBloc, SmartPowerState>(
builder: (context, state) {
final _blocProvider = BlocProvider.of<SmartPowerBloc>(context);
if (state is SmartPowerLoading) {
return const Center(child: CircularProgressIndicator());
} else if (state is SmartPowerStatusLoaded) {
return _buildStatusControls(
context: context,
blocProvider: _blocProvider,
);
}
return const Center(child: CircularProgressIndicator());
// }
},
),
);
// BlocProvider(
// create: (context) => SmartPowerBloc(deviceId: deviceId)
// ..add(SmartPowerFetchDeviceEvent(deviceId)),
// child: BlocBuilder<SmartPowerBloc, SmartPowerState>(
// builder: (context, state) {
// if (state is SmartPowerLoading) {
// return const Center(child: CircularProgressIndicator());
// } else if (state is SmartPowerStatusLoaded) {
// return _buildStatusControls(context, state.status);
// }
// // else if (state is WallLightSwitchError ||
// // state is WallLightSwitchControlError) {
// // return const Center(child: Text('Error fetching status'));
// // } else {
// return const Center(child: CircularProgressIndicator());
// // }
// },
// ),
// );
}
Widget _buildStatusControls(
BuildContext context,
) {
final isExtraLarge = isExtraLargeScreenSize(context);
final isLarge = isLargeScreenSize(context);
final isMedium = isMediumScreenSize(context);
Widget _buildStatusControls({
required BuildContext context,
required SmartPowerBloc blocProvider,
}) {
PageController _pageController = PageController();
int _currentPage = 0;
void _onArrowPressed(int direction) {
setState(() {
_currentPage = (_currentPage + direction) % 3;
if (_currentPage < 0) {
_currentPage = 2;
}
_pageController.animateToPage(
_currentPage,
duration: Duration(milliseconds: 300),
curve: Curves.easeInOut,
);
});
}
return Container(
height: 150,
child: EnergyConsumptionPage(
chartData: [
EnergyData('12:00 AM', 4.0),
EnergyData('01:00 AM', 3.5),
EnergyData('02:00 AM', 3.8),
EnergyData('03:00 AM', 3.2),
EnergyData('04:00 AM', 4.0),
EnergyData('05:00 AM', 3.4),
EnergyData('06:00 AM', 3.2),
EnergyData('07:00 AM', 3.5),
EnergyData('08:00 AM', 3.8),
EnergyData('09:00 AM', 3.6),
EnergyData('10:00 AM', 3.9),
EnergyData('11:00 AM', 4.0),
],
totalConsumption: 10000,
date: '10/08/2024',
child: DeviceControlsContainer(
child: Column(
children: [
const Row(
children: [
Text(
'Live',
style: TextStyle(
fontSize: 32,
fontWeight: FontWeight.w700,
color: ColorsManager.grayColor),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
PowerClampInfoCard(
iconPath: Assets.powerActiveIcon,
title: 'Active',
value: blocProvider
.deviceStatus.status.general.dataPoints[0].value
.toString(),
unit: '',
),
PowerClampInfoCard(
iconPath: Assets.voltMeterIcon,
title: 'Current',
value: blocProvider
.deviceStatus.status.general.dataPoints[1].value
.toString(),
unit: ' A',
),
PowerClampInfoCard(
iconPath: Assets.frequencyIcon,
title: 'Frequency',
value: blocProvider
.deviceStatus.status.general.dataPoints[2].value
.toString(),
unit: ' Hz',
),
],
),
PhaseWidget(
phaseData: blocProvider.phaseData,
),
Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: ColorsManager.whiteColors,
borderRadius: BorderRadius.circular(20),
),
height: 250,
child: Column(
children: [
Container(
decoration: BoxDecoration(
color: ColorsManager.graysColor,
borderRadius: BorderRadius.circular(20),
),
height: 60,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
IconButton(
icon: Icon(Icons.arrow_left),
onPressed: () => _onArrowPressed(-1),
),
Text(
_currentPage == 0
? 'Total'
: _currentPage == 0
? 'Phase A'
: _currentPage == 0
? 'Phase B'
: 'Phase C',
style: TextStyle(fontSize: 18),
),
IconButton(
icon: Icon(Icons.arrow_right),
onPressed: () => _onArrowPressed(1),
),
],
),
),
Expanded(
child: PageView(
controller: _pageController,
onPageChanged: (int page) {
setState(() {
_currentPage = page;
});
},
children: [
EnergyConsumptionPage(
chartData: [
EnergyData('12:00 AM', 4.0),
EnergyData('01:00 AM', 3.5),
EnergyData('02:00 AM', 3.8),
EnergyData('03:00 AM', 3.2),
EnergyData('04:00 AM', 4.0),
EnergyData('05:00 AM', 3.4),
EnergyData('06:00 AM', 3.2),
EnergyData('07:00 AM', 3.5),
EnergyData('08:00 AM', 3.8),
EnergyData('09:00 AM', 3.6),
EnergyData('10:00 AM', 3.9),
EnergyData('10:00 AM', 3.9),
EnergyData('11:00 AM', 4.0),
],
totalConsumption: 10000,
date: '10/08/2024',
),
EnergyConsumptionPage(
chartData: [
EnergyData('12:00 AM', 4.0),
EnergyData('01:00 AM', 3.5),
EnergyData('02:00 AM', 3.8),
EnergyData('03:00 AM', 3.2),
EnergyData('04:00 AM', 4.0),
EnergyData('05:00 AM', 3.4),
EnergyData('06:00 AM', 3.2),
EnergyData('07:00 AM', 3.5),
EnergyData('08:00 AM', 3.8),
EnergyData('09:00 AM', 3.6),
EnergyData('10:00 AM', 3.9),
EnergyData('10:00 AM', 3.9),
EnergyData('11:00 AM', 4.0),
],
totalConsumption: 10000,
date: '10/08/2024',
),
EnergyConsumptionPage(
chartData: [
EnergyData('12:00 AM', 4.0),
EnergyData('01:00 AM', 6.5),
EnergyData('02:00 AM', 3.8),
EnergyData('03:00 AM', 3.2),
EnergyData('04:00 AM', 6.0),
EnergyData('05:00 AM', 3.4),
EnergyData('06:00 AM', 5.2),
EnergyData('07:00 AM', 3.5),
EnergyData('08:00 AM', 3.8),
EnergyData('09:00 AM', 5.6),
EnergyData('10:00 AM', 6.9),
EnergyData('10:00 AM', 3.9),
EnergyData('11:00 AM', 6.0),
],
totalConsumption: 10000,
date: '10/08/2024',
),
],
),
),
],
),
),
],
),
),
);
}