Loading...
Searching...
No Matches
route_manager_example.dart
Go to the documentation of this file.
1import 'dart:async';
2import 'dart:io';
3import 'package:navigine_sdk/navigine_sdk.dart';
4
9class RouteManagerExample {
15
16 RouteManagerExample() {
17 _initializeSdk();
18 _setupRouteListener();
19 }
20
24 void _initializeSdk() {
25 try {
26 // [dart_NavigineSdk_getInstance]
27 // Get SDK instance
29 // [dart_NavigineSdk_getInstance]
30
31 // [dart_NavigineSdk_setUserHash]
32 // Set user hash
33 _sdk?.setUserHash("USER-HASH-HERE");
34 // [dart_NavigineSdk_setUserHash]
35
36 // [dart_NavigineSdk_setServer]
37 // Set server URL (optional)
38 _sdk?.setServer("https://custom.navigine.com");
39 // [dart_NavigineSdk_setServer]
40
41 // [dart_NavigineSdk_getLocationManager]
42 // Get LocationManager for working with locations
44 // [dart_NavigineSdk_getLocationManager]
45
46 // [dart_NavigineSdk_getNavigationManager]
47 // Get NavigationManager for working with navigation
49 // [dart_NavigineSdk_getNavigationManager]
50
51 // [dart_NavigineSdk_getRouteManager]
52 // Get RouteManager for working with routes
54 // [dart_NavigineSdk_getRouteManager]
55
56 if (_locationManager != null && _navigationManager != null && _routeManager != null) {
57 print("LocationManager, NavigationManager and RouteManager successfully initialized");
58 }
59 } catch (e) {
60 print("Error initializing SDK: $e");
61 }
62 }
63
67 void _setupRouteListener() {
68 _routeListener = RouteListener(
69 // [dart_RouteListener_onPathsUpdated]
70 onPathsUpdated: (List<RoutePath> paths) {
71 print("Routes updated successfully");
72 _demonstrateRoutePathUsage(paths);
73 },
74 // [dart_RouteListener_onPathsUpdated]
75 );
76 }
77
82 if (_routeManager == null) {
83 print("RouteManager not initialized");
84 return;
85 }
86
87 if (_routeListener == null) return;
88
89 // [dart_RouteManager_addRouteListener]
90 // Add route listener
91 _routeManager!.addRouteListener(_routeListener!);
92 // [dart_RouteManager_addRouteListener]
93
94 // [dart_RouteManager_setGraphTag]
95 // Set graph tag
96 _routeManager!.setGraphTag("main");
97 // [dart_RouteManager_setGraphTag]
98
99 // [dart_RouteManager_getGraphTag]
100 // Get current graph tag
101 String currentGraphTag = _routeManager!.getGraphTag();
102 print("Current graph tag: $currentGraphTag");
103 // [dart_RouteManager_getGraphTag]
104
105 // [dart_RouteManager_getGraphTags]
106 // Get all graph tags
107 List<String> graphTags = _routeManager!.getGraphTags();
108 print("Available graph tags: $graphTags");
109 // [dart_RouteManager_getGraphTags]
110
111 // Create test points
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);
116
117 // [dart_RouteManager_makeRoute]
118 // Make route from point to point
119 RoutePath routePath = _routeManager!.makeRoute(startLocationPoint, endLocationPoint);
120 print("Route created with length: ${routePath.length} meters");
121 // [dart_RouteManager_makeRoute]
122
123 // [dart_RouteManager_makeRoutes]
124 // Make routes to multiple destinations
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),
128 ];
129 List<RoutePath> routePaths = _routeManager!.makeRoutes(startLocationPoint, destinations);
130 print("Created ${routePaths.length} routes");
131 // [dart_RouteManager_makeRoutes]
132
133 // [dart_RouteManager_setTarget]
134 // Set target point
135 _routeManager!.setTarget(endLocationPoint);
136 // [dart_RouteManager_setTarget]
137
138 // [dart_RouteManager_addTarget]
139 // Add additional target point
140 LocationPoint additionalTarget = LocationPoint(point: Point(x: 90.0, y: 100.0), locationId: 12345, sublocationId: 1);
141 _routeManager!.addTarget(additionalTarget);
142 // [dart_RouteManager_addTarget]
143
144 // [dart_RouteManager_cancelTarget]
145 // Cancel current target
146 _routeManager!.cancelTarget();
147 // [dart_RouteManager_cancelTarget]
148
149 // [dart_RouteManager_clearTargets]
150 // Clear all targets
151 _routeManager!.clearTargets();
152 // [dart_RouteManager_clearTargets]
153 }
154
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} ===");
162
163 // [dart_RoutePath_getLength]
164 // Get route length
165 double length = path.length;
166 print("Route length: $length meters");
167 // [dart_RoutePath_getLength]
168
169 // [dart_RoutePath_getWeight]
170 // Get total route weight
171 double weight = path.weight;
172 print("Route weight: $weight");
173 // [dart_RoutePath_getWeight]
174
175 // [dart_RoutePath_getNodes]
176 // Get route nodes
177 List<RouteNode> nodes = path.nodes;
178 print("Route has ${nodes.length} nodes");
179 for (int j = 0; j < nodes.length; j++) {
180 _demonstrateRouteNodeUsage(nodes[j]);
181 }
182 // [dart_RoutePath_getNodes]
183
184 // [dart_RoutePath_head]
185 // Get head of route (first 10 meters)
186 RoutePath? headPath = path.head(10.0);
187 if (headPath != null) {
188 print("Head path length: ${headPath.length} meters");
189 }
190 // [dart_RoutePath_head]
191
192 // [dart_RoutePath_tail]
193 // Get tail of route (remaining after 10 meters)
194 RoutePath? tailPath = path.tail(10.0);
195 if (tailPath != null) {
196 print("Tail path length: ${tailPath.length} meters");
197 }
198 // [dart_RoutePath_tail]
199 }
200 }
201
202 void _demonstrateRouteNodeUsage(RouteNode node) {
203 // [dart_RouteNode_getPoint]
204 LocationPoint point = node.point;
205 _demonstrateLocationPointUsage(point);
206 // [dart_RouteNode_getPoint]
207
208 // [dart_RouteNode_getWeight]
209 double weight = node.weight;
210 print("Node weight: $weight");
211 // [dart_RouteNode_getWeight]
212
213 // [dart_RouteNode_getDistance]
214 double distance = node.distance;
215 print("Node distance: $distance meters");
216 // [dart_RouteNode_getDistance]
217
218 // [dart_RouteNode_getEvents]
219 List<RouteEvent> events = node.events;
220 print("Node has ${events.length} events");
221 for (final event in events) {
222 _demonstrateRouteEventUsage(event);
223 }
224 // [dart_RouteNode_getEvents]
225 }
226
230 void _demonstrateRouteEventUsage(RouteEvent event) {
231 // [dart_RouteEvent_getType]
232 // Get event type
233 RouteEventType type = event.type;
234 print("Event type: $type");
235 // [dart_RouteEvent_getType]
236
237 // [dart_RouteEvent_getTurnEvent]
238 TurnEvent? turnEvent = event.turnEvent;
239 if (turnEvent != null) {
240 _demonstrateTurnEventUsage(turnEvent);
241 }
242 // [dart_RouteEvent_getTurnEvent]
243
244 // [dart_RouteEvent_getTransitionEntryEvent]
245 TransitionEntryEvent? entryEvent = event.transitionEntryEvent;
246 if (entryEvent != null) {
247 _demonstrateTransitionEntryEventUsage(entryEvent);
248 }
249 // [dart_RouteEvent_getTransitionEntryEvent]
250
251 // [dart_RouteEvent_getTransitionExitEvent]
252 TransitionExitEvent? exitEvent = event.transitionExitEvent;
253 if (exitEvent != null) {
254 _demonstrateTransitionExitEventUsage(exitEvent);
255 }
256 // [dart_RouteEvent_getTransitionExitEvent]
257
258 // [dart_RouteEvent_getTargetReachedEvent]
259 TargetReachedEvent? reachedEvent = event.targetReachedEvent;
260 if (reachedEvent != null) {
261 _demonstrateTargetReachedEventUsage(reachedEvent);
262 }
263 // [dart_RouteEvent_getTargetReachedEvent]
264 }
265
270 // [dart_RouteEventType_values]
271 // Get all route event type values
272 print("Available route event types:");
273 print(" - RouteEventType.TURN_LEFT: ${RouteEventType.TURN_LEFT}");
274 print(" - RouteEventType.TURN_RIGHT: ${RouteEventType.TURN_RIGHT}");
275 print(" - RouteEventType.TRANSITION: ${RouteEventType.TRANSITION}");
276 // [dart_RouteEventType_values]
277 }
278
279 void demonstrateTurnTypes() {
280 // [dart_TurnType_values]
281 print("Available turn types:");
282 for (final type in TurnType.values) {
283 print(" - $type");
284 }
285 // [dart_TurnType_values]
286 }
287
288 void _demonstrateTurnEventUsage(TurnEvent event) {
289 // [dart_TurnEvent_getType]
290 TurnType type = event.type;
291 print("Turn type: $type");
292 // [dart_TurnEvent_getType]
293
294 // [dart_TurnEvent_getAngle]
295 int angle = event.angle;
296 print("Turn angle: $angle");
297 // [dart_TurnEvent_getAngle]
298 }
299
300 void _demonstrateTransitionEntryEventUsage(TransitionEntryEvent event) {
301 // [dart_TransitionEntryEvent_getFrom]
302 int from = event.from;
303 print("Transition entry from: $from");
304 // [dart_TransitionEntryEvent_getFrom]
305
306 // [dart_TransitionEntryEvent_getTo]
307 int to = event.to;
308 print("Transition entry to: $to");
309 // [dart_TransitionEntryEvent_getTo]
310 }
311
312 void _demonstrateTransitionExitEventUsage(TransitionExitEvent event) {
313 // [dart_TransitionExitEvent_getFrom]
314 int from = event.from;
315 print("Transition exit from: $from");
316 // [dart_TransitionExitEvent_getFrom]
317
318 // [dart_TransitionExitEvent_getTo]
319 int to = event.to;
320 print("Transition exit to: $to");
321 // [dart_TransitionExitEvent_getTo]
322 }
323
324 void _demonstrateTargetReachedEventUsage(TargetReachedEvent event) {
325 // [dart_TargetReachedEvent_getIndex]
326 int index = event.index;
327 print("Reached target index: $index");
328 // [dart_TargetReachedEvent_getIndex]
329
330 // [dart_TargetReachedEvent_getPoint]
331 LocationPoint point = event.point;
332 _demonstrateLocationPointUsage(point);
333 // [dart_TargetReachedEvent_getPoint]
334 }
335
339 void _demonstrateLocationPointUsage(LocationPoint locationPoint) {
340 // [dart_LocationPoint_getPoint]
341 // Get point coordinates
342 Point? point = locationPoint.point;
343 if (point != null) {
344 _demonstratePointUsage(point);
345 }
346 // [dart_LocationPoint_getPoint]
347
348 // [dart_LocationPoint_getLocationId]
349 // Get location ID
350 int locationId = locationPoint.locationId;
351 print("Location ID: $locationId");
352 // [dart_LocationPoint_getLocationId]
353
354 // [dart_LocationPoint_getSublocationId]
355 // Get sublocation ID
356 int sublocationId = locationPoint.sublocationId;
357 print("Sublocation ID: $sublocationId");
358 // [dart_LocationPoint_getSublocationId]
359
360 // [dart_LocationPoint_constructor]
361 // Create new LocationPoint
362 Point newPoint = Point(x: 15.0, y: 25.0);
363 LocationPoint newLocationPoint = LocationPoint(point: newPoint, locationId: locationId, sublocationId: sublocationId);
364 print("Created new LocationPoint: $newLocationPoint");
365 // [dart_LocationPoint_constructor]
366 }
367
371 void _demonstratePointUsage(Point point) {
372 // [dart_Point_getX]
373 // Get X coordinate
374 double x = point.x;
375 print("Point X: $x");
376 // [dart_Point_getX]
377
378 // [dart_Point_getY]
379 // Get Y coordinate
380 double y = point.y;
381 print("Point Y: $y");
382 // [dart_Point_getY]
383
384 // [dart_Point_constructor]
385 // Create new Point
386 Point newPoint = Point(x: x, y: y);
387 print("Created new Point: $newPoint");
388 // [dart_Point_constructor]
389 }
390
395 print("=== Advanced Routing Features ===");
396
397 if (_routeManager == null) {
398 return;
399 }
400
401 // Create multiple routes with different graph tags
402 List<String> graphTags = ["main", "elevator", "stairs"];
403
404 for (String tag in graphTags) {
405 // [dart_RouteManager_setGraphTag_2]
406 // Set different graph tag for routing
407 _routeManager!.setGraphTag(tag);
408 // [dart_RouteManager_setGraphTag_2]
409
410 print("Routing with graph tag: $tag");
411
412 // Create test route
413 Point startPoint = Point(x: 0.0, y: 0.0);
414 Point endPoint = Point(x: 100.0, y: 100.0);
415 LocationPoint startLocationPoint = LocationPoint(point: startPoint, locationId: 12345, sublocationId: 1);
416 LocationPoint endLocationPoint = LocationPoint(point: endPoint, locationId: 12345, sublocationId: 1);
417
418 // [dart_RouteManager_makeRoute_2]
419 // Make route with specific graph tag
420 RoutePath routePath = _routeManager!.makeRoute(startLocationPoint, endLocationPoint);
421 // [dart_RouteManager_makeRoute_2]
422
423 print("Route with tag '$tag' has length: ${routePath.length} meters");
424 }
425 }
426
430 Future<void> demonstrateRoutePlanningSimulation() async {
431 print("=== Route Planning Simulation ===");
432
433 if (_routeManager == null) {
434 return;
435 }
436
437 // Create multiple target points
438 List<LocationPoint> targets = [
439 LocationPoint(point: Point(x: 50.0, y: 50.0), locationId: 12345, sublocationId: 1),
440 LocationPoint(point: Point(x: 100.0, y: 100.0), locationId: 12345, sublocationId: 1),
441 LocationPoint(point: Point(x: 150.0, y: 150.0), locationId: 12345, sublocationId: 1),
442 ];
443
444 // [dart_RouteManager_setTarget_2]
445 // Set first target
446 _routeManager!.setTarget(targets[0]);
447 // [dart_RouteManager_setTarget_2]
448
449 print("Set target 1: ${targets[0]}");
450 await Future.delayed(Duration(seconds: 1));
451
452 // [dart_RouteManager_addTarget_2]
453 // Add additional targets
454 for (int i = 1; i < targets.length; i++) {
455 _routeManager!.addTarget(targets[i]);
456 print("Added target ${i + 1}: ${targets[i]}");
457 await Future.delayed(Duration(seconds: 1));
458 }
459 // [dart_RouteManager_addTarget_2]
460
461 // [dart_RouteManager_cancelTarget_2]
462 // Cancel current target
463 _routeManager!.cancelTarget();
464 print("Cancelled current target");
465 // [dart_RouteManager_cancelTarget_2]
466
467 await Future.delayed(Duration(seconds: 1));
468
469 // [dart_RouteManager_clearTargets_2]
470 // Clear all targets
471 _routeManager!.clearTargets();
472 print("Cleared all targets");
473 // [dart_RouteManager_clearTargets_2]
474 }
475
479 void cleanup() {
480 if (_routeManager != null && _routeListener != null) {
481 // [dart_RouteManager_removeRouteListener]
482 // Remove route listener
483 _routeManager!.removeRouteListener(_routeListener!);
484 // [dart_RouteManager_removeRouteListener]
485 }
486 }
487
491 Future<void> runExample() async {
492 print("=== RouteManager Example ===");
493
498 await demonstrateRoutePlanningSimulation();
499
500 // Wait a bit for route updates
501 await Future.delayed(Duration(seconds: 3));
502
503 cleanup();
504 print("=== Example completed ===");
505 }
506}
507
511Future<void> main() async {
513 await example.runExample();
514}