inavi_global_navi_flutter 1.0.0
inavi_global_navi_flutter: ^1.0.0 copied to clipboard
NaviSDK (Orbis) Flutter plugin — Android (KMP) / iOS (Swift) navigation core APIs exposed via a single Dart surface.
iNavi Global Navigation SDK Plugin #
A Flutter plugin that wraps the iNavi NaviSDK Core for Android and iOS, exposing native map display, map controls, search, routing, and guidance UI through a single Dart API.
SDK App Key Required — An iNavi-issued app key must be configured on both platforms before the SDK can initialize. Contact visit visit the Maps Platform to request a key.
Features #
- Native map rendering via
NaviMapView(AndroidPlatformView/ iOSUiKitView) - SDK initialization with an event-driven readiness signal (
onInitEvent) - Map interactions: mode changes, tap events, camera move phase
- Location and country change events
- Route search and turn-by-turn guidance state streaming
- Unified Dart API backed by Android (Kotlin/KMP) and iOS (Swift) implementations
Requirements #
| Platform | Minimum version |
|---|---|
| Android | API 23 (Android 6.0) |
| iOS | 14.0 |
| Xcode | 16 or later |
| Flutter | 3.x |
Installation #
Add inavi_global_navi_flutter to your pubspec.yaml:
dependencies:
inavi_global_navi_flutter: ^1.0.0
Then run:
flutter pub get
Platform Setup #
Android #
1. Add the iNavi Maven repository
The Android SDK artifacts are served from the iNavi Artifactory repository. Add the repository to your host app's Gradle configuration.
In android/settings.gradle (or android/build.gradle for older project structures):
dependencyResolutionManagement {
repositories {
// ... other repositories
maven { url "https://repo.inavi.com/artifactory/navigation" }
}
}
2. Declare permissions
Add the following entries to android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
Request runtime location permission in your app before calling any navigation API.
3. Set the SDK app key
Inside the <application> element of android/app/src/main/AndroidManifest.xml:
<application ...>
<!-- ... -->
<meta-data
android:name="com.inavi.navisdk.appkey"
android:value="YOUR_APP_KEY_HERE" />
</application>
Replace YOUR_APP_KEY_HERE with your iNavi-issued app key.
iOS #
1. Add Info.plist entries
Add location usage descriptions and background modes to ios/Runner/Info.plist:
<!-- Location permission descriptions -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs your location to provide navigation guidance.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app needs your location in the background to continue navigation.</string>
<!-- Background modes required for navigation -->
<key>UIBackgroundModes</key>
<array>
<string>location</string>
<string>audio</string>
</array>
2. Set the SDK app key
In the same ios/Runner/Info.plist:
<key>INaviAppKey</key>
<string>YOUR_APP_KEY_HERE</string>
Replace YOUR_APP_KEY_HERE with your iNavi-issued app key.
3. Install CocoaPods dependencies
From the host app's ios/ directory, run:
cd ios
pod install --repo-update
The plugin podspec references Global-iNavi-Navigation-SDK from the public CocoaPods
CDN, so no additional source entry is required in your Podfile. The --repo-update
flag refreshes the local CDN cache to ensure the pinned version is available.
Bundled xcframeworks: iNaviNavigationSdk · NaviSDKIOS · NaviSDKMMC · NaviSDKROUTE · NaviSDKCore · MapLibre
Usage #
1. Import the package #
import 'package:inavi_global_navi_flutter/inavi_global_navi_flutter.dart';
2. Display the map #
Embed NaviMapView in your widget tree. The native view is created asynchronously;
use the onPlatformViewCreated callback to know when it is ready:
NaviMapView(
onPlatformViewCreated: (int viewId) {
// Native map view is ready.
},
)
3. Initialize the SDK #
Use NaviController.instance (a singleton) to interact with the SDK. Call
initializeNavi() after the map view is ready, and wait for the onInitEvent
stream before invoking any other API:
final navi = NaviController.instance;
late final StreamSubscription<InitEvent> _initSub;
@override
void initState() {
super.initState();
_initSub = navi.onInitEvent.listen((event) {
if (event.isSuccess) {
// SDK is ready — safe to call map/search/route/guidance APIs.
} else {
debugPrint('SDK init failed: ${event.errorCode} ${event.errorMessage}');
}
});
}
Future<void> _startSdk() async {
await navi.initializeNavi();
}
@override
void dispose() {
_initSub.cancel();
super.dispose();
}
initializeNavi() sends the initialization request to the native layer.
The onInitEvent stream emits the result asynchronously.
4. Listen to map and guidance events #
// Map tap
navi.onMapClickEvent.listen((event) {
final lat = event.latitude;
final lng = event.longitude;
});
// Camera move phase
navi.onMapMoveEvent.listen((event) { ... });
// Map mode change
navi.onMapModeEvent.listen((event) { ... });
// Guidance state (start / stop / reroute, etc.)
navi.onGuidanceStateEvent.listen((event) { ... });
// Country change
navi.onCountryEvent.listen((event) { ... });
Use only APIs and streams documented by the official NaviSDK guide. Undocumented or internal symbols may change without notice and are not supported.
Example App #
A complete integration example is available in the example/ directory. It covers
platform permission handling, SDK app key placement, initialization, search, routing,
guidance start/stop, and map controls.
cd example
flutter pub get
flutter run
Grant location permission on the device before running; the SDK requires it for positioning and navigation guidance.
Additional Information #
- SDK documentation: refer to the official iNavi NaviSDK guide for supported APIs, event payloads, and behavioral guarantees.
- Issues: report bugs or feature requests via the project issue tracker.
- App key requests: contact iNavi at https://www.inavi.com.
License #
See LICENSE for details.