|
|
|
|
@@ -10,10 +10,7 @@ import '../services/language_services.dart';
|
|
|
|
|
import '../constant/app/app_constants.dart';
|
|
|
|
|
|
|
|
|
|
class SharedPieChart extends StatefulWidget {
|
|
|
|
|
const SharedPieChart(
|
|
|
|
|
{super.key,
|
|
|
|
|
required this.deviceByState,
|
|
|
|
|
required this.devicesManagerBloc});
|
|
|
|
|
const SharedPieChart({super.key, required this.deviceByState, required this.devicesManagerBloc});
|
|
|
|
|
|
|
|
|
|
final Map<String, List<Device>> deviceByState;
|
|
|
|
|
final DevicesManagerBloc devicesManagerBloc;
|
|
|
|
|
@@ -23,7 +20,8 @@ class SharedPieChart extends StatefulWidget {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class _SharedPieChartState extends State<SharedPieChart> {
|
|
|
|
|
int lastTouchedIndex = -1;
|
|
|
|
|
int lastTouchedIndex = 1000;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
TextStyle titleStyle = const TextStyle(
|
|
|
|
|
@@ -31,17 +29,33 @@ class _SharedPieChartState extends State<SharedPieChart> {
|
|
|
|
|
fontSize: 20,
|
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
|
);
|
|
|
|
|
int offlineCount =
|
|
|
|
|
widget.deviceByState[ApplicationConstants.OFFLINE_STATE]?.length ?? 0;
|
|
|
|
|
int normalCount =
|
|
|
|
|
widget.deviceByState[ApplicationConstants.NORMAL_STATE]?.length ?? 0;
|
|
|
|
|
int warningCount =
|
|
|
|
|
widget.deviceByState[ApplicationConstants.WARNING_STATE]?.length ?? 0;
|
|
|
|
|
int inProgressCount =
|
|
|
|
|
widget.deviceByState[ApplicationConstants.INPROGRESS_STATE]?.length ??
|
|
|
|
|
0;
|
|
|
|
|
int errorCount =
|
|
|
|
|
widget.deviceByState[ApplicationConstants.ERROR_STATE]?.length ?? 0;
|
|
|
|
|
List<Map<String, dynamic>> states = [
|
|
|
|
|
{
|
|
|
|
|
'count': widget.deviceByState[ApplicationConstants.OFFLINE_STATE]?.length ?? 0,
|
|
|
|
|
'color': Colors.grey
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
'count': widget.deviceByState[ApplicationConstants.NORMAL_STATE]?.length ?? 0,
|
|
|
|
|
'color': Colors.green
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
'count': widget.deviceByState[ApplicationConstants.WARNING_STATE]?.length ?? 0,
|
|
|
|
|
'color': Colors.red
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
'count': widget.deviceByState[ApplicationConstants.INPROGRESS_STATE]?.length ?? 0,
|
|
|
|
|
'color': Colors.yellow
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
'count': widget.deviceByState[ApplicationConstants.ERROR_STATE]?.length ?? 0,
|
|
|
|
|
'color': Colors.black
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
int offlineCount = widget.deviceByState[ApplicationConstants.OFFLINE_STATE]?.length ?? 0;
|
|
|
|
|
int normalCount = widget.deviceByState[ApplicationConstants.NORMAL_STATE]?.length ?? 0;
|
|
|
|
|
int warningCount = widget.deviceByState[ApplicationConstants.WARNING_STATE]?.length ?? 0;
|
|
|
|
|
int inProgressCount = widget.deviceByState[ApplicationConstants.INPROGRESS_STATE]?.length ?? 0;
|
|
|
|
|
int errorCount = widget.deviceByState[ApplicationConstants.ERROR_STATE]?.length ?? 0;
|
|
|
|
|
return AspectRatio(
|
|
|
|
|
aspectRatio: 1.5,
|
|
|
|
|
child: Row(
|
|
|
|
|
@@ -54,55 +68,28 @@ class _SharedPieChartState extends State<SharedPieChart> {
|
|
|
|
|
aspectRatio: 1,
|
|
|
|
|
child: PieChart(
|
|
|
|
|
PieChartData(
|
|
|
|
|
// pieTouchData: PieTouchData(
|
|
|
|
|
// touchCallback: (FlTouchEvent event, pieTouchResponse) {
|
|
|
|
|
// if (!event.isInterestedForInteractions ||
|
|
|
|
|
// pieTouchResponse == null ||
|
|
|
|
|
// pieTouchResponse.touchedSection == null) {
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// int newTouchedIndex =
|
|
|
|
|
// pieTouchResponse.touchedSection!.touchedSectionIndex;
|
|
|
|
|
// updateDevicesOnTapPieChart(newTouchedIndex);
|
|
|
|
|
// },
|
|
|
|
|
// ),
|
|
|
|
|
sections: [
|
|
|
|
|
PieChartSectionData(
|
|
|
|
|
color: Colors.grey,
|
|
|
|
|
value: offlineCount.toDouble(),
|
|
|
|
|
title: offlineCount.toString(),
|
|
|
|
|
radius: context.dynamicWidth(0.2),
|
|
|
|
|
titleStyle: titleStyle,
|
|
|
|
|
),
|
|
|
|
|
PieChartSectionData(
|
|
|
|
|
color: Colors.green,
|
|
|
|
|
value: normalCount.toDouble(),
|
|
|
|
|
title: normalCount.toString(),
|
|
|
|
|
radius: context.dynamicWidth(0.2),
|
|
|
|
|
titleStyle: titleStyle,
|
|
|
|
|
),
|
|
|
|
|
PieChartSectionData(
|
|
|
|
|
color: Colors.red,
|
|
|
|
|
value: warningCount.toDouble(),
|
|
|
|
|
title: warningCount.toString(),
|
|
|
|
|
radius: context.dynamicWidth(0.2),
|
|
|
|
|
titleStyle: titleStyle,
|
|
|
|
|
),
|
|
|
|
|
PieChartSectionData(
|
|
|
|
|
color: Colors.yellow,
|
|
|
|
|
value: inProgressCount.toDouble(),
|
|
|
|
|
title: inProgressCount.toString(),
|
|
|
|
|
radius: context.dynamicWidth(0.2),
|
|
|
|
|
titleStyle: titleStyle,
|
|
|
|
|
),
|
|
|
|
|
PieChartSectionData(
|
|
|
|
|
color: Colors.black,
|
|
|
|
|
value: errorCount.toDouble(),
|
|
|
|
|
title: errorCount.toString(),
|
|
|
|
|
radius: context.dynamicWidth(0.2),
|
|
|
|
|
titleStyle: titleStyle,
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
pieTouchData: PieTouchData(
|
|
|
|
|
enabled: true,
|
|
|
|
|
touchCallback: (FlTouchEvent event, pieTouchResponse) {
|
|
|
|
|
if (!event.isInterestedForInteractions ||
|
|
|
|
|
pieTouchResponse == null ||
|
|
|
|
|
pieTouchResponse.touchedSection == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
int newTouchedIndex = pieTouchResponse.touchedSection!.touchedSectionIndex;
|
|
|
|
|
updateDevicesOnTapPieChart(newTouchedIndex,states);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
sections: states
|
|
|
|
|
.where((state) => state['count'] != 0)
|
|
|
|
|
.map((state) => PieChartSectionData(
|
|
|
|
|
color: state['color'],
|
|
|
|
|
value: (state['count'] as int).toDouble(),
|
|
|
|
|
title: state['count'].toString(),
|
|
|
|
|
radius: context.dynamicWidth(0.2),
|
|
|
|
|
titleStyle: titleStyle,
|
|
|
|
|
))
|
|
|
|
|
.toList(),
|
|
|
|
|
centerSpaceRadius: context.dynamicWidth(0.05),
|
|
|
|
|
sectionsSpace: 2,
|
|
|
|
|
),
|
|
|
|
|
@@ -181,22 +168,41 @@ class _SharedPieChartState extends State<SharedPieChart> {
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void updateDevicesOnTapPieChart(int touchedIndex) {
|
|
|
|
|
if (touchedIndex != lastTouchedIndex) {
|
|
|
|
|
log("Update PieChart On Tap Function");
|
|
|
|
|
lastTouchedIndex = touchedIndex;
|
|
|
|
|
if (touchedIndex == 0) {
|
|
|
|
|
widget.devicesManagerBloc.getDeviceByState(-1);
|
|
|
|
|
} else if (touchedIndex == 1) {
|
|
|
|
|
widget.devicesManagerBloc.getDeviceByState(0);
|
|
|
|
|
} else if (touchedIndex == 2) {
|
|
|
|
|
widget.devicesManagerBloc.getDeviceByState(1);
|
|
|
|
|
} else if (touchedIndex == 3) {
|
|
|
|
|
widget.devicesManagerBloc.getDeviceByState(2);
|
|
|
|
|
} else {
|
|
|
|
|
widget.devicesManagerBloc.getDeviceByState(-2);
|
|
|
|
|
void updateDevicesOnTapPieChart(int touchedIndex, List<Map<String, dynamic>> states) {
|
|
|
|
|
final filteredStates = states.where((state) => state['count'] != 0).toList();
|
|
|
|
|
|
|
|
|
|
if (touchedIndex >= 0 && touchedIndex < filteredStates.length) {
|
|
|
|
|
final originalIndex = states.indexOf(filteredStates[touchedIndex]);
|
|
|
|
|
|
|
|
|
|
if (originalIndex != lastTouchedIndex) {
|
|
|
|
|
lastTouchedIndex = originalIndex;
|
|
|
|
|
log("Update PieChart On Tap Function");
|
|
|
|
|
log("Touched Index: $touchedIndex, Original Index: $originalIndex");
|
|
|
|
|
|
|
|
|
|
switch (originalIndex) {
|
|
|
|
|
case 0: // OFFLINE_STATE
|
|
|
|
|
log("Touched Index device state = -1");
|
|
|
|
|
widget.devicesManagerBloc.getDeviceByState(-1);
|
|
|
|
|
break;
|
|
|
|
|
case 1: // NORMAL_STATE
|
|
|
|
|
log("Touched Index Get device state = 0");
|
|
|
|
|
widget.devicesManagerBloc.getDeviceByState(0);
|
|
|
|
|
break;
|
|
|
|
|
case 2: // WARNING_STATE
|
|
|
|
|
log("Touched Index Get device state = 1");
|
|
|
|
|
widget.devicesManagerBloc.getDeviceByState(1);
|
|
|
|
|
break;
|
|
|
|
|
case 3: // INPROGRESS_STATE
|
|
|
|
|
log("Touched Index Get device state = 2");
|
|
|
|
|
widget.devicesManagerBloc.getDeviceByState(2);
|
|
|
|
|
break;
|
|
|
|
|
case 4: // ERROR_STATE
|
|
|
|
|
log("Touched Index Get device state = 3");
|
|
|
|
|
widget.devicesManagerBloc.getDeviceByState(3);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -209,6 +215,7 @@ class Indicator extends StatelessWidget {
|
|
|
|
|
this.size = 16,
|
|
|
|
|
this.textColor,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
final Color color;
|
|
|
|
|
final String text;
|
|
|
|
|
final bool isSquare;
|
|
|
|
|
|