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 {
10 NavigineSdk? _sdk;
11 LocationManager? _locationManager;
12 NavigationManager? _navigationManager;
13 RouteManager? _routeManager;
14 RouteListener? _routeListener;
15
16 RouteManagerExample() {
17 _initializeSdk();
18 _setupRouteListener();
19 }
20
24 void _initializeSdk() {
25 try {
26 // [dart_NavigineSdk_getInstance]
27 // Get SDK instance
28 _sdk = NavigineSdk.getInstance();
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
43 _locationManager = _sdk?.getLocationManager();
44 // [dart_NavigineSdk_getLocationManager]
45
46 // [dart_NavigineSdk_getNavigationManager]
47 // Get NavigationManager for working with navigation
48 _navigationManager = _sdk?.getNavigationManager(_locationManager!);
49 // [dart_NavigineSdk_getNavigationManager]
50
51 // [dart_NavigineSdk_getRouteManager]
52 // Get RouteManager for working with routes
53 _routeManager = _sdk?.getRouteManager(_locationManager!, _navigationManager!);
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
81 void demonstrateRouteManagerMethods() {
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_getPoints]
170 // Get route points
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]);
175 }
176 // [dart_RoutePath_getPoints]
177
178 // [dart_RoutePath_getEvents]
179 // Get route events
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]);
184 }
185 // [dart_RoutePath_getEvents]
186
187 // [dart_RoutePath_head]
188 // Get head of route (first 10 meters)
189 RoutePath? headPath = path.head(10.0);
190 if (headPath != null) {
191 print("Head path length: ${headPath.length} meters");
192 }
193 // [dart_RoutePath_head]
194
195 // [dart_RoutePath_tail]
196 // Get tail of route (remaining after 10 meters)
197 RoutePath? tailPath = path.tail(10.0);
198 if (tailPath != null) {
199 print("Tail path length: ${tailPath.length} meters");
200 }
201 // [dart_RoutePath_tail]
202 }
203 }
204
208 void _demonstrateRouteEventUsage(RouteEvent event) {
209 // [dart_RouteEvent_getType]
210 // Get event type
211 RouteEventType type = event.type;
212 print("Event type: $type");
213 // [dart_RouteEvent_getType]
214
215 // [dart_RouteEvent_getValue]
216 // Get event value (angle for turns, sublocation ID for transitions)
217 int value = event.value;
218 print("Event value: $value");
219 // [dart_RouteEvent_getValue]
220
221 // [dart_RouteEvent_getDistance]
222 // Get distance from route start
223 double distance = event.distance;
224 print("Event distance: $distance meters");
225 // [dart_RouteEvent_getDistance]
226
227 // [dart_RouteEvent_constructor]
228 // Create new RouteEvent
229 RouteEvent newEvent = RouteEvent(type, value, distance);
230 print("Created new RouteEvent: $newEvent");
231 // [dart_RouteEvent_constructor]
232 }
233
237 void demonstrateRouteEventTypes() {
238 // [dart_RouteEventType_values]
239 // Get all route event type values
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}");
244 // [dart_RouteEventType_values]
245 }
246
250 void _demonstrateLocationPointUsage(LocationPoint locationPoint) {
251 // [dart_LocationPoint_getPoint]
252 // Get point coordinates
253 Point? point = locationPoint.point;
254 if (point != null) {
255 _demonstratePointUsage(point);
256 }
257 // [dart_LocationPoint_getPoint]
258
259 // [dart_LocationPoint_getLocationId]
260 // Get location ID
261 int locationId = locationPoint.locationId;
262 print("Location ID: $locationId");
263 // [dart_LocationPoint_getLocationId]
264
265 // [dart_LocationPoint_getSublocationId]
266 // Get sublocation ID
267 int sublocationId = locationPoint.sublocationId;
268 print("Sublocation ID: $sublocationId");
269 // [dart_LocationPoint_getSublocationId]
270
271 // [dart_LocationPoint_constructor]
272 // Create new LocationPoint
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");
276 // [dart_LocationPoint_constructor]
277 }
278
282 void _demonstratePointUsage(Point point) {
283 // [dart_Point_getX]
284 // Get X coordinate
285 double x = point.x;
286 print("Point X: $x");
287 // [dart_Point_getX]
288
289 // [dart_Point_getY]
290 // Get Y coordinate
291 double y = point.y;
292 print("Point Y: $y");
293 // [dart_Point_getY]
294
295 // [dart_Point_constructor]
296 // Create new Point
297 Point newPoint = Point(x: x, y: y);
298 print("Created new Point: $newPoint");
299 // [dart_Point_constructor]
300 }
301
305 void demonstrateAdvancedRoutingFeatures() {
306 print("=== Advanced Routing Features ===");
307
308 if (_routeManager == null) {
309 return;
310 }
311
312 // Create multiple routes with different graph tags
313 List<String> graphTags = ["main", "elevator", "stairs"];
314
315 for (String tag in graphTags) {
316 // [dart_RouteManager_setGraphTag_2]
317 // Set different graph tag for routing
318 _routeManager!.setGraphTag(tag);
319 // [dart_RouteManager_setGraphTag_2]
320
321 print("Routing with graph tag: $tag");
322
323 // Create test route
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);
328
329 // [dart_RouteManager_makeRoute_2]
330 // Make route with specific graph tag
331 RoutePath routePath = _routeManager!.makeRoute(startLocationPoint, endLocationPoint);
332 // [dart_RouteManager_makeRoute_2]
333
334 print("Route with tag '$tag' has length: ${routePath.length} meters");
335 }
336 }
337
341 Future<void> demonstrateRoutePlanningSimulation() async {
342 print("=== Route Planning Simulation ===");
343
344 if (_routeManager == null) {
345 return;
346 }
347
348 // Create multiple target points
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),
353 ];
354
355 // [dart_RouteManager_setTarget_2]
356 // Set first target
357 _routeManager!.setTarget(targets[0]);
358 // [dart_RouteManager_setTarget_2]
359
360 print("Set target 1: ${targets[0]}");
361 await Future.delayed(Duration(seconds: 1));
362
363 // [dart_RouteManager_addTarget_2]
364 // Add additional targets
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));
369 }
370 // [dart_RouteManager_addTarget_2]
371
372 // [dart_RouteManager_cancelTarget_2]
373 // Cancel current target
374 _routeManager!.cancelTarget();
375 print("Cancelled current target");
376 // [dart_RouteManager_cancelTarget_2]
377
378 await Future.delayed(Duration(seconds: 1));
379
380 // [dart_RouteManager_clearTargets_2]
381 // Clear all targets
382 _routeManager!.clearTargets();
383 print("Cleared all targets");
384 // [dart_RouteManager_clearTargets_2]
385 }
386
390 void cleanup() {
391 if (_routeManager != null && _routeListener != null) {
392 // [dart_RouteManager_removeRouteListener]
393 // Remove route listener
394 _routeManager!.removeRouteListener(_routeListener!);
395 // [dart_RouteManager_removeRouteListener]
396 }
397 }
398
402 Future<void> runExample() async {
403 print("=== RouteManager Example ===");
404
405 demonstrateRouteManagerMethods();
406 demonstrateRouteEventTypes();
407 demonstrateAdvancedRoutingFeatures();
408 await demonstrateRoutePlanningSimulation();
409
410 // Wait a bit for route updates
411 await Future.delayed(Duration(seconds: 3));
412
413 cleanup();
414 print("=== Example completed ===");
415 }
416}
417
421Future<void> main() async {
423 await example.runExample();
424}