TKK_E32232340/lib/screens/monitoring/widgets/monitoring_shared.dart

131 lines
3.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:fl_chart/fl_chart.dart';
/// SHOW EXPORT PREVIEW DIALOG
/// Helper function untuk menampilkan preview export data
void showExportPreview(BuildContext context, String content, String title) {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text("Preview Export - $title"),
content: SizedBox(
width: double.maxFinite,
child: SingleChildScrollView(
child: Text(
content,
style: const TextStyle(
fontFamily: 'monospace',
fontSize: 10,
),
),
),
),
actions: [
TextButton(
onPressed: () => Navigator.pop(context),
child: const Text("Tutup"),
),
],
),
);
}
/// STAT CARD WIDGET
/// Reusable card untuk menampilkan statistik
class StatCard extends StatelessWidget {
final String title;
final String value;
final Color color;
final IconData icon;
const StatCard({
super.key,
required this.title,
required this.value,
required this.color,
required this.icon,
});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: color.withOpacity(0.1),
borderRadius: BorderRadius.circular(12),
border: Border.all(color: color, width: 1),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Icon(icon, color: color, size: 20),
const SizedBox(height: 8),
Text(
title,
style: const TextStyle(
fontSize: 11,
color: Colors.grey,
),
),
const SizedBox(height: 4),
Text(
value,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: color,
),
),
],
),
);
}
}
/// BUILD BAR GROUP FOR CHART
/// Helper untuk membuat bar group di BarChart
BarChartGroupData buildBarGroup(int x, double value) {
return BarChartGroupData(
x: x,
barRods: [
BarChartRodData(
toY: value.toDouble(),
color: Colors.blue,
width: 12,
borderRadius: const BorderRadius.vertical(top: Radius.circular(6)),
),
],
);
}
/// GET PERIOD INTERVAL
/// Menentukan spacing interval berdasarkan periode
double getPeriodInterval(String period) {
switch (period) {
case "Hari Ini":
return 3;
case "Minggu Ini":
return 1;
case "Bulan Ini":
return 2;
default:
return 1;
}
}
/// GET PERIOD LABEL
/// Menentukan label untuk X-axis berdasarkan periode
String getPeriodLabel(String period, double value) {
switch (period) {
case "Hari Ini":
return '${value.toInt()}h';
case "Minggu Ini":
final days = ['Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab', 'Min'];
return days[value.toInt()];
case "Bulan Ini":
return 'M${value.toInt() + 1}';
default:
return '';
}
}