map_launcher 7.0.0
map_launcher: ^7.0.0 copied to clipboard
Map Launcher is a flutter plugin to find available maps installed on a device and launch them with a marker or show directions.
7.0.0 #
See the 6 → 7 migration guide before upgrading.
Breaking changes #
- Remove
MapApp.alland bundled Android provider queries. Supply discovery lists and app-owned native declarations; bareshow()keeps Apple/Google defaults. - Return metadata-only
AvailableMapfromgetAvailableMaps. Request-boundSupportedMap.show()no longer accepts extras, its unnamed constructor is removed, and equality is now identity-based. - Require explicit
show(map: ...)for rawextra; useproviderExtrasfor discovery or automatic selection. Reject conflicting generated URL parameters. - Copy extras and waypoints into immutable snapshots; request constructors are
no longer
const. - Report unsupported launches as
MapLaunchException, with nullableurl. Retry only confirmed failed handoffs; blocked or unknown outcomes stop retries. - Reject unsupported origins, modes, markers and stops rather than dropping them. See provider restrictions.
- Enforce Google's 2,048-character HTTPS limit and waypoint limits: nine stops for Android package-targeted or desktop launches, three for mobile unpinned HTTPS. Never truncate routes.
- Reject non-finite coordinates and blank searches.
- Correct the declared Flutter minimum from 3.3 to 3.41, matching Dart 3.11.
Added #
- Add
providerExtras,NaverExtraandBaiduExtra, plus optional Naver/Baidu constructor attribution. Missing caller options do not block discovery or launch. - Add
MapLaunchException.reasonandissues, provider validation/default hooks, and custom text-origin parameter names. Platform adapters can identify confirmed failed handoffs withMapHandoffException.
Fixed #
- Use the same prepared options for discovery and launch, including custom maps.
- Try Apple then Google on iOS, Google then Apple elsewhere, without waiting for detection. Explicit selection never changes provider. Android browser fallbacks remove the package target.
- Preserve URL bytes when appending extras and avoid duplicate parameters.
- Correct route and marker URLs for Amap, HERE, Kakao, MAPS.ME, Mapy, Mappls, OsmAnd and Neshan, including spaces and plus signs in MAPS.ME labels.
- Preserve Google Maps text origins in iOS URLs. Select HTTPS for universal-only extras, validate their companion fields, and omit unsupported marker zoom.
- Preserve the empty origin slot in Yandex Maps route URLs so the first waypoint is not serialized as the origin (#228). Current-location routing with waypoints still needs native-app verification.
- Fix CoPilot marker coordinates, blank Naver marker names, and Petal mode/label encoding. Preserve Baidu caller descriptions and named origins.
- Correct Air Navigation Pro and Magic Earth App Store links and icon lookup IDs.
- Restore Android build compatibility with Flutter 3.41 / AGP 8 while retaining AGP 9 support (#227).
- Prevent shell expansion of Windows URLs and report blocked browser popups.
- Bundle the iOS privacy manifest through CocoaPods and Swift Package Manager.
- Fix example validation, stale results and error recovery. Allow optional origins and provider-default travel modes.
Deprecated #
- Deprecate
opensNatively/opensInBrowser; useisInstalled/hasUniversalLinkas availability hints, not guarantees of which app will open.
Tooling and documentation #
- Update development and example tooling to Flutter 3.47.6 / Dart 3.13.5, AGP 9.1.0, Kotlin 2.4.0 and Gradle 9.3.1. Set example deployment targets to iOS 15 / macOS 12 and retain CI coverage for Flutter 3.41 / AGP 8.
- Add provider references with source links, supported parameters and limitations, including research on requested apps from #111 (not new integrations).
- Fix cached icon fetching and ImageMagick support outside macOS.
6.0.0 #
Add your own map apps, ship only the maps you use, and launch them in one line.
Maps are now MapApp objects instead of enum values. Subclass MapApp to
add any map app without forking the plugin. Only the maps you reference are
retained in Dart release code; native manifest entries are separate.
And discovery results are directly launchable:
maps.first.show().
See MIGRATION.md for the full 5.x → 6.0 guide.
New Features:
- Custom maps: subclass
MapAppto add any map app (regional, proprietary, internal) without forking the plugin. Works everywhere a built-in map does, including discovery and launching. - Tree-shakeable maps: referencing
MapApp.wazecompiles in only Waze's Dart code, strings, and icon. Unreferenced maps are stripped from Dart AOT snapshots, not from native manifests. Bareshow()also retains its defaults. - Launchable discovery results:
final maps = await request.getSupportedMaps([...])thenmaps.first.show(). No more request/mapType plumbing in pickers. - Misconfiguration warning (iOS): debug builds print a warning when a map
passed to discovery is missing from
LSApplicationQueriesSchemes, naming the exact scheme to add. Previously indistinguishable from "not installed". - Official app icons: 256×256 PNG icons sourced from iTunes and Google Play
Store APIs, embedded as
Uint8List. Noflutter_svgdependency needed. Rundart run tool/fetch_icons.dartto refresh. - Generic native layer: iOS/Android detection is driven entirely from Dart. The Android manifest still declares map-specific package queries.
Breaking Changes:
MapTypeenum →MapAppobjects:MapType.google→MapApp.google. Dot-shorthand call sites likeshow(map: .google)compile unchanged.- Discovery takes an explicit list:
getSupportedMaps()→getSupportedMaps([.apple, .google, .waze]),getAvailableMaps()→getAvailableMaps(myMaps). UseMapApp.allfor every supported map (this opts out of tree shaking). - Icons are PNG bytes, not SVG assets:
SvgPicture.asset(map.icon)→Image.memory(map.iconBytes). No extra dependencies needed.flutter_svgis no longer required. SupportedMap:map.mapType→map.map(aMapApp),map.displayName→map.name. Entries returned by a request are directly launchable viamap.show().- Persisted map names:
MapType.values.byName(saved)→myMaps.firstWhere((m) => m.id == saved).MapApp.idmatches the old enum names, so stored preferences keep working. - Removed maps:
truckmeister(discontinued by Flitsmeister) andspedionNavigation(integrated module in the SPEDION fleet app, not a standalone map) have been removed. Use the customMapAppsubclass feature to add them back if needed.
5.0.1 #
- fix: remove
dart:iofrom web import
5.0.0 #
New Features:
- Desktop & web support: macOS, Windows, Linux, and web platforms via universal links (HTTPS URLs).
- Scheme-to-universal fallback: On mobile, if a native app scheme URL fails (app not installed), automatically falls back to the universal HTTPS URL.
- Search-based markers and directions: Google and Apple Maps support text queries for both markers and destinations.
- URL inspection:
getUrl(),getUniversalUrl(), andgetSchemeUrl()let you preview URLs without launching. - Extras system: Type-safe, map-specific parameters via
GoogleExtra,AppleExtra,WazeExtra,TencentExtra,YandexNaviExtra. getSupportedMaps(): Per-request map discovery that respects capabilities (marker support, search support, waypoint support).getAvailableMaps(): Platform-wide map discovery returning both installed and universal-link maps.- Store URLs on
MapType:appStoreUrlandplayStoreUrlgetters for linking to app store pages. MapLaunchException: Typed exception with the URL and underlying cause when a launch fails.
Breaking Changes:
- New builder-style API:
MapLauncher.showMarker()/MapLauncher.showDirections()→MapLauncher.marker(...).show()/MapLauncher.directions(...).show(). Methods onAvailableMapare gone too. AvailableMap→SupportedMap: No longer carriesmapNameoricon. Those are now properties onMapTypeitself (MapType.displayName,MapType.icon).SupportedMaponly pairs aMapTypewithisInstalled.Coords→LocationCoords:Coords(latitude, longitude)→.coords(lat, lng, title: '...'). Title moved fromshowMarker()into the location.latitude/longitudefields renamed tolat/lng.Waypointremoved: UseLocationCoordsdirectly in the waypoints list.DirectionsMode→TravelMode: Same values (driving, walking, transit, bicycling), renamed.extraParams→extra: Now accepts typed extras (GoogleExtra,AppleExtra, etc.) or rawMap<String, String>. Passed viashow(extra: ...)instead of the old method parameter.MapTypeenum values reordered:googleis now beforegoogleGo. Enum carriesdisplayName,playStoreId,appStoreId,hasUniversalLink,icon.MapLauncher.getAvailableMaps()→MapLauncher.getAvailableMaps(): Same name, but returnsList<SupportedMap>instead ofList<AvailableMap>.isMapAvailable()removed: UsegetSupportedMaps()on a request instead.- Minimum SDK: Dart 3.11+, Flutter 3.3+.
Docs:
- Added
CONTRIBUTING.mdwith step-by-step guide for adding new map providers.
4.6.0 #
4.0.0 #
- Recreate the plugin with new structure to prepare for multiplatform support
- Bump android min sdk to 21
3.5.0 #
- Add Mappls MapmyIndia (@Ajaay7 & @Saksham66)
3.4.0 #
- Remove support for apps using android v1 embedding
3.3.1 #
- Remove support for Maps.me on android as it stopped working a while ago
3.3.0 #
- Add privacy manifest
- Bump flutter min version to 3.13.0
- Bump dart min version to 3.1.0
3.2.0 #
- Add Mapy.cz (@TheHumr)
3.1.0 #
- Add Naver Map, KakaoMap and TMAP (@trentcharlie & @JulyWitch)
- Add support for AGP 7.4.2 and up (@bitsydarel)
3.0.1 #
- Rename Sygic to Sygic Truck
- Remove deprecated
launchMapmethod. useshowMarkerinstead
3.0.0 #
BREAKING: waypoints parameter now uses List<Waypoint> instead of `List
- Add CoPilot map (@tjeffree)
- Add Go Fleet and Sygic Truck maps (@amrahmed242)
- Add Flitsmeister and Truckmeister (@robinbonnes & @frankvollebregt)
- Add waypoint labels for Apple Maps (@manafire)
- Add support for gradle 8 (@m-derakhshi)
- Fix future not completing on iOS
2.5.0+1 #
- Update screenshots
2.5.0 #
- Add support for waypoints on Apple Maps
2.4.0 #
- Bump kotlin version to 1.5.31
2.3.0+1 #
- Cleanup
2.3.0 #
- Add TomTom Go #125 (@frankvollebregt)
2.2.3 #
- Fix empty title in Google Maps
2.2.2 #
- Fix
originTitleonshowDirectionsmethod
2.2.1+2 #
- Add dartdoc comments
- Update
directions_url.dartformatting - Update broken link in the README
2.2.1+1 #
- Update README with information that title should now work in Google Maps for Android starting from v11.12
2.2.1 #
- Update Petal maps icon
2.2.0 #
- Add Petal maps #103 (@mericgerceker)
2.1.2 #
- Replace jcenter with mavenCentral #100
2.1.1 #
- Fix iOS crash when using unsupported MapTypes #83 (@bridystone)
2.1.0 #
- Add OSMAnd+ #82 (@bridystone)
- Add Here WeGo #77 (@aleksandr-m)
- Add zoom level for OSMAnd on iOS #79 (@bridystone)
- Fix deprecation compiler warning in Xcode #78 (@bridystone)
- Bump minimum iOS version to 10
2.0.0+1 #
- Fix formatting
2.0.0 #
- Stable null safety
2.0.0-nullsafety.0 #
- Migrate to null safety
- Thanks to @LDevineau-eVtech
1.1.3+1 #
- Add warning for v1.1.3
1.1.3 #
Breaking change! See here for migration
- Fix Android 11 not showing installed maps #58
- Thanks to @BasPhair, @olsisaqe
1.1.2 #
- Fix Tencent Maps and 2GIS url scheme on ios #56
1.1.1 #
- Add
extraParamsoption to support passing additional query parameters that might be needed like api keys etc
1.1.0 #
- Add support for Tencent (QQ Maps)
1.0.0 #
- BREAKING CHANGE: not depending on flutter_svg anymore. See README for migration
- Add support for Google Maps GO
- Under the hood changes
- Thanks to @andoni97, @Pavel-Sulimau, @grinder15 for contribution
0.12.2 #
- Add import fallback for
#import <map_launcher/map_launcher-Swift.h> - Thanks to @fisherjoe
0.12.1 #
- Fix default zoom level
0.12.0 #
- Add support for 2GIS
0.11.0 #
- Add waypoints for Google Maps
0.10.0 #
- Add zoom parameter
0.9.0 #
- Add showDirections method
- Update example app
0.8.2 #
- Update flutter_svg constraint
Thanks to @tuarrep and @jcsena
0.8.1 #
- Fix #31
Thanks to @LeonidVeremchuk
0.8.0 #
- Add support for android embedding v2
0.7.1 #
- Add constraint for flutter_svg
0.7.0 #
- Replace png icons with svgs
Thanks to @shinsenter
0.6.0 #
- Add support for Maps.Me and OsmAnd
Thanks to @gsi-yoan and @gsi-alejandrogomez
0.5.0 #
- Add support for Citymapper
Thanks to @Kiruel
0.4.5 #
- Fix Google Maps title issue on iOS
Thanks to @illiashvedov
0.4.4 #
- Specify swift version in map_launcher.podspec file
0.4.3 #
- Add license
0.4.2 #
- Add code to show title in Google Maps for Android. Should work once fixed in Google Maps. Update README.
0.4.1 #
- Update README file. Remove author field from pubspec.yaml
0.4.0 #
- Added support for Yandex Maps and Yandex Navigator
Updated icons
0.3.2 #
- Fixes #1 'MKCoordinateRegionMake' is unavailable in Swift
Thanks to @diegogarciar
0.3.1 #
- Throw a PlatformException if map is not installed
0.3.0 #
- Added Waze support
0.2.0 #
- Added method to check if map is available
0.1.3 #
- Added icons for maps
- Added iOS gif to README
0.1.2 #
- Migrate to AndroidX
0.1.1 #
- Update description in pubspec.yaml
0.1.0 #
- Get available maps on iOS and Android
- Launch maps with a marker
