9class AsyncRouteManagerExample {
17 AsyncRouteManagerExample() {
19 _setupAsyncRouteListener();
25 void _initializeSdk() {
64 "LocationManager, NavigationManager and AsyncRouteManager successfully initialized",
68 print(
"Error initializing SDK: $e");
75 void _setupAsyncRouteListener() {
78 onRouteChanged: (RouteStatus status, RoutePath currentPath) {
79 print(
"Route changed with status: $status");
80 if (status == RouteStatus.newRoute && currentPath !=
null) {
81 _demonstrateRoutePathUsage(currentPath);
83 print(
"Route not ready, status: $status");
89 onRouteAdvanced: (
double distance, LocationPoint point) {
90 print(
"Route advanced: $distance meters");
91 _demonstrateLocationPointUsage(point);
102 print(
"AsyncRouteManager not initialized");
107 Point destinationPoint = Point(x: 100.0, y: 100.0);
108 LocationPoint destinationLocationPoint = LocationPoint(
109 point: destinationPoint,
115 RouteOptions routeOptions = RouteOptions(2.0, 5.0, 2.0);
120 destinationLocationPoint,
123 print(
"Created route session with default graph tag");
129 destinationLocationPoint,
133 print(
"Created route session with 'main' graph tag");
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 double weight = routePath.
weight;
166 print(
"Route weight: $weight");
171 List<RouteNode> nodes = routePath.
nodes;
172 print(
"Number of route nodes: ${nodes.length}");
173 for (
int i = 0; i < nodes.length && i < 3; i++) {
174 _demonstrateRouteNodeUsage(nodes[i]);
180 RoutePath? head = routePath.
head(10.0);
182 print(
"Route head length: ${head.length} meters");
188 RoutePath? tail = routePath.
tail(10.0);
190 print(
"Route tail length: ${tail.length} meters");
195 void _demonstrateRouteNodeUsage(RouteNode node) {
197 LocationPoint point = node.
point;
198 _demonstrateLocationPointUsage(point);
202 double weight = node.
weight;
203 print(
"Node weight: $weight");
208 print(
"Node distance: $distance meters");
212 List<RouteEvent> events = node.
events;
213 for (
final event in events) {
214 _demonstrateRouteEventUsage(event);
222 void _demonstrateRouteEventUsage(RouteEvent event) {
224 print(
"RouteEvent is null");
230 RouteEventType type =
event.type;
231 print(
"Event type: $type");
235 TurnEvent? turnEvent =
event.turnEvent;
236 if (turnEvent !=
null) {
237 _demonstrateTurnEventUsage(turnEvent);
242 TransitionEntryEvent? entryEvent =
event.transitionEntryEvent;
243 if (entryEvent !=
null) {
244 _demonstrateTransitionEntryEventUsage(entryEvent);
249 TransitionExitEvent? exitEvent =
event.transitionExitEvent;
250 if (exitEvent !=
null) {
251 _demonstrateTransitionExitEventUsage(exitEvent);
256 TargetReachedEvent? reachedEvent =
event.targetReachedEvent;
257 if (reachedEvent !=
null) {
258 _demonstrateTargetReachedEventUsage(reachedEvent);
269 print(
"Available route event types:");
270 print(
" - RouteEventType.TURN_EVENT: ${RouteEventType.TURN_EVENT}");
271 print(
" - RouteEventType.TRANSITION_ENTRY_EVENT: ${RouteEventType.TRANSITION_ENTRY_EVENT}");
272 print(
" - RouteEventType.TRANSITION_EXIT_EVENT: ${RouteEventType.TRANSITION_EXIT_EVENT}");
273 print(
" - RouteEventType.TARGET_REACHED_EVENT: ${RouteEventType.TARGET_REACHED_EVENT}");
279 for (
final type in TurnType.values) {
285 void _demonstrateTurnEventUsage(TurnEvent event) {
287 TurnType type =
event.type;
288 print(
"Turn type: $type");
292 int angle =
event.angle;
293 print(
"Turn angle: $angle");
297 void _demonstrateTransitionEntryEventUsage(TransitionEntryEvent event) {
299 int from =
event.from;
300 print(
"Transition entry from: $from");
305 print(
"Transition entry to: $to");
309 void _demonstrateTransitionExitEventUsage(TransitionExitEvent event) {
311 int from =
event.from;
312 print(
"Transition exit from: $from");
317 print(
"Transition exit to: $to");
321 void _demonstrateTargetReachedEventUsage(TargetReachedEvent event) {
323 int index =
event.index;
324 print(
"Reached target index: $index");
328 LocationPoint point =
event.
point;
329 _demonstrateLocationPointUsage(point);
336 void _demonstrateLocationPointUsage(LocationPoint locationPoint) {
337 if (locationPoint ==
null) {
338 print(
"LocationPoint is null");
344 Point point = locationPoint.
point;
345 print(
"Location point: (${point.x}, ${point.y})");
351 print(
"Location ID: $locationId");
357 print(
"Sublocation ID: $sublocationId");
362 Point newPoint = Point(x: 25.0, y: 35.0);
363 LocationPoint newLocationPoint = LocationPoint(
369 "Created new location point: ${newLocationPoint.point.x}, ${newLocationPoint.point.y}",
377 void _demonstratePointUsage(Point point) {
379 print(
"Point is null");
386 print(
"Point X: $x");
392 print(
"Point Y: $y");
397 Point newPoint = Point(x: 15.0, y: 25.0);
398 print(
"Created new point: (${newPoint.x}, ${newPoint.y})");
406 print(
"=== Route Options ===");
410 RouteOptions routeOptions = RouteOptions(3.0, 7.0, 2.5);
412 "Created route options with smoothRadius: ${routeOptions.smoothRadius}, maxProjectionDistance: ${routeOptions.maxProjectionDistance}, maxAdvance: ${routeOptions.maxAdvance}",
417 List<RouteOptions> optionsList = [
418 RouteOptions(0.0, 5.0, 2.0),
419 RouteOptions(2.0, 10.0, 1.0),
420 RouteOptions(1.0, 3.0, 3.0),
423 for (
int i = 0; i < optionsList.length; i++) {
424 RouteOptions options = optionsList[i];
426 "Options ${i + 1}: smoothRadius=${options.smoothRadius}, maxProjectionDistance=${options.maxProjectionDistance}, maxAdvance=${options.maxAdvance}",
434 Future<void> demonstrateAdvancedAsyncRoutingFeatures() async {
435 print(
"=== Advanced Async Routing Features ===");
442 List<LocationPoint> destinations = [
444 point: Point(x: 50.0, y: 50.0),
449 point: Point(x: 100.0, y: 100.0),
454 point: Point(x: 150.0, y: 150.0),
461 List<RouteOptions> optionsList = [
462 RouteOptions(2.0, 5.0, 2.0),
463 RouteOptions(3.0, 7.0, 1.5),
464 RouteOptions(1.0, 3.0, 2.5),
468 List<RouteSession> sessions = [];
469 for (
int i = 0; i < destinations.length; i++) {
474 sessions.add(session);
476 "Created session ${i + 1} for destination: ${destinations[i].point.x}, ${destinations[i].point.y}",
483 await Future.delayed(Duration(seconds: 1));
487 await Future.delayed(Duration(seconds: 3));
490 for (
int i = 0; i < sessions.length; i++) {
494 print(
"Cancelled session ${i + 1}");
497 await Future.delayed(Duration(seconds: 1));
505 print(
"=== RouteStatus Enum Usage ===");
509 print(
"Available RouteStatus values:");
510 List<RouteStatus> allStatuses = [
511 RouteStatus.missingGraph,
512 RouteStatus.missingPosition,
513 RouteStatus.missingRoute,
514 RouteStatus.missingProjection,
515 RouteStatus.newRoute,
517 for (RouteStatus status in allStatuses) {
518 print(
" - $status: ${status.toString()}");
522 RouteStatus testStatus = RouteStatus.newRoute;
523 switch (testStatus) {
524 case RouteStatus.newRoute:
525 print(
"Router is ready for navigation");
527 case RouteStatus.missingGraph:
528 print(
"Router is missing the route graph");
530 case RouteStatus.missingPosition:
531 print(
"Router is missing the current position");
533 case RouteStatus.missingProjection:
534 print(
"Current position is off the route graph");
536 case RouteStatus.missingRoute:
537 print(
"Router unable to find the route to the destination point");
547 print(
"=== Route Session Management ===");
554 Point destinationPoint = Point(x: 75.0, y: 75.0);
555 LocationPoint destinationLocationPoint = LocationPoint(
556 point: destinationPoint,
560 RouteOptions routeOptions = RouteOptions(2.0, 5.0, 2.0);
564 destinationLocationPoint,
567 print(
"Created session with default tag");
571 destinationLocationPoint,
575 print(
"Created session with 'elevator' tag");
582 Future.delayed(Duration(seconds: 2), () {
588 print(
"Removed listeners from sessions");
594 print(
"Cancelled both sessions");
620 Future<void> runExample() async {
621 print(
"=== AsyncRouteManager Example ===");
629 await demonstrateAdvancedAsyncRoutingFeatures();
632 await Future.delayed(Duration(seconds: 3));
635 print(
"=== Example completed ===");