import 'package:flutter/foundation.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:wisata_app/models/destination.dart'; class MapsLauncherException implements Exception { const MapsLauncherException(this.message); final String message; @override String toString() => message; } class MapsLauncherService { const MapsLauncherService(); Future openDestination(Destination destination) async { if (!destination.hasCoordinates) { throw const MapsLauncherException( 'Koordinat wisata belum tersedia.', ); } final query = _queryFor(destination); final appUri = Uri( scheme: 'geo', host: '0,0', queryParameters: {'q': query}, ); final webUri = Uri.https( 'www.google.com', '/maps/search/', {'api': '1', 'query': query}, ); debugPrint('[Maps] Buka Maps app: $appUri'); if (await launchUrl(appUri, mode: LaunchMode.externalApplication)) { return; } debugPrint('[Maps] Fallback browser: $webUri'); if (await launchUrl(webUri, mode: LaunchMode.externalApplication)) { return; } throw const MapsLauncherException( 'Google Maps belum bisa dibuka. Periksa aplikasi Maps atau browser.', ); } String _queryFor(Destination destination) { final latitude = destination.latitude; final longitude = destination.longitude; if (latitude != null && longitude != null) { return '$latitude,$longitude'; } return '${destination.title}, ${destination.displayLocation}'; } }