parseDateInputProp function

DateTime? parseDateInputProp(
  1. String? value
)

Utility to parse date string templates for S360FDateInput Supports:

  • 'NOW' (current date)
  • ISO date string (e.g. '1999-10-20')
  • '{BACKWARD_x}' (x days before today)
  • '{FORWARD_x}' (x days after today)

Implementation

DateTime? parseDateInputProp(String? value) {
  if (value == null || value.isEmpty) return null;
  final now = DateTime.now();
  if (value == 'NOW') return getLocalizedDateTime(now);
  final isoReg = RegExp(r'^\d{4}-\d{2}-\d{2}');
  if (isoReg.hasMatch(value)) {
    try {
      return getLocalizedDateTime(DateTime.parse(value));
    } catch (_) {
      return null;
    }
  }
  final backwardReg = RegExp(r'^\{BACKWARD_(\d+)\}');
  final forwardReg = RegExp(r'^\{FORWARD_(\d+)\}');
  final backwardMatch = backwardReg.firstMatch(value);
  if (backwardMatch != null) {
    final days = int.tryParse(backwardMatch.group(1)!);
    if (days != null) {
      return getLocalizedDateTime(now.subtract(Duration(days: days)));
    }
  }
  final forwardMatch = forwardReg.firstMatch(value);
  if (forwardMatch != null) {
    final days = int.tryParse(forwardMatch.group(1)!);
    if (days != null) {
      return getLocalizedDateTime(now.add(Duration(days: days)));
    }
  }
  return null;
}