computeRouteMatrix static method
Computes an ETA matrix for multiple origins/destinations. Returns one element per origin x destination (sparse list with indices).
Implementation
static Future<List<RouteMatrixElement>> computeRouteMatrix({
required String apiKey,
required List<Waypoint> origins,
required List<Waypoint> destinations,
TravelMode mode = TravelMode.drive,
Units units = Units.metric,
String languageCode = 'pt-BR',
String? fieldMask,
}) async {
final body = <String, dynamic>{
'origins': origins.map((o) => {'waypoint': o.toJson()}).toList(growable: false),
'destinations': destinations.map((d) => {'waypoint': d.toJson()}).toList(growable: false),
'travelMode': mode.nameGoogle,
'languageCode': languageCode,
'units': units.nameGoogle,
'routingPreference': 'TRAFFIC_AWARE',
};
final mask = fieldMask ?? 'originIndex,destinationIndex,duration,distanceMeters,status';
final uri = Uri.parse('$_baseMatrix?key=$apiKey');
final res = await http.post(
uri,
headers: {
'Content-Type': 'application/json',
'X-Goog-FieldMask': mask,
},
body: jsonEncode(body),
);
if (res.statusCode != 200) {
throw StateError('Route Matrix HTTP ${res.statusCode}: ${res.body}');
}
final lines = (jsonDecode(res.body) as List<dynamic>?) ?? const [];
return [
for (final item in lines) RouteMatrixElement.fromJson(item as Map<String, dynamic>)
];
}