import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; class NavigationStep { final String instruction; final String maneuver; final double distance; final String duration; final LatLng startLocation; final LatLng endLocation; final String htmlInstructions; NavigationStep({ required this.instruction, required this.maneuver, required this.distance, required this.duration, required this.startLocation, required this.endLocation, required this.htmlInstructions, }); factory NavigationStep.fromJson(Map json) { return NavigationStep( instruction: json['html_instructions'] ?? '', maneuver: json['maneuver'] ?? 'straight', distance: (json['distance']['value'] ?? 0).toDouble(), duration: json['duration']['text'] ?? '', startLocation: LatLng( json['start_location']['lat'].toDouble(), json['start_location']['lng'].toDouble(), ), endLocation: LatLng( json['end_location']['lat'].toDouble(), json['end_location']['lng'].toDouble(), ), htmlInstructions: json['html_instructions'] ?? '', ); } // Get clean instruction text (remove HTML tags) String get cleanInstruction { return instruction .replaceAll(RegExp(r'<[^>]*>'), '') .replaceAll(' ', ' '); } // Get instruction icon based on maneuver IconData get instructionIcon { switch (maneuver.toLowerCase()) { case 'turn-left': return Icons.turn_left; case 'turn-right': return Icons.turn_right; case 'turn-slight-left': return Icons.turn_slight_left; case 'turn-slight-right': return Icons.turn_slight_right; case 'turn-sharp-left': return Icons.turn_sharp_left; case 'turn-sharp-right': return Icons.turn_sharp_right; case 'uturn-left': case 'uturn-right': return Icons.u_turn_left; case 'straight': return Icons.straight; case 'ramp-left': return Icons.ramp_left; case 'ramp-right': return Icons.ramp_right; case 'merge': return Icons.merge; case 'fork-left': case 'fork-right': return Icons.call_split; case 'ferry': return Icons.directions_boat; case 'roundabout-left': case 'roundabout-right': return Icons.roundabout_left; default: return Icons.navigation; } } }