class InputValidators { static double? number(String? value) => double.tryParse((value ?? '').trim().replaceAll(',', '.')); static String? requiredText(String? value) => value == null || value.trim().isEmpty ? 'Bitte ausfüllen' : null; static String? nonNegative(String? value, {bool optional = false}) { if (optional && (value ?? '').trim().isEmpty) return null; final parsed = number(value); return parsed == null || !parsed.isFinite || parsed < 0 ? 'Zahl ab 0 eingeben' : null; } static String? positive(String? value) { final parsed = number(value); return parsed == null || !parsed.isFinite || parsed <= 0 ? 'Zahl größer 0 eingeben' : null; } static String? hours(String? value) { final parsed = int.tryParse((value ?? '').trim()); return parsed == null || parsed < 0 ? 'Ganze Zahl ab 0 eingeben' : null; } static String? minutes(String? value) { final parsed = int.tryParse((value ?? '').trim()); return parsed == null || parsed < 0 || parsed > 59 ? '0 bis 59 eingeben' : null; } }