2import 'package:navigine_sdk/navigine_sdk.dart';
10 LocationManager? _locationManager;
11 Location? _currentLocation;
13 LocationManagerExample() {
20 void _initializeSdk() {
24 _sdk = NavigineSdk.getInstance();
29 _sdk?.setUserHash(
'USER-HASH-HERE');
34 _sdk?.setServer(
'https://custom.navigine.com');
39 _locationManager = _sdk?.getLocationManager();
42 if (_locationManager !=
null) {
43 print(
'LocationManager successfully initialized');
46 print(
'Error initializing SDK: $e');
53 void demonstrateLocationManagerMethods() {
54 if (_locationManager ==
null) {
55 print(
'LocationManager not initialized');
61 _locationManager!.addLocationListener(
this);
66 _locationManager!.setLocationId(12345);
71 int currentLocationId = _locationManager!.getLocationId();
72 print(
'Current location ID: $currentLocationId');
77 _locationManager!.setLocationUpdateInterval(600);
82 _locationManager!.commitChanges();
94 void demonstrateLocationUsage(Location location) {
97 int locationId = location.getId();
98 print(
'Location ID: $locationId');
103 int version = location.getVersion();
104 print(
'Location version: $version');
109 String? name = location.getName();
110 print(
'Location name: $name');
115 String? description = location.getDescript();
116 print(
'Location description: $description');
121 bool isModified = location.getModified();
122 print(
'Location modified: $isModified');
128 print(
'Available graph tags: $graphTags');
133 if (graphTags.isNotEmpty) {
135 if (elevationGraph !=
null) {
136 demonstrateElevationGraphUsage(elevationGraph);
143 List<Category> categories = location.getCategories();
144 print(
'Number of categories: ${categories.length}');
149 if (categories.isNotEmpty) {
150 Category? category = location.
getCategoryById(categories.first.getId());
151 if (category !=
null) {
152 demonstrateCategoryUsage(category);
159 List<Sublocation> sublocations = location.getSublocations();
160 print(
'Number of sublocations: ${sublocations.length}');
165 if (sublocations.isNotEmpty) {
167 if (sublocation !=
null) {
168 demonstrateSublocationUsage(sublocation);
177 void demonstrateCategoryUsage(Category category) {
180 int categoryId = category.getId();
181 print(
'Category ID: $categoryId');
186 String? categoryName = category.getName();
187 print(
'Category name: $categoryName');
192 String? imageUrl = category.getImageUrl();
193 if (imageUrl !=
null) {
194 print(
'Category image URL: $imageUrl');
202 void demonstrateSublocationUsage(Sublocation sublocation) {
205 int sublocationId = sublocation.getId();
206 print(
'Sublocation ID: $sublocationId');
211 String? sublocationName = sublocation.getName();
212 print(
'Sublocation name: $sublocationName');
217 String? sublocationDescription = sublocation.getDescript();
218 print(
'Sublocation description: $sublocationDescription');
223 int categoryId = sublocation.getCategoryId();
224 print(
'Sublocation category ID: $categoryId');
229 int locationId = sublocation.getLocation();
230 print(
'Sublocation location ID: $locationId');
235 double width = sublocation.getWidth();
236 print(
'Sublocation width: $width meters');
241 double height = sublocation.getHeight();
242 print(
'Sublocation height: $height meters');
247 double? altitude = sublocation.getAltitude();
248 if (altitude !=
null) {
249 print(
'Sublocation altitude: $altitude meters');
255 double azimuth = sublocation.getAzimuth();
256 print(
'Sublocation azimuth: $azimuth degrees');
261 GlobalPoint originPoint = sublocation.getOriginPoint();
262 print(
'Sublocation origin point: ${originPoint.getLat()}, ${originPoint.getLon()}');
267 String levelId = sublocation.getLevelId();
268 print(
'Sublocation level ID: $levelId');
273 String externalId = sublocation.getExternalId();
274 print(
'Sublocation external ID: $externalId');
279 String buildingName = sublocation.getBuildingName();
280 print(
'Sublocation building name: $buildingName');
285 List<ReferencePoint> referencePoints = sublocation.getReferencePoints();
286 print(
'Number of reference points: ${referencePoints.length}');
291 List<Venue> venues = sublocation.getVenues();
292 print(
'Number of venues: ${venues.length}');
297 List<Zone> zones = sublocation.getZones();
298 print(
'Number of zones: ${zones.length}');
303 List<Beacon> beacons = sublocation.getBeacons();
304 print(
'Number of beacons: ${beacons.length}');
309 List<Wifi> wifis = sublocation.getWifis();
310 print(
'Number of WiFi access points: ${wifis.length}');
315 List<Eddystone> eddystones = sublocation.getEddystones();
316 print(
'Number of Eddystone beacons: ${eddystones.length}');
321 Graph? graph = sublocation.
getGraph();
323 demonstrateGraphUsage(graph);
329 Graph? graphByTag = sublocation.
getGraph(
"main");
330 if (graphByTag !=
null) {
331 print(
'Found graph with tag "main"');
332 demonstrateGraphUsage(graphByTag);
338 if (venues.isNotEmpty) {
339 Venue? venueById = sublocation.
getVenueById(venues.first.getId());
340 if (venueById !=
null) {
341 print(
'Found venue by ID: ${venueById.getId()}');
342 demonstrateVenueUsage(venueById);
349 if (zones.isNotEmpty) {
350 Zone? zoneById = sublocation.
getZoneById(zones.first.getId());
351 if (zoneById !=
null) {
352 print(
'Found zone by ID: ${zoneById.getId()}');
353 demonstrateZoneUsage(zoneById);
360 GlobalPoint globalPoint = GlobalPoint(55.7558, 37.6176);
361 LocationPoint localPoint = sublocation.
globalToLocal(globalPoint);
362 print(
'Global point ${globalPoint.getLat()}, ${globalPoint.getLon()} converted to local: ${localPoint.getX()}, ${localPoint.getY()}');
367 LocationPoint localPoint2 = LocationPoint(100.0, 200.0);
368 GlobalPoint globalPoint2 = sublocation.
localToGlobal(localPoint2);
369 print(
'Local point ${localPoint2.getX()}, ${localPoint2.getY()} converted to global: ${globalPoint2.getLat()}, ${globalPoint2.getLon()}');
374 ImageWrapper? image = sublocation.
getImage(1024);
376 print(
'Sublocation image obtained with max texture size 1024');
384 void demonstrateVenueUsage(Venue venue) {
387 int venueId = venue.getId();
388 print(
'Venue ID: $venueId');
393 int locationId = venue.getLocationId();
394 print(
'Venue location ID: $locationId');
399 int sublocationId = venue.getSublocationId();
400 print(
'Venue sublocation ID: $sublocationId');
405 String? venueName = venue.getName();
406 print(
'Venue name: $venueName');
411 String? phone = venue.getPhone();
412 print(
'Venue phone: $phone');
417 String? venueDescription = venue.getDescript();
418 print(
'Venue description: $venueDescription');
423 String? alias = venue.getAlias();
424 print(
'Venue alias: $alias');
429 int categoryId = venue.getCategoryId();
430 print(
'Venue category ID: $categoryId');
435 String? imageUrl = venue.getImageUrl();
436 if (imageUrl !=
null) {
437 print(
'Venue image URL: $imageUrl');
443 Point? point = venue.getPoint();
445 demonstratePointUsage(point);
453 void demonstrateZoneUsage(Zone zone) {
455 int? zoneGuid = zone.getGuid();
456 if (zoneGuid !=
null) {
457 print(
'Zone GUID: $zoneGuid');
463 int zoneId = zone.getId();
464 print(
'Zone ID: $zoneId');
469 int locationId = zone.getLocationId();
470 print(
'Zone location ID: $locationId');
475 int sublocationId = zone.getSublocationId();
476 print(
'Zone sublocation ID: $sublocationId');
481 String? zoneName = zone.getName();
482 print(
'Zone name: $zoneName');
487 String? zoneDescription = zone.getDescript();
488 print(
'Zone description: $zoneDescription');
493 int categoryId = zone.getCategoryId();
494 print(
'Zone category ID: $categoryId');
499 String? alias = zone.getAlias();
500 print(
'Zone alias: $alias');
505 Color color = zone.getColor();
506 print(
'Zone color: $color');
511 List<Point> polygon = zone.getPolygon();
512 print(
'Zone polygon points: ${polygon.length}');
519 void demonstrateBeaconUsage(Beacon beacon) {
522 Point? point = beacon.getPoint();
524 demonstratePointUsage(point);
530 int locationId = beacon.getLocationId();
531 print(
'Beacon location ID: $locationId');
536 int sublocationId = beacon.getSublocationId();
537 print(
'Beacon sublocation ID: $sublocationId');
542 String? beaconName = beacon.getName();
543 print(
'Beacon name: $beaconName');
548 int major = beacon.getMajor();
549 print(
'Beacon major: $major');
554 int minor = beacon.getMinor();
555 print(
'Beacon minor: $minor');
560 String? uuid = beacon.getUuid();
561 print(
'Beacon UUID: $uuid');
566 int? power = beacon.getPower();
568 print(
'Beacon power: $power');
574 TransmitterStatus status = beacon.getStatus();
575 print(
'Beacon status: $status');
582 void demonstrateWifiUsage(Wifi wifi) {
585 Point? point = wifi.getPoint();
587 demonstratePointUsage(point);
593 int locationId = wifi.getLocationId();
594 print(
'WiFi location ID: $locationId');
599 int sublocationId = wifi.getSublocationId();
600 print(
'WiFi sublocation ID: $sublocationId');
605 String? wifiName = wifi.getName();
606 print(
'WiFi name: $wifiName');
611 String? mac = wifi.getMac();
612 print(
'WiFi MAC: $mac');
617 TransmitterStatus status = wifi.getStatus();
618 print(
'WiFi status: $status');
625 void demonstrateEddystoneUsage(Eddystone eddystone) {
628 Point? point = eddystone.getPoint();
630 demonstratePointUsage(point);
636 int locationId = eddystone.getLocationId();
637 print(
'Eddystone location ID: $locationId');
642 int sublocationId = eddystone.getSublocationId();
643 print(
'Eddystone sublocation ID: $sublocationId');
648 String? eddystoneName = eddystone.getName();
649 print(
'Eddystone name: $eddystoneName');
654 String? namespaceId = eddystone.getNamespaceId();
655 print(
'Eddystone namespace ID: $namespaceId');
660 String? instanceId = eddystone.getInstanceId();
661 print(
'Eddystone instance ID: $instanceId');
666 int? power = eddystone.getPower();
668 print(
'Eddystone power: $power');
674 TransmitterStatus status = eddystone.getStatus();
675 print(
'Eddystone status: $status');
682 void demonstratePointUsage(Point point) {
685 double x = point.getX();
686 print(
'Point X: $x');
691 double y = point.getY();
692 print(
'Point Y: $y');
699 void demonstrateGraphUsage(Graph graph) {
702 List<GraphVertex> vertices = graph.getVertices();
703 print(
'Number of graph vertices: ${vertices.length}');
708 List<GraphEdge> edges = graph.getEdges();
709 print(
'Number of graph edges: ${edges.length}');
716 void demonstrateGraphVertexUsage(GraphVertex vertex) {
719 int vertexId = vertex.getId();
720 print(
'Vertex ID: $vertexId');
725 Point? point = vertex.getPoint();
727 demonstratePointUsage(point);
733 String? name = vertex.getName();
734 print(
'Vertex name: $name');
739 bool isExternal = vertex.getIsExternal();
740 print(
'Vertex is external: $isExternal');
745 bool isElevation = vertex.getIsElevation();
746 print(
'Vertex is elevation: $isElevation');
753 void demonstrateGraphEdgeUsage(GraphEdge edge) {
756 double weight = edge.getWeight();
757 print(
'Edge weight: $weight');
762 int dst = edge.getDst();
763 print(
'Edge destination ID: $dst');
768 int src = edge.getSrc();
769 print(
'Edge source ID: $src');
774 int weightCoef = edge.getWeightCoef();
775 print(
'Edge weight coefficient: $weightCoef');
782 void demonstrateElevationGraphUsage(ElevationGraph elevationGraph) {
785 List<GraphEdge> edges = elevationGraph.getEdges();
786 print(
'Number of elevation graph edges: ${edges.length}');
789 for (
int i = 0; i < edges.length; i++) {
790 GraphEdge edge = edges[i];
791 print(
'Elevation graph edge ${i + 1}:');
792 demonstrateGraphEdgeUsage(edge);
800 void demonstrateTransmitterStatus() {
803 print(
'Available transmitter statuses:');
804 print(
' - TransmitterStatus.active: ${TransmitterStatus.active}');
805 print(
' - TransmitterStatus.inactive: ${TransmitterStatus.inactive}');
813 if (_locationManager !=
null) {
816 _locationManager!.removeLocationListener(
this);
824 Future<void> runExample() async {
825 print(
'=== LocationManager Example ===');
827 demonstrateLocationManagerMethods();
828 demonstrateTransmitterStatus();
831 await Future.delayed(Duration(seconds: 2));
834 print(
'=== Example completed ===');
840 void onLocationLoaded(Location? location) {
841 print(
'Location loaded successfully');
842 _currentLocation = location;
843 if (location !=
null) {
844 demonstrateLocationUsage(location);
851 void onLocationUploaded(
int locationId) {
852 print(
'Location uploaded: $locationId');
858 void onLocationFailed(
int locationId, Object error) {
859 print(
'Failed to load location $locationId: $error');
869 static Future<void> initializeInFlutter() async {
870 print(
'=== LocationManager Initialization in Flutter ===');
872 final example = LocationManagerExample();
873 await example.runExample();
875 print(
'Initialization completed');
883 final example = LocationManagerExample();
884 await example.runExample();