visioglobe_flutter_plugin 0.0.1
visioglobe_flutter_plugin: ^0.0.1 copied to clipboard
A Flutter plugin providing an idiomatic Dart interface to the Visioglobe VisioMoveEssential Android SDK for indoor mapping and navigation.
Visioglobe Flutter Plugin #
A Flutter plugin for embedding and interacting with Visioglobe indoor maps, using the VisioMoveEssential (VME) SDK.
Phase 1 Capabilities #
| Feature | Description |
|---|---|
| Map Rendering | Embeds a fully interactive 3D Visioglobe map using a Flutter PlatformView. |
| Map Lifecycle | Subscribe to events like map loaded, view loaded, or initialization errors. |
| Camera Control | Animate the camera (pitch, bearing, altitude, target) and fetch the current camera context. |
| View Modes | Switch between standard (global) and floor-level view modes seamlessly. |
| Places API | Retrieve an immutable snapshot of every Place and Category; applications own search, filtering, ranking, and history. |
| Routing | Compute routes between origin and destinations, including multi-stop routes with custom accessibility. |
| Navigation | Trigger turn-by-turn guidance, receive instruction events, and configure the navigation header view. |
Installation Requirements #
Android Setup #
This plugin requires the native VisioMoveEssential.aar SDK.
- Download the AAR: Download
VisioMoveEssential.aar(v2.7.5 or later) from the Visioglobe portal. - Place the AAR: Copy the file into your Flutter app's android directory at:
android/app/libs/VisioMoveEssential.aar - Enable Jetifier: The Visioglobe SDK relies on older Android Support libraries in some places. You must enable Jetifier for your app. Open
android/gradle.propertiesand ensure the following lines are present:android.useAndroidX=true android.enableJetifier=true
iOS Setup #
(Coming in future phases)
Quick Start #
Embed a Visioglobe map in your app using the VisioglobeMap widget and control it using the VisioglobeController:
import 'package:flutter/material.dart';
import 'package:visioglobe_flutter_plugin/visioglobe_flutter_plugin.dart';
class MyMapScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return VisioglobeMap(
mapHash: 'your_map_hash_here',
mapSecretCode: 0,
onMapCreated: (VisioglobeController controller) {
controller.onLifecycleEvent.listen((event) async {
if (event == MapLifecycleEvent.dataLoaded) {
final places = await controller.getAllPlaces();
// Search and filtering belong to your application.
final cafes = places.where(
(place) => place.categoryIds.contains('Cafe'),
);
}
if (event == MapLifecycleEvent.viewLoaded) {
print('Map is ready for interaction!');
}
});
},
);
}
}