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(
117 maxProjectionDistance: 5.0,
124 destinationLocationPoint,
127 print(
"Created route session with default graph tag");
133 destinationLocationPoint,
137 print(
"Created route session with 'main' graph tag");
155 void _demonstrateRoutePathUsage(RoutePath routePath) {
156 if (routePath ==
null) {
157 print(
"RoutePath is null");
163 double length = routePath.
length;
164 print(
"Route length: $length meters");
169 double weight = routePath.
weight;
170 print(
"Route weight: $weight");
175 List<RouteNode> nodes = routePath.
nodes;
176 print(
"Number of route nodes: ${nodes.length}");
177 for (
int i = 0; i < nodes.length && i < 3; i++) {
178 _demonstrateRouteNodeUsage(nodes[i]);
184 RoutePath? head = routePath.
head(10.0);
186 print(
"Route head length: ${head.length} meters");
192 RoutePath? tail = routePath.
tail(10.0);
194 print(
"Route tail length: ${tail.length} meters");
199 void _demonstrateRouteNodeUsage(RouteNode node) {
201 LocationPoint point = node.
point;
202 _demonstrateLocationPointUsage(point);
206 double weight = node.
weight;
207 print(
"Node weight: $weight");
212 print(
"Node distance: $distance meters");
216 List<RouteEvent> events = node.
events;
217 for (
final event in events) {
218 _demonstrateRouteEventUsage(event);
226 void _demonstrateRouteEventUsage(RouteEvent event) {
228 print(
"RouteEvent is null");
234 RouteEventType type =
event.type;
235 print(
"Event type: $type");
239 TurnEvent? turnEvent =
event.turnEvent;
240 if (turnEvent !=
null) {
241 _demonstrateTurnEventUsage(turnEvent);
246 TransitionEntryEvent? entryEvent =
event.transitionEntryEvent;
247 if (entryEvent !=
null) {
248 _demonstrateTransitionEntryEventUsage(entryEvent);
253 TransitionExitEvent? exitEvent =
event.transitionExitEvent;
254 if (exitEvent !=
null) {
255 _demonstrateTransitionExitEventUsage(exitEvent);
260 TargetReachedEvent? reachedEvent =
event.targetReachedEvent;
261 if (reachedEvent !=
null) {
262 _demonstrateTargetReachedEventUsage(reachedEvent);
273 print(
"Available route event types:");
274 print(
" - RouteEventType.TURN_EVENT: ${RouteEventType.TURN_EVENT}");
275 print(
" - RouteEventType.TRANSITION_ENTRY_EVENT: ${RouteEventType.TRANSITION_ENTRY_EVENT}");
276 print(
" - RouteEventType.TRANSITION_EXIT_EVENT: ${RouteEventType.TRANSITION_EXIT_EVENT}");
277 print(
" - RouteEventType.TARGET_REACHED_EVENT: ${RouteEventType.TARGET_REACHED_EVENT}");
283 for (
final type in TurnType.values) {
289 void _demonstrateTurnEventUsage(TurnEvent event) {
291 TurnType type =
event.type;
292 print(
"Turn type: $type");
296 int angle =
event.angle;
297 print(
"Turn angle: $angle");
301 void _demonstrateTransitionEntryEventUsage(TransitionEntryEvent event) {
303 int from =
event.from;
304 print(
"Transition entry from: $from");
309 print(
"Transition entry to: $to");
313 void _demonstrateTransitionExitEventUsage(TransitionExitEvent event) {
315 int from =
event.from;
316 print(
"Transition exit from: $from");
321 print(
"Transition exit to: $to");
325 void _demonstrateTargetReachedEventUsage(TargetReachedEvent event) {
327 int index =
event.index;
328 print(
"Reached target index: $index");
332 LocationPoint point =
event.
point;
333 _demonstrateLocationPointUsage(point);
340 void _demonstrateLocationPointUsage(LocationPoint locationPoint) {
341 if (locationPoint ==
null) {
342 print(
"LocationPoint is null");
348 Point point = locationPoint.
point;
349 print(
"Location point: (${point.x}, ${point.y})");
355 print(
"Location ID: $locationId");
361 print(
"Sublocation ID: $sublocationId");
366 Point newPoint = Point(x: 25.0, y: 35.0);
367 LocationPoint newLocationPoint = LocationPoint(
373 "Created new location point: ${newLocationPoint.point.x}, ${newLocationPoint.point.y}",
381 void _demonstratePointUsage(Point point) {
383 print(
"Point is null");
390 print(
"Point X: $x");
396 print(
"Point Y: $y");
401 Point newPoint = Point(x: 15.0, y: 25.0);
402 print(
"Created new point: (${newPoint.x}, ${newPoint.y})");
410 print(
"=== Route Options ===");
414 RouteOptions routeOptions = RouteOptions(
416 maxProjectionDistance: 7.0,
420 "Created route options with smoothRadius: ${routeOptions.smoothRadius}, maxProjectionDistance: ${routeOptions.maxProjectionDistance}, maxAdvance: ${routeOptions.maxAdvance}",
425 List<RouteOptions> optionsList = [
427 RouteOptions(smoothRadius: 2.0, maxProjectionDistance: 10.0, maxAdvance: 1.0),
428 RouteOptions(smoothRadius: 1.0, maxProjectionDistance: 3.0, maxAdvance: 3.0),
431 for (
int i = 0; i < optionsList.length; i++) {
432 RouteOptions options = optionsList[i];
434 "Options ${i + 1}: smoothRadius=${options.smoothRadius}, maxProjectionDistance=${options.maxProjectionDistance}, maxAdvance=${options.maxAdvance}",
442 Future<void> demonstrateAdvancedAsyncRoutingFeatures() async {
443 print(
"=== Advanced Async Routing Features ===");
450 List<LocationPoint> destinations = [
452 point: Point(x: 50.0, y: 50.0),
457 point: Point(x: 100.0, y: 100.0),
462 point: Point(x: 150.0, y: 150.0),
469 List<RouteOptions> optionsList = [
470 RouteOptions(smoothRadius: 2.0, maxProjectionDistance: 5.0, maxAdvance: 2.0),
471 RouteOptions(smoothRadius: 3.0, maxProjectionDistance: 7.0, maxAdvance: 1.5),
472 RouteOptions(smoothRadius: 1.0, maxProjectionDistance: 3.0, maxAdvance: 2.5),
476 List<RouteSession> sessions = [];
477 for (
int i = 0; i < destinations.length; i++) {
482 sessions.add(session);
484 "Created session ${i + 1} for destination: ${destinations[i].point.x}, ${destinations[i].point.y}",
491 await Future.delayed(Duration(seconds: 1));
495 await Future.delayed(Duration(seconds: 3));
498 for (
int i = 0; i < sessions.length; i++) {
502 print(
"Cancelled session ${i + 1}");
505 await Future.delayed(Duration(seconds: 1));
513 print(
"=== RouteStatus Enum Usage ===");
517 print(
"Available RouteStatus values:");
518 List<RouteStatus> allStatuses = [
519 RouteStatus.missingGraph,
520 RouteStatus.missingPosition,
521 RouteStatus.missingRoute,
522 RouteStatus.missingProjection,
523 RouteStatus.newRoute,
525 for (RouteStatus status in allStatuses) {
526 print(
" - $status: ${status.toString()}");
530 RouteStatus testStatus = RouteStatus.newRoute;
531 switch (testStatus) {
532 case RouteStatus.newRoute:
533 print(
"Router is ready for navigation");
535 case RouteStatus.missingGraph:
536 print(
"Router is missing the route graph");
538 case RouteStatus.missingPosition:
539 print(
"Router is missing the current position");
541 case RouteStatus.missingProjection:
542 print(
"Current position is off the route graph");
544 case RouteStatus.missingRoute:
545 print(
"Router unable to find the route to the destination point");
555 print(
"=== Route Session Management ===");
562 Point destinationPoint = Point(x: 75.0, y: 75.0);
563 LocationPoint destinationLocationPoint = LocationPoint(
564 point: destinationPoint,
568 RouteOptions routeOptions = RouteOptions(
570 maxProjectionDistance: 5.0,
576 destinationLocationPoint,
579 print(
"Created session with default tag");
583 destinationLocationPoint,
587 print(
"Created session with 'elevator' tag");
594 Future.delayed(Duration(seconds: 2), () {
600 print(
"Removed listeners from sessions");
606 print(
"Cancelled both sessions");
632 Future<void> runExample() async {
633 print(
"=== AsyncRouteManager Example ===");
641 await demonstrateAdvancedAsyncRoutingFeatures();
644 await Future.delayed(Duration(seconds: 3));
647 print(
"=== Example completed ===");