9class AsyncRouteManagerExample {
17 AsyncRouteManagerExample() {
19 _setupAsyncRouteListener();
25 void _initializeSdk() {
39 _sdk?.setServer(
"https://custom.navigine.com");
44 _locationManager = _sdk?.getLocationManager();
49 _navigationManager = _sdk?.getNavigationManager(_locationManager!);
54 _asyncRouteManager = _sdk?.getAsyncRouteManager(
60 if (_locationManager !=
null &&
61 _navigationManager !=
null &&
62 _asyncRouteManager !=
null) {
64 "LocationManager, NavigationManager and AsyncRouteManager successfully initialized",
68 print(
"Error initializing SDK: $e");
75 void _setupAsyncRouteListener() {
79 print(
"Route changed with status: $status");
80 if (status ==
RouteStatus.newRoute && currentPath !=
null) {
81 _demonstrateRoutePathUsage(currentPath);
83 print(
"Route not ready, status: $status");
90 print(
"Route advanced: $distance meters");
91 _demonstrateLocationPointUsage(point);
100 void demonstrateAsyncRouteManagerMethods() {
101 if (_asyncRouteManager ==
null) {
102 print(
"AsyncRouteManager not initialized");
107 Point destinationPoint =
Point(x: 100.0, y: 100.0);
109 point: destinationPoint,
119 RouteSession session = _asyncRouteManager!.createRouteSession(
120 destinationLocationPoint,
123 print(
"Created route session with default graph tag");
128 RouteSession sessionWithTag = _asyncRouteManager!.createRouteSessionWithTag(
129 destinationLocationPoint,
133 print(
"Created route session with 'main' graph tag");
137 _currentSession = session;
140 if (_asyncRouteListener !=
null) {
151 void _demonstrateRoutePathUsage(
RoutePath routePath) {
152 if (routePath ==
null) {
153 print(
"RoutePath is null");
159 double length = routePath.
length;
160 print(
"Route length: $length meters");
165 List<LocationPoint> points = routePath.
points;
166 print(
"Number of route points: ${points.length}");
167 for (
int i = 0; i < points.length && i < 3; i++) {
168 print(
"Point ${i + 1}: ${points[i]}");
174 List<RouteEvent> events = routePath.
events;
175 print(
"Number of route events: ${events.length}");
176 for (
int i = 0; i < events.length && i < 3; i++) {
177 _demonstrateRouteEventUsage(events[i]);
185 print(
"Route head length: ${head.length} meters");
193 print(
"Route tail length: ${tail.length} meters");
201 void _demonstrateRouteEventUsage(
RouteEvent event) {
203 print(
"RouteEvent is null");
210 print(
"Event type: $type");
215 int value =
event.value;
216 print(
"Event value: $value");
221 double distance =
event.distance;
222 print(
"Event distance: $distance meters");
229 "Created new route event: ${newEvent.type} at ${newEvent.distance} meters",
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) {
251 if (locationPoint ==
null) {
252 print(
"LocationPoint is null");
259 print(
"Location point: (${point.x}, ${point.y})");
265 print(
"Location ID: $locationId");
271 print(
"Sublocation ID: $sublocationId");
283 "Created new location point: ${newLocationPoint.point.x}, ${newLocationPoint.point.y}",
291 void _demonstratePointUsage(
Point point) {
293 print(
"Point is null");
300 print(
"Point X: $x");
306 print(
"Point Y: $y");
312 print(
"Created new point: (${newPoint.x}, ${newPoint.y})");
319 void demonstrateRouteOptions() {
320 print(
"=== Route Options ===");
326 "Created route options with smoothRadius: ${routeOptions.smoothRadius}, maxProjectionDistance: ${routeOptions.maxProjectionDistance}, maxAdvance: ${routeOptions.maxAdvance}",
331 List<RouteOptions> optionsList = [
337 for (
int i = 0; i < optionsList.length; i++) {
340 "Options ${i + 1}: smoothRadius=${options.smoothRadius}, maxProjectionDistance=${options.maxProjectionDistance}, maxAdvance=${options.maxAdvance}",
348 Future<void> demonstrateAdvancedAsyncRoutingFeatures() async {
349 print(
"=== Advanced Async Routing Features ===");
351 if (_asyncRouteManager ==
null) {
356 List<LocationPoint> destinations = [
358 point:
Point(x: 50.0, y: 50.0),
363 point:
Point(x: 100.0, y: 100.0),
368 point:
Point(x: 150.0, y: 150.0),
375 List<RouteOptions> optionsList = [
382 List<RouteSession> sessions = [];
383 for (
int i = 0; i < destinations.length; i++) {
384 RouteSession session = _asyncRouteManager!.createRouteSession(
388 sessions.add(session);
390 "Created session ${i + 1} for destination: ${destinations[i].point.x}, ${destinations[i].point.y}",
393 if (_asyncRouteListener !=
null) {
397 await Future.delayed(Duration(seconds: 1));
401 await Future.delayed(Duration(seconds: 3));
404 for (
int i = 0; i < sessions.length; i++) {
407 _asyncRouteManager!.cancelRouteSession(sessions[i]);
408 print(
"Cancelled session ${i + 1}");
411 await Future.delayed(Duration(seconds: 1));
418 void demonstrateRouteStatusUsage() {
419 print(
"=== RouteStatus Enum Usage ===");
423 print(
"Available RouteStatus values:");
424 List<RouteStatus> allStatuses = [
432 print(
" - $status: ${status.toString()}");
437 switch (testStatus) {
439 print(
"Router is ready for navigation");
442 print(
"Router is missing the route graph");
445 print(
"Router is missing the current position");
448 print(
"Current position is off the route graph");
451 print(
"Router unable to find the route to the destination point");
460 void demonstrateRouteSessionManagement() {
461 print(
"=== Route Session Management ===");
463 if (_asyncRouteManager ==
null || _asyncRouteListener ==
null) {
468 Point destinationPoint =
Point(x: 75.0, y: 75.0);
470 point: destinationPoint,
477 RouteSession defaultSession = _asyncRouteManager!.createRouteSession(
478 destinationLocationPoint,
481 print(
"Created session with default tag");
484 RouteSession taggedSession = _asyncRouteManager!.createRouteSessionWithTag(
485 destinationLocationPoint,
489 print(
"Created session with 'elevator' tag");
496 Future.delayed(Duration(seconds: 2), () {
502 print(
"Removed listeners from sessions");
506 _asyncRouteManager!.cancelRouteSession(defaultSession);
507 _asyncRouteManager!.cancelRouteSession(taggedSession);
508 print(
"Cancelled both sessions");
516 if (_currentSession !=
null && _asyncRouteListener !=
null) {
519 _currentSession!.removeRouteListener(_asyncRouteListener!);
523 if (_asyncRouteManager !=
null && _currentSession !=
null) {
526 _asyncRouteManager!.cancelRouteSession(_currentSession!);
534 Future<void> runExample() async {
535 print(
"=== AsyncRouteManager Example ===");
537 demonstrateAsyncRouteManagerMethods();
538 demonstrateRouteEventTypes();
539 demonstrateRouteOptions();
540 demonstrateRouteStatusUsage();
541 demonstrateRouteSessionManagement();
542 await demonstrateAdvancedAsyncRoutingFeatures();
545 await Future.delayed(Duration(seconds: 3));
548 print(
"=== Example completed ===");