diff --git a/README.md b/README.md
index 97332b7..64a70f1 100644
--- a/README.md
+++ b/README.md
@@ -40,6 +40,7 @@ Currently supported maps:
KakaoMap
TMAP
Mapy.cz
+ Neshan Map
## Get started
@@ -188,6 +189,7 @@ if (await MapLauncher.isMapAvailable(MapType.google)) {
| `.flitsmeister` | ✓ | ✗ | always uses current location | ✗ | ✗ | ✗ | ✗ |
| `.truckmeister` | ✓ | ✗ | always uses current location | ✗ | ✗ | ✗ | ✗ |
| `.sygicTruck` | ✓ | ✗ | always uses current location | ✗ | ✗ | ✗ | ✗ |
+| `.neshan` | ✓ | ✗ | ✓ | ✗ | ✓ | ✗ | ✗ |
### Extra Params
It's possible to pass some map specific query params like api keys etc using `extraParams` option
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
index 912967e..a85a5a0 100644
--- a/android/src/main/AndroidManifest.xml
+++ b/android/src/main/AndroidManifest.xml
@@ -27,6 +27,7 @@
+
diff --git a/android/src/main/kotlin/com/alexmiller/map_launcher/MapLauncherPlugin.kt b/android/src/main/kotlin/com/alexmiller/map_launcher/MapLauncherPlugin.kt
index 9dcee03..0cedcaa 100644
--- a/android/src/main/kotlin/com/alexmiller/map_launcher/MapLauncherPlugin.kt
+++ b/android/src/main/kotlin/com/alexmiller/map_launcher/MapLauncherPlugin.kt
@@ -10,7 +10,7 @@ import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result
-private enum class MapType { google, googleGo, amap, baidu, waze, yandexNavi, yandexMaps, citymapper, osmand, osmandplus, doubleGis, tencent, here, petal, tomtomgo, copilot, sygicTruck, tomtomgofleet, flitsmeister, truckmeister, naver, kakao, tmap, mapyCz }
+private enum class MapType { google, googleGo, amap, baidu, waze, yandexNavi, yandexMaps, citymapper, osmand, osmandplus, doubleGis, tencent, here, petal, tomtomgo, copilot, sygicTruck, tomtomgofleet, flitsmeister, truckmeister, naver, kakao, tmap, mapyCz,neshan }
private class MapModel(val mapType: MapType, val mapName: String, val packageName: String, val urlPrefix: String) {
fun toMap(): Map {
@@ -62,7 +62,8 @@ class MapLauncherPlugin : FlutterPlugin, MethodCallHandler {
MapModel(MapType.naver, "Naver Map", "com.nhn.android.nmap", "nmap://"),
MapModel(MapType.kakao, "Kakao Maps", "net.daum.android.map", "kakaomap://"),
MapModel(MapType.tmap, "TMap", "com.skt.tmap.ku", "tmap://"),
- MapModel(MapType.mapyCz, "Mapy CZ", "cz.seznam.mapy", "https://")
+ MapModel(MapType.mapyCz, "Mapy CZ", "cz.seznam.mapy", "https://"),
+ MapModel(MapType.neshan, "Neshan Map", "org.rajman.neshan.traffic.tehran.navigator", "nshn.ir/")
)
private fun getInstalledMaps(): List {
diff --git a/assets/icons/neshan.svg b/assets/icons/neshan.svg
new file mode 100644
index 0000000..d76a921
--- /dev/null
+++ b/assets/icons/neshan.svg
@@ -0,0 +1,17 @@
+
+
diff --git a/example/pubspec.lock b/example/pubspec.lock
index 54ff0cb..82736ab 100644
--- a/example/pubspec.lock
+++ b/example/pubspec.lock
@@ -75,6 +75,30 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "10.0.4"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.3"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.1"
lints:
dependency: transitive
description:
@@ -89,39 +113,39 @@ packages:
path: ".."
relative: true
source: path
- version: "3.2.1"
+ version: "3.3.1"
matcher:
dependency: transitive
description:
name: matcher
- sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
+ sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev"
source: hosted
- version: "0.12.16"
+ version: "0.12.16+1"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
- sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
+ sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
url: "https://pub.dev"
source: hosted
- version: "0.5.0"
+ version: "0.8.0"
meta:
dependency: transitive
description:
name: meta
- sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
+ sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.12.0"
path:
dependency: transitive
description:
name: path
- sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
+ sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev"
source: hosted
- version: "1.8.3"
+ version: "1.9.0"
path_drawing:
dependency: transitive
description:
@@ -195,10 +219,10 @@ packages:
dependency: transitive
description:
name: test_api
- sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
+ sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
url: "https://pub.dev"
source: hosted
- version: "0.6.1"
+ version: "0.7.0"
vector_math:
dependency: transitive
description:
@@ -207,14 +231,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.4"
- web:
+ vm_service:
dependency: transitive
description:
- name: web
- sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
+ name: vm_service
+ sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
url: "https://pub.dev"
source: hosted
- version: "0.3.0"
+ version: "14.2.1"
xml:
dependency: transitive
description:
@@ -224,5 +248,5 @@ packages:
source: hosted
version: "5.4.1"
sdks:
- dart: ">=3.2.0-194.0.dev <4.0.0"
- flutter: ">=3.13.0"
+ dart: ">=3.3.0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"
diff --git a/ios/Classes/SwiftMapLauncherPlugin.swift b/ios/Classes/SwiftMapLauncherPlugin.swift
index 356d1f4..85b2568 100644
--- a/ios/Classes/SwiftMapLauncherPlugin.swift
+++ b/ios/Classes/SwiftMapLauncherPlugin.swift
@@ -25,6 +25,7 @@ private enum MapType: String {
case kakao
case tmap
case mapyCz
+ case neshan
func type() -> String {
return self.rawValue
@@ -72,7 +73,8 @@ private let maps: [Map] = [
Map(mapName: "Naver Map", mapType: MapType.naver, urlPrefix: "nmap://"),
Map(mapName: "Kakao Maps", mapType: MapType.kakao, urlPrefix: "kakaomap://"),
Map(mapName: "TMap", mapType: MapType.tmap, urlPrefix: "tmap://"),
- Map(mapName: "Mapy CZ", mapType: MapType.mapyCz, urlPrefix: "szn-mapy://")
+ Map(mapName: "Mapy CZ", mapType: MapType.mapyCz, urlPrefix: "szn-mapy://"),
+ Map(mapName: "Neshan Map", mapType: MapType.neshan, urlPrefix: "neshan://")
]
private func getMapByRawMapType(type: String) -> Map? {
diff --git a/lib/src/directions_url.dart b/lib/src/directions_url.dart
index 7b2ca39..7ebbe43 100644
--- a/lib/src/directions_url.dart
+++ b/lib/src/directions_url.dart
@@ -359,5 +359,28 @@ String getMapDirectionsUrl({
'source': 'coor',
},
);
+ case MapType.neshan:
+ if (Platform.isIOS) {
+ return Utils.buildUrl(
+ url: 'neshan://',
+ queryParams: {
+ 'origin': Utils.nullOrValue(
+ origin,
+ '${origin?.latitude},${origin?.longitude}',
+ ),
+ 'destination': '${destination.latitude},${destination.longitude}',
+ 'vehicle': directionsMode == DirectionsMode.driving ? 'd' : 'm',
+ ...(extraParams ?? {}),
+ },
+ );
+ }
+ return Utils.buildUrl(
+ url: 'https://nshn.ir/',
+ queryParams: {
+ 'origin': '${origin?.latitude},${origin?.longitude}',
+ 'destination': '${destination.latitude},${destination.longitude}',
+ 'vehicle': directionsMode == DirectionsMode.driving ? 'd' : 'm',
+ },
+ );
}
}
diff --git a/lib/src/marker_url.dart b/lib/src/marker_url.dart
index 1430ca6..d49cc90 100644
--- a/lib/src/marker_url.dart
+++ b/lib/src/marker_url.dart
@@ -336,5 +336,21 @@ String getMapMarkerUrl({
'source': 'coor',
},
);
+ case MapType.neshan:
+ if (Platform.isIOS) {
+ return Utils.buildUrl(
+ url: 'neshan://',
+ queryParams: {
+ 'destination': '${coords.latitude},${coords.longitude}',
+ },
+ );
+ }
+ return Utils.buildUrl(
+ url: 'https://nshn.ir',
+ queryParams: {
+ 'lat': '${coords.latitude}',
+ 'lng': '${coords.longitude}',
+ },
+ );
}
}
diff --git a/lib/src/models.dart b/lib/src/models.dart
index 96817e7..ed2e402 100644
--- a/lib/src/models.dart
+++ b/lib/src/models.dart
@@ -86,6 +86,8 @@ enum MapType {
/// MapyCZ
mapyCz,
+
+ neshan
}
/// Defines the supported modes of transportation for [showDirections]
diff --git a/pubspec.lock b/pubspec.lock
index ec12b14..92745d4 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -67,6 +67,30 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "10.0.4"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.3"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.1"
lints:
dependency: transitive
description:
@@ -79,34 +103,34 @@ packages:
dependency: transitive
description:
name: matcher
- sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
+ sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev"
source: hosted
- version: "0.12.16"
+ version: "0.12.16+1"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
- sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
+ sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
url: "https://pub.dev"
source: hosted
- version: "0.5.0"
+ version: "0.8.0"
meta:
dependency: transitive
description:
name: meta
- sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
+ sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
url: "https://pub.dev"
source: hosted
- version: "1.10.0"
+ version: "1.12.0"
path:
dependency: transitive
description:
name: path
- sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
+ sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev"
source: hosted
- version: "1.8.3"
+ version: "1.9.0"
sky_engine:
dependency: transitive
description: flutter
@@ -156,10 +180,10 @@ packages:
dependency: transitive
description:
name: test_api
- sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
+ sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
url: "https://pub.dev"
source: hosted
- version: "0.6.1"
+ version: "0.7.0"
vector_math:
dependency: transitive
description:
@@ -168,14 +192,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.4"
- web:
+ vm_service:
dependency: transitive
description:
- name: web
- sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
+ name: vm_service
+ sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
url: "https://pub.dev"
source: hosted
- version: "0.3.0"
+ version: "14.2.1"
sdks:
- dart: ">=3.2.0-194.0.dev <4.0.0"
- flutter: ">=3.13.0"
+ dart: ">=3.3.0 <4.0.0"
+ flutter: ">=3.18.0-18.0.pre.54"