main, add validation for sunset time field.

This commit is contained in:
me committed 2026-09-28 06:59:22 -07:00
1 parent 39792270f1
commit db94f3bea1
1 file changed
+23 -6
+23 -6
View File
@@ -12,9 +12,6 @@ import 'package:alarm/alarm.dart';
import 'dart:convert'; import 'dart:convert';
/// TBD: /// TBD:
/// v0.2.1
/// - Fix time to get 0 prefixed if before 10:00 (5:30 becomes 05:30).
/// - Fix time to validate properly rather than allowing garbage (error 530).
/// v0.3.0 /// v0.3.0
/// - Add sunrise section and change app name to Sunshine Alarm? /// - Add sunrise section and change app name to Sunshine Alarm?
/// v1.0.0 /// v1.0.0
@@ -312,7 +309,7 @@ class _HomeScreenState extends State<HomeScreen> {
// Alarm Method // Alarm Method
await Alarm.stop(_alarmId); await Alarm.stop(_alarmId);
} }
_showSnack('Alarm cancelled.'); _showSnack('Alarm Cancelled');
} }
} }
@@ -329,6 +326,17 @@ class _HomeScreenState extends State<HomeScreen> {
super.dispose(); super.dispose();
} }
String? _validateTime(String? value) {
if (value == null || !RegExp(r'^\d{2}:\d{2}$').hasMatch(value)) {
return 'Use HH:MM Format';
}
final h = int.parse(value.substring(0, 2));
final m = int.parse(value.substring(3, 5));
if (h > 23) return 'Hour Must Be 0–23';
if (m > 59) return 'Minute Must Be 0–59';
return null; // valid
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@@ -396,11 +404,20 @@ class _HomeScreenState extends State<HomeScreen> {
Expanded( Expanded(
child: TextField( child: TextField(
controller: _sunsetController, controller: _sunsetController,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'Sunset Time (HH:MM)', labelText: 'Sunset Time (HH:MM)',
border: OutlineInputBorder(), border: OutlineInputBorder(),
errorText: _sunsetErrorText,
), ),
onChanged: (_) => _savePrefs(), onChanged: (v) {
final val = _validateTime(v);
if (val == null) {
_savePrefs();
}
setState(() {
_sunsetErrorText = val;
});
},
), ),
), ),
const SizedBox(width: 8), const SizedBox(width: 8),