9class RouteManagerExample {
11 LocationManager? _locationManager;
12 NavigationManager? _navigationManager;
13 RouteManager? _routeManager;
14 RouteListener? _routeListener;
16 RouteManagerExample() {
18 _setupRouteListener();
24 void _initializeSdk() {
28 _sdk = NavigineSdk.getInstance();
33 _sdk?.setUserHash(
"USER-HASH-HERE");
38 _sdk?.setServer(
"https://custom.navigine.com");
43 _locationManager = _sdk?.getLocationManager();
48 _navigationManager = _sdk?.getNavigationManager(_locationManager!);
53 _routeManager = _sdk?.getRouteManager(_locationManager!, _navigationManager!);
56 if (_locationManager !=
null && _navigationManager !=
null && _routeManager !=
null) {
57 print(
"LocationManager, NavigationManager and RouteManager successfully initialized");
60 print(
"Error initializing SDK: $e");
67 void _setupRouteListener() {
68 _routeListener = RouteListener(
70 onPathsUpdated: (List<RoutePath> paths) {
71 print(
"Routes updated successfully");
72 _demonstrateRoutePathUsage(paths);
81 void demonstrateRouteManagerMethods() {
82 if (_routeManager ==
null) {
83 print(
"RouteManager not initialized");
87 if (_routeListener ==
null)
return;
91 _routeManager!.addRouteListener(_routeListener!);
96 _routeManager!.setGraphTag(
"main");
101 String currentGraphTag = _routeManager!.getGraphTag();
102 print(
"Current graph tag: $currentGraphTag");
107 List<String> graphTags = _routeManager!.getGraphTags();
108 print(
"Available graph tags: $graphTags");
112 Point startPoint = Point(x: 10.0, y: 20.0);
113 Point endPoint = Point(x: 50.0, y: 60.0);
114 LocationPoint startLocationPoint = LocationPoint(point: startPoint, locationId: 12345, sublocationId: 1);
115 LocationPoint endLocationPoint = LocationPoint(point: endPoint, locationId: 12345, sublocationId: 1);
119 RoutePath routePath = _routeManager!.makeRoute(startLocationPoint, endLocationPoint);
120 print(
"Route created with length: ${routePath.length} meters");
125 List<LocationPoint> destinations = [
126 LocationPoint(point: Point(x: 30.0, y: 40.0), locationId: 12345, sublocationId: 1),
127 LocationPoint(point: Point(x: 70.0, y: 80.0), locationId: 12345, sublocationId: 1),
129 List<RoutePath> routePaths = _routeManager!.makeRoutes(startLocationPoint, destinations);
130 print(
"Created ${routePaths.length} routes");
135 _routeManager!.setTarget(endLocationPoint);
140 LocationPoint additionalTarget = LocationPoint(point: Point(x: 90.0, y: 100.0), locationId: 12345, sublocationId: 1);
141 _routeManager!.addTarget(additionalTarget);
146 _routeManager!.cancelTarget();
151 _routeManager!.clearTargets();
158 void _demonstrateRoutePathUsage(List<RoutePath> paths) {
159 for (
int i = 0; i < paths.length; i++) {
160 RoutePath path = paths[i];
161 print(
"=== Route Path ${i + 1} ===");
165 double length = path.length;
166 print(
"Route length: $length meters");
171 List<LocationPoint> points = path.points;
172 print(
"Route has ${points.length} points");
173 for (
int j = 0; j < points.length; j++) {
174 _demonstrateLocationPointUsage(points[j]);
180 List<RouteEvent> events = path.events;
181 print(
"Route has ${events.length} events");
182 for (
int j = 0; j < events.length; j++) {
183 _demonstrateRouteEventUsage(events[j]);
189 RoutePath? headPath = path.head(10.0);
190 if (headPath !=
null) {
191 print(
"Head path length: ${headPath.length} meters");
197 RoutePath? tailPath = path.tail(10.0);
198 if (tailPath !=
null) {
199 print(
"Tail path length: ${tailPath.length} meters");
208 void _demonstrateRouteEventUsage(RouteEvent event) {
211 RouteEventType type =
event.type;
212 print(
"Event type: $type");
217 int value =
event.value;
218 print(
"Event value: $value");
223 double distance =
event.distance;
224 print(
"Event distance: $distance meters");
229 RouteEvent newEvent = RouteEvent(type, value, distance);
230 print(
"Created new RouteEvent: $newEvent");
237 void demonstrateRouteEventTypes() {
240 print(
"Available route event types:");
241 print(
" - RouteEventType.TURN_LEFT: ${RouteEventType.TURN_LEFT}");
242 print(
" - RouteEventType.TURN_RIGHT: ${RouteEventType.TURN_RIGHT}");
243 print(
" - RouteEventType.TRANSITION: ${RouteEventType.TRANSITION}");
250 void _demonstrateLocationPointUsage(LocationPoint locationPoint) {
253 Point? point = locationPoint.point;
255 _demonstratePointUsage(point);
261 int locationId = locationPoint.locationId;
262 print(
"Location ID: $locationId");
267 int sublocationId = locationPoint.sublocationId;
268 print(
"Sublocation ID: $sublocationId");
273 Point newPoint = Point(x: 15.0, y: 25.0);
274 LocationPoint newLocationPoint = LocationPoint(point: newPoint, locationId: locationId, sublocationId: sublocationId);
275 print(
"Created new LocationPoint: $newLocationPoint");
282 void _demonstratePointUsage(Point point) {
286 print(
"Point X: $x");
292 print(
"Point Y: $y");
297 Point newPoint = Point(x: x, y: y);
298 print(
"Created new Point: $newPoint");
305 void demonstrateAdvancedRoutingFeatures() {
306 print(
"=== Advanced Routing Features ===");
308 if (_routeManager ==
null) {
313 List<String> graphTags = [
"main",
"elevator",
"stairs"];
315 for (String tag in graphTags) {
318 _routeManager!.setGraphTag(tag);
321 print(
"Routing with graph tag: $tag");
324 Point startPoint = Point(x: 0.0, y: 0.0);
325 Point endPoint = Point(x: 100.0, y: 100.0);
326 LocationPoint startLocationPoint = LocationPoint(point: startPoint, locationId: 12345, sublocationId: 1);
327 LocationPoint endLocationPoint = LocationPoint(point: endPoint, locationId: 12345, sublocationId: 1);
331 RoutePath routePath = _routeManager!.makeRoute(startLocationPoint, endLocationPoint);
334 print(
"Route with tag '$tag' has length: ${routePath.length} meters");
341 Future<void> demonstrateRoutePlanningSimulation() async {
342 print(
"=== Route Planning Simulation ===");
344 if (_routeManager ==
null) {
349 List<LocationPoint> targets = [
350 LocationPoint(point: Point(x: 50.0, y: 50.0), locationId: 12345, sublocationId: 1),
351 LocationPoint(point: Point(x: 100.0, y: 100.0), locationId: 12345, sublocationId: 1),
352 LocationPoint(point: Point(x: 150.0, y: 150.0), locationId: 12345, sublocationId: 1),
357 _routeManager!.setTarget(targets[0]);
360 print(
"Set target 1: ${targets[0]}");
361 await Future.delayed(Duration(seconds: 1));
365 for (
int i = 1; i < targets.length; i++) {
366 _routeManager!.addTarget(targets[i]);
367 print(
"Added target ${i + 1}: ${targets[i]}");
368 await Future.delayed(Duration(seconds: 1));
374 _routeManager!.cancelTarget();
375 print(
"Cancelled current target");
378 await Future.delayed(Duration(seconds: 1));
382 _routeManager!.clearTargets();
383 print(
"Cleared all targets");
391 if (_routeManager !=
null && _routeListener !=
null) {
394 _routeManager!.removeRouteListener(_routeListener!);
402 Future<void> runExample() async {
403 print(
"=== RouteManager Example ===");
405 demonstrateRouteManagerMethods();
406 demonstrateRouteEventTypes();
407 demonstrateAdvancedRoutingFeatures();
408 await demonstrateRoutePlanningSimulation();
411 await Future.delayed(Duration(seconds: 3));
414 print(
"=== Example completed ===");