Fix(bugs): Handle Touch PieChart
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user