RouteData.fromJson constructor

RouteData.fromJson(
  1. Map<String, dynamic> json, {
  2. required int index,
})

Implementation

factory RouteData.fromJson(Map<String, dynamic> json, {required int index}) {
  final poly = ((json['polyline'] as Map<String, dynamic>?)?['encodedPolyline'] as String?) ?? '';
  final dist = (json['distanceMeters'] as num?)?.toInt();
  final durStr = json['duration'] as String?; // e.g. '123s'
  final dur = durStr == null ? null : int.tryParse(durStr.replaceAll('s', ''));
  final sDurStr = json['staticDuration'] as String?;
  final sDur = sDurStr == null ? null : int.tryParse(sDurStr.replaceAll('s', ''));
  final advisory = json['travelAdvisory'] as Map<String, dynamic>?;
  final tollInfo = advisory == null ? null : TollInfo.fromJson(advisory['tollInfo'] as Map<String, dynamic>?);
  // viewport
  LatLng? ne;
  LatLng? sw;
  final viewport = json['viewport'] as Map<String, dynamic>?;
  if (viewport != null) {
    final high = viewport['high'] as Map<String, dynamic>?;
    final low = viewport['low'] as Map<String, dynamic>?;
    if (high != null) {
      final hl = high['latitude'] as num?;
      final hg = high['longitude'] as num?;
      if (hl != null && hg != null) ne = LatLng(hl.toDouble(), hg.toDouble());
    }
    if (low != null) {
      final ll = low['latitude'] as num?;
      final lg = low['longitude'] as num?;
      if (ll != null && lg != null) sw = LatLng(ll.toDouble(), lg.toDouble());
    }
  }
  // labels
  final labels = <String>[];
  final rawLabels = json['routeLabels'] as List<dynamic>?;
  if (rawLabels != null) {
    for (final l in rawLabels) {
      final s = l?.toString();
      if (s != null) labels.add(s);
    }
  }
  // legs & steps
  final legsJson = json['legs'] as List<dynamic>?;
  final legs = <RouteLegData>[];
  if (legsJson != null) {
    for (final li in legsJson) {
      final m = li as Map<String, dynamic>;
      legs.add(RouteLegData.fromJson(m));
    }
  }
  return RouteData(
    index: index,
    points: poly.isEmpty ? const [] : PolylineCodec.decode(poly),
    distanceMeters: dist,
    durationSeconds: dur,
    staticDurationSeconds: sDur,
    tollInfo: tollInfo,
    northeast: ne,
    southwest: sw,
    legs: legs,
    routeLabels: labels,
  );
}