RouteData.fromJson constructor
RouteData.fromJson(
- Map<String, dynamic> json, {
- 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,
);
}