TKK_E32231225/lib/widgets/moisture_gauge.dart

104 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
class MoistureGauge extends StatelessWidget {
final int value;
final int min;
final int max;
const MoistureGauge({
super.key,
required this.value,
required this.min,
required this.max,
});
Color getColor() {
if (value < min) return Colors.redAccent;
if (value > max) return Colors.blueAccent;
return Colors.orangeAccent; // area hysteresis
}
String getStatus() {
if (value < min) return "Kering";
if (value > max) return "Basah";
return "Stabil";
}
@override
Widget build(BuildContext context) {
final color = getColor();
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
"Soil Moisture",
style: TextStyle(color: Colors.white70),
),
const SizedBox(height: 10),
Stack(
alignment: Alignment.center,
children: [
/// background
SizedBox(
width: 90,
height: 90,
child: CircularProgressIndicator(
value: 1,
strokeWidth: 10,
color: Colors.white12,
),
),
/// value
SizedBox(
width: 90,
height: 90,
child: CircularProgressIndicator(
value: value / 100,
strokeWidth: 10,
strokeCap: StrokeCap.round,
color: color,
),
),
/// center text
Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
"$value%",
style: TextStyle(
color: color,
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
Text(
getStatus(),
style: const TextStyle(
color: Colors.white54,
fontSize: 11,
),
),
],
),
],
),
const SizedBox(height: 8),
Text(
"Min: $min | Max: $max",
style: const TextStyle(color: Colors.white38, fontSize: 10),
),
],
);
}
}