1import 'package:navigine_sdk/navigine_sdk.dart';
9 LocationManager? _locationManager;
10 Location? _currentLocation;
12 LocationManagerExample() {
19 void _initializeSdk() {
23 _sdk = NavigineSdk.getInstance();
28 _sdk?.setUserHash(
'USER-HASH-HERE');
33 _sdk?.setServer(
'https://custom.navigine.com');
38 _locationManager = _sdk?.getLocationManager();
41 if (_locationManager !=
null) {
42 print(
'LocationManager successfully initialized');
45 print(
'Error initializing SDK: $e');
52 void demonstrateLocationManagerMethods() {
53 if (_locationManager ==
null) {
54 print(
'LocationManager not initialized');
60 _locationManager!.addLocationListener(
this);
65 _locationManager!.setLocationId(12345);
70 int currentLocationId = _locationManager!.getLocationId();
71 print(
'Current location ID: $currentLocationId');
76 _locationManager!.setLocationUpdateInterval(600);
81 _locationManager!.commitChanges();
93 void demonstrateLocationUsage(Location location) {
96 int locationId = location.getId();
97 print(
'Location ID: $locationId');
102 int version = location.getVersion();
103 print(
'Location version: $version');
108 String? name = location.getName();
109 print(
'Location name: $name');
114 String? description = location.getDescript();
115 print(
'Location description: $description');
120 bool isModified = location.getModified();
121 print(
'Location modified: $isModified');
127 print(
'Available graph tags: $graphTags');
132 if (graphTags.isNotEmpty) {
134 if (elevationGraph !=
null) {
135 demonstrateElevationGraphUsage(elevationGraph);
142 List<Category> categories = location.getCategories();
143 print(
'Number of categories: ${categories.length}');
148 if (categories.isNotEmpty) {
149 Category? category = location.
getCategoryById(categories.first.getId());
150 if (category !=
null) {
151 demonstrateCategoryUsage(category);
158 List<Sublocation> sublocations = location.getSublocations();
159 print(
'Number of sublocations: ${sublocations.length}');
164 if (sublocations.isNotEmpty) {
166 if (sublocation !=
null) {
167 demonstrateSublocationUsage(sublocation);
176 void demonstrateCategoryUsage(Category category) {
179 int categoryId = category.getId();
180 print(
'Category ID: $categoryId');
185 String? categoryName = category.getName();
186 print(
'Category name: $categoryName');
191 String? imageUrl = category.getImageUrl();
192 if (imageUrl !=
null) {
193 print(
'Category image URL: $imageUrl');
201 void demonstrateSublocationUsage(Sublocation sublocation) {
204 int sublocationId = sublocation.getId();
205 print(
'Sublocation ID: $sublocationId');
210 String? sublocationName = sublocation.getName();
211 print(
'Sublocation name: $sublocationName');
216 String? sublocationDescription = sublocation.getDescript();
217 print(
'Sublocation description: $sublocationDescription');
222 int categoryId = sublocation.getCategoryId();
223 print(
'Sublocation category ID: $categoryId');
228 int locationId = sublocation.getLocation();
229 print(
'Sublocation location ID: $locationId');
234 double width = sublocation.getWidth();
235 print(
'Sublocation width: $width meters');
240 double height = sublocation.getHeight();
241 print(
'Sublocation height: $height meters');
246 double? altitude = sublocation.getAltitude();
247 if (altitude !=
null) {
248 print(
'Sublocation altitude: $altitude meters');
254 double azimuth = sublocation.getAzimuth();
255 print(
'Sublocation azimuth: $azimuth degrees');
260 GlobalPoint originPoint = sublocation.getOriginPoint();
261 print(
'Sublocation origin point: ${originPoint.getLat()}, ${originPoint.getLon()}');
266 String levelId = sublocation.getLevelId();
267 print(
'Sublocation level ID: $levelId');
272 String externalId = sublocation.getExternalId();
273 print(
'Sublocation external ID: $externalId');
278 String buildingName = sublocation.getBuildingName();
279 print(
'Sublocation building name: $buildingName');
284 List<ReferencePoint> referencePoints = sublocation.getReferencePoints();
285 print(
'Number of reference points: ${referencePoints.length}');
290 List<Venue> venues = sublocation.getVenues();
291 print(
'Number of venues: ${venues.length}');
296 List<Zone> zones = sublocation.getZones();
297 print(
'Number of zones: ${zones.length}');
302 List<Beacon> beacons = sublocation.getBeacons();
303 print(
'Number of beacons: ${beacons.length}');
308 List<Wifi> wifis = sublocation.getWifis();
309 print(
'Number of WiFi access points: ${wifis.length}');
314 List<Eddystone> eddystones = sublocation.getEddystones();
315 print(
'Number of Eddystone beacons: ${eddystones.length}');
320 Graph? graph = sublocation.
getGraph();
322 demonstrateGraphUsage(graph);
328 Graph? graphByTag = sublocation.
getGraph(
"main");
329 if (graphByTag !=
null) {
330 print(
'Found graph with tag "main"');
331 demonstrateGraphUsage(graphByTag);
337 if (venues.isNotEmpty) {
338 Venue? venueById = sublocation.
getVenueById(venues.first.getId());
339 if (venueById !=
null) {
340 print(
'Found venue by ID: ${venueById.getId()}');
341 demonstrateVenueUsage(venueById);
348 if (zones.isNotEmpty) {
349 Zone? zoneById = sublocation.
getZoneById(zones.first.getId());
350 if (zoneById !=
null) {
351 print(
'Found zone by ID: ${zoneById.getId()}');
352 demonstrateZoneUsage(zoneById);
359 GlobalPoint globalPoint = GlobalPoint(55.7558, 37.6176);
360 LocationPoint localPoint = sublocation.
globalToLocal(globalPoint);
361 print(
'Global point ${globalPoint.getLat()}, ${globalPoint.getLon()} converted to local: ${localPoint.getX()}, ${localPoint.getY()}');
366 LocationPoint localPoint2 = LocationPoint(100.0, 200.0);
367 GlobalPoint globalPoint2 = sublocation.
localToGlobal(localPoint2);
368 print(
'Local point ${localPoint2.getX()}, ${localPoint2.getY()} converted to global: ${globalPoint2.getLat()}, ${globalPoint2.getLon()}');
373 ImageWrapper? image = sublocation.
getImage(1024);
375 print(
'Sublocation image obtained with max texture size 1024');
383 void demonstrateVenueUsage(Venue venue) {
386 int venueId = venue.getId();
387 print(
'Venue ID: $venueId');
392 int locationId = venue.getLocationId();
393 print(
'Venue location ID: $locationId');
398 int sublocationId = venue.getSublocationId();
399 print(
'Venue sublocation ID: $sublocationId');
404 String? venueName = venue.getName();
405 print(
'Venue name: $venueName');
410 String? phone = venue.getPhone();
411 print(
'Venue phone: $phone');
416 String? venueDescription = venue.getDescript();
417 print(
'Venue description: $venueDescription');
422 String? alias = venue.getAlias();
423 print(
'Venue alias: $alias');
428 int categoryId = venue.getCategoryId();
429 print(
'Venue category ID: $categoryId');
434 String? imageUrl = venue.getImageUrl();
435 if (imageUrl !=
null) {
436 print(
'Venue image URL: $imageUrl');
442 Point? point = venue.getPoint();
444 demonstratePointUsage(point);
452 void demonstrateZoneUsage(Zone zone) {
455 int zoneId = zone.getId();
456 print(
'Zone ID: $zoneId');
461 int locationId = zone.getLocationId();
462 print(
'Zone location ID: $locationId');
467 int sublocationId = zone.getSublocationId();
468 print(
'Zone sublocation ID: $sublocationId');
473 String? zoneName = zone.getName();
474 print(
'Zone name: $zoneName');
479 String? zoneDescription = zone.getDescript();
480 print(
'Zone description: $zoneDescription');
485 int categoryId = zone.getCategoryId();
486 print(
'Zone category ID: $categoryId');
491 String? alias = zone.getAlias();
492 print(
'Zone alias: $alias');
497 String? color = zone.getColor();
498 print(
'Zone color: $color');
503 List<Point> polygon = zone.getPolygon();
504 print(
'Zone polygon points: ${polygon.length}');
511 void demonstrateBeaconUsage(Beacon beacon) {
514 Point? point = beacon.getPoint();
516 demonstratePointUsage(point);
522 int locationId = beacon.getLocationId();
523 print(
'Beacon location ID: $locationId');
528 int sublocationId = beacon.getSublocationId();
529 print(
'Beacon sublocation ID: $sublocationId');
534 String? beaconName = beacon.getName();
535 print(
'Beacon name: $beaconName');
540 int major = beacon.getMajor();
541 print(
'Beacon major: $major');
546 int minor = beacon.getMinor();
547 print(
'Beacon minor: $minor');
552 String? uuid = beacon.getUuid();
553 print(
'Beacon UUID: $uuid');
558 int? power = beacon.getPower();
560 print(
'Beacon power: $power');
566 TransmitterStatus status = beacon.getStatus();
567 print(
'Beacon status: $status');
574 void demonstrateWifiUsage(Wifi wifi) {
577 Point? point = wifi.getPoint();
579 demonstratePointUsage(point);
585 int locationId = wifi.getLocationId();
586 print(
'WiFi location ID: $locationId');
591 int sublocationId = wifi.getSublocationId();
592 print(
'WiFi sublocation ID: $sublocationId');
597 String? wifiName = wifi.getName();
598 print(
'WiFi name: $wifiName');
603 String? mac = wifi.getMac();
604 print(
'WiFi MAC: $mac');
609 TransmitterStatus status = wifi.getStatus();
610 print(
'WiFi status: $status');
617 void demonstrateEddystoneUsage(Eddystone eddystone) {
620 Point? point = eddystone.getPoint();
622 demonstratePointUsage(point);
628 int locationId = eddystone.getLocationId();
629 print(
'Eddystone location ID: $locationId');
634 int sublocationId = eddystone.getSublocationId();
635 print(
'Eddystone sublocation ID: $sublocationId');
640 String? eddystoneName = eddystone.getName();
641 print(
'Eddystone name: $eddystoneName');
646 String? namespaceId = eddystone.getNamespaceId();
647 print(
'Eddystone namespace ID: $namespaceId');
652 String? instanceId = eddystone.getInstanceId();
653 print(
'Eddystone instance ID: $instanceId');
658 int? power = eddystone.getPower();
660 print(
'Eddystone power: $power');
666 TransmitterStatus status = eddystone.getStatus();
667 print(
'Eddystone status: $status');
674 void demonstratePointUsage(Point point) {
677 double x = point.getX();
678 print(
'Point X: $x');
683 double y = point.getY();
684 print(
'Point Y: $y');
691 void demonstrateGraphUsage(Graph graph) {
694 List<GraphVertex> vertices = graph.getVertices();
695 print(
'Number of graph vertices: ${vertices.length}');
700 List<GraphEdge> edges = graph.getEdges();
701 print(
'Number of graph edges: ${edges.length}');
708 void demonstrateGraphVertexUsage(GraphVertex vertex) {
711 int vertexId = vertex.getId();
712 print(
'Vertex ID: $vertexId');
717 Point? point = vertex.getPoint();
719 demonstratePointUsage(point);
725 String? name = vertex.getName();
726 print(
'Vertex name: $name');
731 bool isExternal = vertex.getIsExternal();
732 print(
'Vertex is external: $isExternal');
737 bool isElevation = vertex.getIsElevation();
738 print(
'Vertex is elevation: $isElevation');
745 void demonstrateGraphEdgeUsage(GraphEdge edge) {
748 double weight = edge.getWeight();
749 print(
'Edge weight: $weight');
754 int dst = edge.getDst();
755 print(
'Edge destination ID: $dst');
760 int src = edge.getSrc();
761 print(
'Edge source ID: $src');
766 int weightCoef = edge.getWeightCoef();
767 print(
'Edge weight coefficient: $weightCoef');
774 void demonstrateElevationGraphUsage(ElevationGraph elevationGraph) {
777 List<GraphEdge> edges = elevationGraph.getEdges();
778 print(
'Number of elevation graph edges: ${edges.length}');
781 for (
int i = 0; i < edges.length; i++) {
782 GraphEdge edge = edges[i];
783 print(
'Elevation graph edge ${i + 1}:');
784 demonstrateGraphEdgeUsage(edge);
792 void demonstrateTransmitterStatus() {
795 print(
'Available transmitter statuses:');
796 print(
' - TransmitterStatus.active: ${TransmitterStatus.active}');
797 print(
' - TransmitterStatus.inactive: ${TransmitterStatus.inactive}');
805 if (_locationManager !=
null) {
808 _locationManager!.removeLocationListener(
this);
816 Future<void> runExample() async {
817 print(
'=== LocationManager Example ===');
819 demonstrateLocationManagerMethods();
820 demonstrateTransmitterStatus();
823 await Future.delayed(Duration(seconds: 2));
826 print(
'=== Example completed ===');
832 void onLocationLoaded(Location? location) {
833 print(
'Location loaded successfully');
834 _currentLocation = location;
835 if (location !=
null) {
836 demonstrateLocationUsage(location);
843 void onLocationUploaded(
int locationId) {
844 print(
'Location uploaded: $locationId');
850 void onLocationFailed(
int locationId, Object error) {
851 print(
'Failed to load location $locationId: $error');
861 static Future<void> initializeInFlutter() async {
862 print(
'=== LocationManager Initialization in Flutter ===');
864 final example = LocationManagerExample();
865 await example.runExample();
867 print(
'Initialization completed');
875 final example = LocationManagerExample();
876 await example.runExample();