From db94f3bea1bdc8e3ad93dc43c371c8d4ee17cc4b Mon Sep 17 00:00:00 2001 From: Hyperling Date: Mon, 28 Sep 2026 06:59:22 -0700 Subject: [PATCH] main, add validation for sunset time field. --- lib/main.dart | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 7123802..734447d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,9 +12,6 @@ import 'package:alarm/alarm.dart'; import 'dart:convert'; /// 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 /// - Add sunrise section and change app name to Sunshine Alarm? /// v1.0.0 @@ -312,7 +309,7 @@ class _HomeScreenState extends State { // Alarm Method await Alarm.stop(_alarmId); } - _showSnack('Alarm cancelled.'); + _showSnack('Alarm Cancelled'); } } @@ -329,6 +326,17 @@ class _HomeScreenState extends State { 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 Widget build(BuildContext context) { return Scaffold( @@ -396,11 +404,20 @@ class _HomeScreenState extends State { Expanded( child: TextField( controller: _sunsetController, - decoration: const InputDecoration( + decoration: InputDecoration( labelText: 'Sunset Time (HH:MM)', border: OutlineInputBorder(), + errorText: _sunsetErrorText, ), - onChanged: (_) => _savePrefs(), + onChanged: (v) { + final val = _validateTime(v); + if (val == null) { + _savePrefs(); + } + setState(() { + _sunsetErrorText = val; + }); + }, ), ), const SizedBox(width: 8),