diff --git a/lib/pages/device_managment/power_clamp/bloc/smart_power_bloc.dart b/lib/pages/device_managment/power_clamp/bloc/smart_power_bloc.dart index 52cccff4..24c5138f 100644 --- a/lib/pages/device_managment/power_clamp/bloc/smart_power_bloc.dart +++ b/lib/pages/device_managment/power_clamp/bloc/smart_power_bloc.dart @@ -217,29 +217,31 @@ class SmartPowerBloc extends Bloc { try { var status = await DevicesManagementApi().getPowerClampInfo(event.deviceId); - deviceStatus = PowerClampModel.fromJson(status); - + deviceStatus = PowerClampModel.fromJson(status as Map? ??{}); + final phaseADataPoints = deviceStatus.status.phaseA.dataPoints; + final phaseBDataPoints = deviceStatus.status.phaseB.dataPoints; + final phaseCDataPoints = deviceStatus.status.phaseC.dataPoints; phaseData = [ { 'name': 'Phase A', - 'voltage': '${deviceStatus.status.phaseA.dataPoints[0].value / 10} V', - 'current': '${deviceStatus.status.phaseA.dataPoints[1].value / 10} A', - 'activePower': '${deviceStatus.status.phaseA.dataPoints[2].value} W', - 'powerFactor': '${deviceStatus.status.phaseA.dataPoints[3].value}', + 'voltage': '${(phaseADataPoints.elementAtOrNull(0)?.value as num? ?? 0) / 10} V', + 'current': '${(phaseADataPoints.elementAtOrNull(1)?.value as num? ?? 0) / 10} A', + 'activePower': '${phaseADataPoints.elementAtOrNull(2)?.value??'N/A'} W', + 'powerFactor': '${phaseADataPoints.elementAtOrNull(3)?.value??'N/A'}', }, { 'name': 'Phase B', - 'voltage': '${deviceStatus.status.phaseB.dataPoints[0].value / 10} V', - 'current': '${deviceStatus.status.phaseB.dataPoints[1].value / 10} A', - 'activePower': '${deviceStatus.status.phaseB.dataPoints[2].value} W', - 'powerFactor': '${deviceStatus.status.phaseB.dataPoints[3].value}', + 'voltage': '${(phaseBDataPoints .elementAtOrNull(0)?.value as num? ?? 0) / 10} V', + 'current': '${(phaseBDataPoints .elementAtOrNull(1)?.value as num? ?? 0) / 10} A', + 'activePower': '${phaseBDataPoints.elementAtOrNull(2)?.value??'N/A'} W', + 'powerFactor': '${phaseBDataPoints.elementAtOrNull(3)?.value??'N/A'}', }, { 'name': 'Phase C', - 'voltage': '${deviceStatus.status.phaseC.dataPoints[0].value / 10} V', - 'current': '${deviceStatus.status.phaseC.dataPoints[1].value / 10} A', - 'activePower': '${deviceStatus.status.phaseC.dataPoints[2].value} W', - 'powerFactor': '${deviceStatus.status.phaseC.dataPoints[3].value}', + 'voltage': '${(phaseCDataPoints.elementAtOrNull(0)?.value as num? ?? 0) / 10} V', + 'current': '${(phaseCDataPoints.elementAtOrNull(1)?.value as num? ?? 0) / 10} A', + 'activePower': '${phaseCDataPoints.elementAtOrNull(2)?.value ?? 'N/A'} W', + 'powerFactor': '${phaseCDataPoints.elementAtOrNull(3)?.value ?? 'N/A'}', }, ]; emit(GetDeviceStatus()); @@ -785,7 +787,7 @@ class SmartPowerBloc extends Bloc { void selectDateRange() async { DateTime startDate = dateTime!; DateTime endDate = DateTime(startDate.year, startDate.month + 1, 1) - .subtract(Duration(days: 1)); + .subtract(const Duration(days: 1)); String formattedEndDate = DateFormat('dd/MM/yyyy').format(endDate); endChartDate = ' - $formattedEndDate'; } diff --git a/lib/pages/device_managment/power_clamp/models/power_clamp_model.dart b/lib/pages/device_managment/power_clamp/models/power_clamp_model.dart index 914a255b..4318d5ee 100644 --- a/lib/pages/device_managment/power_clamp/models/power_clamp_model.dart +++ b/lib/pages/device_managment/power_clamp/models/power_clamp_model.dart @@ -12,9 +12,9 @@ class PowerClampModel { factory PowerClampModel.fromJson(Map json) { return PowerClampModel( - productUuid: json['productUuid'], - productType: json['productType'], - status: PowerStatus.fromJson(json['status']), + productUuid: json['productUuid'] as String? ?? '', + productType: json['productType'] as String? ?? '', + status: PowerStatus.fromJson(json['status'] as Map? ?? {}), ); } @@ -26,7 +26,7 @@ class PowerClampModel { return PowerClampModel( productUuid: productUuid ?? this.productUuid, productType: productType ?? this.productType, - status: statusPower ?? this.status, + status: statusPower ?? status, ); } } @@ -46,12 +46,10 @@ class PowerStatus { factory PowerStatus.fromJson(Map json) { return PowerStatus( - phaseA: Phase.fromJson(json['phaseA']), - phaseB: Phase.fromJson(json['phaseB']), - phaseC: Phase.fromJson(json['phaseC']), - general: Phase.fromJson(json['general'] - // List.from( - // json['general'].map((x) => DataPoint.fromJson(x))), + phaseA: Phase.fromJson(json['phaseA']as List? ?? []), + phaseB: Phase.fromJson(json['phaseB']as List? ?? []), + phaseC: Phase.fromJson(json['phaseC']as List? ?? []), + general: Phase.fromJson(json['general']as List? ?? [] )); } } @@ -69,30 +67,30 @@ class Phase { } class DataPoint { - dynamic code; - dynamic customName; - dynamic dpId; - dynamic time; - dynamic type; - dynamic value; + final String? code; + final String? customName; + final int? dpId; + final int? time; + final String? type; + final dynamic value; DataPoint({ - required this.code, - required this.customName, - required this.dpId, - required this.time, - required this.type, - required this.value, + this.code, + this.customName, + this.dpId, + this.time, + this.type, + this.value, }); factory DataPoint.fromJson(Map json) { return DataPoint( - code: json['code'], - customName: json['customName'], - dpId: json['dpId'], - time: json['time'], - type: json['type'], - value: json['value'], + code: json['code'] as String?, + customName: json['customName'] as String?, + dpId: json['dpId'] as int?, + time: json['time'] as int?, + type: json['type'] as String?, + value: json['value'] as dynamic, ); } } diff --git a/lib/pages/device_managment/power_clamp/view/power_chart.dart b/lib/pages/device_managment/power_clamp/view/power_chart.dart index 19050b8a..7d6371f4 100644 --- a/lib/pages/device_managment/power_clamp/view/power_chart.dart +++ b/lib/pages/device_managment/power_clamp/view/power_chart.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; import 'package:fl_chart/fl_chart.dart'; +import 'package:flutter/material.dart'; import 'package:syncrow_web/utils/color_manager.dart'; class EnergyConsumptionPage extends StatefulWidget { @@ -10,7 +10,8 @@ class EnergyConsumptionPage extends StatefulWidget { final Widget widget; final Function()? onTap; - EnergyConsumptionPage({ + const EnergyConsumptionPage({ + super.key, required this.chartData, required this.totalConsumption, required this.date, @@ -91,11 +92,12 @@ class _EnergyConsumptionPageState extends State { ], ), Column( + mainAxisSize: MainAxisSize.min, children: [ Padding( padding: const EdgeInsets.only(top: 10), child: SizedBox( - height: MediaQuery.of(context).size.height * 0.11, + height: MediaQuery.sizeOf(context).height * 0.09, child: LineChart( LineChartData( lineTouchData: LineTouchData( @@ -151,7 +153,7 @@ class _EnergyConsumptionPageState extends State { child: RotatedBox( quarterTurns: -1, child: Text(_chartData[index].time, - style: TextStyle(fontSize: 10)), + style: const TextStyle(fontSize: 10)), ), ); } @@ -190,8 +192,8 @@ class _EnergyConsumptionPageState extends State { spots: _chartData .asMap() .entries - .map((entry) => FlSpot(entry.key.toDouble(), - entry.value.consumption)) + .map((entry) => FlSpot( + entry.key.toDouble(), entry.value.consumption)) .toList(), isCurved: true, color: ColorsManager.primaryColor.withOpacity(0.6), @@ -218,7 +220,7 @@ class _EnergyConsumptionPageState extends State { borderData: FlBorderData( show: false, border: Border.all( - color: Color(0xff023DFE).withOpacity(0.7), + color: const Color(0xff023DFE).withOpacity(0.7), width: 10, ), ), @@ -253,11 +255,9 @@ class _EnergyConsumptionPageState extends State { child: InkWell( onTap: widget.onTap, child: Center( - child: SizedBox( - child: Padding( - padding: const EdgeInsets.all(5), - child: Text(widget.date), - ), + child: Padding( + padding: const EdgeInsets.all(5), + child: Text(widget.date), ), ), ), diff --git a/lib/pages/device_managment/power_clamp/view/smart_power_device_control.dart b/lib/pages/device_managment/power_clamp/view/smart_power_device_control.dart index 03d649fa..67313802 100644 --- a/lib/pages/device_managment/power_clamp/view/smart_power_device_control.dart +++ b/lib/pages/device_managment/power_clamp/view/smart_power_device_control.dart @@ -12,8 +12,7 @@ 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 - with HelperResponsiveLayout { +class SmartPowerDeviceControl extends StatelessWidget with HelperResponsiveLayout { final String deviceId; const SmartPowerDeviceControl({super.key, required this.deviceId}); @@ -25,27 +24,27 @@ class SmartPowerDeviceControl extends StatelessWidget ..add(SmartPowerFetchDeviceEvent(deviceId)), child: BlocBuilder( builder: (context, state) { - final _blocProvider = BlocProvider.of(context); + final blocProvider = BlocProvider.of(context); if (state is SmartPowerLoading) { return const Center(child: CircularProgressIndicator()); } else if (state is FakeState) { return _buildStatusControls( - currentPage: _blocProvider.currentPage, + currentPage: blocProvider.currentPage, context: context, - blocProvider: _blocProvider, + blocProvider: blocProvider, ); } else if (state is GetDeviceStatus) { return _buildStatusControls( - currentPage: _blocProvider.currentPage, + currentPage: blocProvider.currentPage, context: context, - blocProvider: _blocProvider, + blocProvider: blocProvider, ); } else if (state is FilterRecordsState) { return _buildStatusControls( - currentPage: _blocProvider.currentPage, + currentPage: blocProvider.currentPage, context: context, - blocProvider: _blocProvider, + blocProvider: blocProvider, ); } return const Center(child: CircularProgressIndicator()); @@ -60,7 +59,7 @@ class SmartPowerDeviceControl extends StatelessWidget required SmartPowerBloc blocProvider, required int currentPage, }) { - PageController _pageController = PageController(initialPage: currentPage); + PageController pageController = PageController(initialPage: currentPage); return Container( padding: const EdgeInsets.symmetric(horizontal: 50), child: DeviceControlsContainer( @@ -85,25 +84,31 @@ class SmartPowerDeviceControl extends StatelessWidget PowerClampInfoCard( iconPath: Assets.powerActiveIcon, title: 'Active', - value: blocProvider - .deviceStatus.status.general.dataPoints[2].value - .toString(), + value: blocProvider.deviceStatus.status.general.dataPoints + .elementAtOrNull(2) + ?.value + .toString() ?? + '', unit: '', ), PowerClampInfoCard( iconPath: Assets.voltMeterIcon, title: 'Current', - value: blocProvider - .deviceStatus.status.general.dataPoints[1].value - .toString(), + value: blocProvider.deviceStatus.status.general.dataPoints + .elementAtOrNull(1) + ?.value + .toString() ?? + '', unit: ' A', ), PowerClampInfoCard( iconPath: Assets.frequencyIcon, title: 'Frequency', - value: blocProvider - .deviceStatus.status.general.dataPoints[4].value - .toString(), + value: blocProvider.deviceStatus.status.general.dataPoints + .elementAtOrNull(4) + ?.value + .toString() ?? + '', unit: ' Hz', ), ], @@ -142,7 +147,7 @@ class SmartPowerDeviceControl extends StatelessWidget icon: const Icon(Icons.arrow_left), onPressed: () { blocProvider.add(SmartPowerArrowPressedEvent(-1)); - _pageController.previousPage( + pageController.previousPage( duration: const Duration(milliseconds: 300), curve: Curves.easeInOut, ); @@ -162,7 +167,7 @@ class SmartPowerDeviceControl extends StatelessWidget icon: const Icon(Icons.arrow_right), onPressed: () { blocProvider.add(SmartPowerArrowPressedEvent(1)); - _pageController.nextPage( + pageController.nextPage( duration: const Duration(milliseconds: 300), curve: Curves.easeInOut, ); @@ -177,7 +182,7 @@ class SmartPowerDeviceControl extends StatelessWidget Expanded( flex: 2, child: PageView( - controller: _pageController, + controller: pageController, onPageChanged: (int page) { blocProvider.add(SmartPowerPageChangedEvent(page)); }, @@ -190,8 +195,8 @@ class SmartPowerDeviceControl extends StatelessWidget blocProvider.add(SelectDateEvent(context: context)); blocProvider.add(FilterRecordsByDateEvent( selectedDate: blocProvider.dateTime!, - viewType: blocProvider - .views[blocProvider.currentIndex])); + viewType: + blocProvider.views[blocProvider.currentIndex])); }, widget: blocProvider.dateSwitcher(), chartData: blocProvider.energyDataList.isNotEmpty