A flutter plugin for displaying yandex maps on iOS and Android.
Disclaimer: This project uses Yandex Mapkit which belongs to Yandex
When using Mapkit refer to these terms of use
- Go to https://developer.tech.yandex.com
- Create a
MapKit mobile SDK
key
- Add
import YandexMapsMobile
toios/Runner/AppDelegate.swift
- Add
YMKMapKit.setApiKey("YOUR_API_KEY")
insidefunc application
inios/Runner/AppDelegate.swift
- Specify your API key in the application delegate
ios/Runner/AppDelegate.swift
- For Flutter version less than 1.22 add
<key>io.flutter.embedded_views_preview</key> <true/>
inside<dict>
tag inios/Runner/Info.plist
- Uncomment
platform :ios, '9.0'
inios/Podfile
ios/Runner/AppDelegate.swift
:
For Swift 4.0 and lesser
import UIKit
import Flutter
import YandexMapsMobile
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?
) -> Bool {
YMKMapKit.setLocale("YOUR_LOCALE") // Your preferred language. Not required, defaults to system language
YMKMapKit.setApiKey("YOUR_API_KEY") // Your generated API key
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
For Swift 4.2 and greater
import UIKit
import Flutter
import YandexMapsMobile
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
YMKMapKit.setLocale("YOUR_LOCALE") // Your preferred language. Not required, defaults to system language
YMKMapKit.setApiKey("YOUR_API_KEY") // Your generated API key
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
- Add dependency
implementation 'com.yandex.android:maps.mobile:4.0.0-full'
toandroid/app/build.gradle
- Add permissions
<uses-permission android:name="android.permission.INTERNET"/>
and<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
toandroid/app/src/main/AndroidManifest.xml
- Add
import com.yandex.mapkit.MapKitFactory;
toandroid/app/src/main/.../MainActivity.java
/android/app/src/main/.../MainActivity.kt
MapKitFactory.setApiKey("YOUR_API_KEY");
inside methodonCreate
inandroid/app/src/main/.../MainActivity.java
/android/app/src/main/.../MainActivity.kt
- Specify your API key in the application delegate
android/app/src/main/.../MainActivity.java
/android/app/src/main/.../MainActivity.kt
- Ensure that your
com.android.tools.build:gradle
version is below or equals 4.0.2
android/app/build.gradle
:
dependencies {
implementation 'com.yandex.android:maps.mobile:4.0.0-full'
}
android/app/src/main/.../MainActivity.java
:
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.GeneratedPluginRegistrant;
import com.yandex.mapkit.MapKitFactory;
public class MainActivity extends FlutterActivity {
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
MapKitFactory.setLocale("YOUR_LOCALE"); // Your preferred language. Not required, defaults to system language
MapKitFactory.setApiKey("YOUR_API_KEY"); // Your generated API key
super.configureFlutterEngine(flutterEngine);
}
}
android/app/src/main/.../MainActivity.kt
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
import com.yandex.mapkit.MapKitFactory
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
MapKitFactory.setLocale("YOUR_LOCALE") // Your preferred language. Not required, defaults to system language
MapKitFactory.setApiKey("YOUR_API_KEY") // Your generated API key
super.configureFlutterEngine(flutterEngine)
}
}
For usage examples refer to example app
This project only supports Android V2 embedding. V1 support has been completly dropped. If you are creating a new flutter project then you are automatically using V2 and don't have to worry. Other projects are strongly recommended to migrate to V2. See this page for more details.
YandexMapkit always works with one language only.
Due to native constraints after the application is launched it can't be changed.
Currently native library doesn't support Silicon Mac.
If you receive this type of error
ld: in /.../ios/Pods/YandexMapsMobile/YandexMapsMobile.framework/YandexMapsMobile(YMKRouteView_Binding.mm.o), building for iOS Simulator, but linking in object file built for iOS, file '/.../ios/Pods/YandexMapsMobile/YandexMapsMobile.framework/YandexMapsMobile' for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Add in your projects Build Settings
in section Excluded Architectures
for Debug
this line - arm64
This way XCode won't try to build for Silicon Macs iOS Simulators
By default android views are rendered using Hybrid Composition. To render the YandexMap widget on Android using Virtual Display(old composition), set AndroidYandexMap.useAndroidViewSurface to false.
AndroidYandexMap.useAndroidViewSurface = false;
- iOS Support
- Android Support
- Working with Placemarks/Polylines/Polygons/Circles - adding, updating, removing, tap events, styling
- Working with collections of map objects
- Working with clusters
- Moving around the map
- Setting map bounds
- Showing current user location
- Styling the map
- Address suggestions
- Basic driving routing
- Basic address direct/reverse search