TrafficParameters.fromParameters constructor

TrafficParameters.fromParameters(
  1. List<GemParameter> params
)

Implementation

factory TrafficParameters.fromParameters(List<GemParameter> params) {
  T? findValue<T>(String key) {
    for (final GemParameter param in params) {
      if (param.key == key) {
        if (param.value is! T) {
          return null;
        }
        return param.value as T?;
      }
    }
    return null;
  }

  T findValueWithDefault<T>(String key, T defaultValue) {
    final T? value = findValue<T>(key);
    return value ?? defaultValue;
  }

  DateTime parseDateTimeString(String dateTimeString) {
    if (dateTimeString.isEmpty) {
      return DateTime.fromMillisecondsSinceEpoch(0, isUtc: true);
    }
    try {
      return DateTime.parse(dateTimeString);
    } catch (e) {
      return DateTime.fromMillisecondsSinceEpoch(0, isUtc: true);
    }
  }

  DateTime parseDateTimeInt(int timestamp) {
    if (timestamp <= 0) {
      return DateTime.fromMillisecondsSinceEpoch(0, isUtc: true);
    }
    return DateTime.fromMillisecondsSinceEpoch(timestamp, isUtc: true);
  }

  final dynamic startStampValue =
      findValue<int>('start_stamp') ?? findValue<String>('start_stamp');
  final dynamic endStampValue =
      findValue<int>('end_stamp') ?? findValue<String>('end_stamp');

  final DateTime startStamp = startStampValue is int
      ? parseDateTimeInt(startStampValue)
      : parseDateTimeString(startStampValue as String? ?? '');

  final DateTime endStamp = endStampValue is int
      ? parseDateTimeInt(endStampValue)
      : parseDateTimeString(endStampValue as String? ?? '');

  return TrafficParameters(
    id: findValueWithDefault<String>('id', ''),
    iconId: findValueWithDefault<int>('iconId', 0),
    alertc: findValueWithDefault<int>('alertc', 0),
    delay: findValueWithDefault<int>('delay', 0),
    description: findValueWithDefault<String>('description', ''),
    startStamp: startStamp,
    endStamp: endStamp,
    from: findValueWithDefault<String>('from', ''),
    to: findValueWithDefault<String>('to', ''),
    transportMode: RouteTransportModeExtension.fromId(
      findValueWithDefault<int>('transportMode', 0),
    ),
  );
}