directions.dart 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import 'package:latlong2/latlong.dart';
  2. class Directions {
  3. final List<DirectionSegment> segments;
  4. final List<LatLng> waypointsCoordinates;
  5. const Directions({required this.segments, required this.waypointsCoordinates});
  6. factory Directions.fromJson(Map<String, dynamic> json) {
  7. return Directions(
  8. segments: _getSegmentsFromJson(json),
  9. waypointsCoordinates: _getWaypointsCoordinatesFromJson(json),
  10. );
  11. }
  12. static List<DirectionSegment> _getSegmentsFromJson(Map<String, dynamic> json) {
  13. final segmentsJson = List<Map<String, dynamic>>.from(json['features'][0]['properties']['segments'][0]['steps']);
  14. final List<DirectionSegment> segments = [];
  15. for (final segmentJson in segmentsJson) {
  16. segments.add(DirectionSegment.fromJson(segmentJson));
  17. }
  18. return segments;
  19. }
  20. static List<LatLng> _getWaypointsCoordinatesFromJson(Map<String, dynamic> json) {
  21. final coordinatesJson = List.from(json['features'][0]['geometry']['coordinates']);
  22. final List<LatLng> waypointsCoordinates = [];
  23. for (final coordinateJson in coordinatesJson) {
  24. waypointsCoordinates.add(LatLng(coordinateJson[1], coordinateJson[0]));
  25. }
  26. return waypointsCoordinates;
  27. }
  28. }
  29. class DirectionSegment {
  30. final num distance;
  31. final num duration;
  32. final int type;
  33. final String instruction;
  34. final List<int> waypoints;
  35. const DirectionSegment({
  36. required this.distance,
  37. required this.duration,
  38. required this.type,
  39. required this.instruction,
  40. required this.waypoints,
  41. });
  42. factory DirectionSegment.fromJson(Map<String, dynamic> json) {
  43. return DirectionSegment(
  44. distance: json['distance'],
  45. duration: json['duration'],
  46. type: json['type'],
  47. instruction: json['instruction'],
  48. waypoints: List<int>.from(json['way_points']),
  49. );
  50. }
  51. }