handleNavigationAction method

Future<void> handleNavigationAction(
  1. String? sourceUrl,
  2. String targetUrl,
  3. KrakenNavigationType navigationType
)

Implementation

Future<void> handleNavigationAction(String? sourceUrl, String targetUrl,
    KrakenNavigationType navigationType) async {
  KrakenNavigationAction action =
      KrakenNavigationAction(sourceUrl, targetUrl, navigationType);

  KrakenNavigationDelegate _delegate = navigationDelegate!;

  try {
    KrakenNavigationActionPolicy policy =
        await _delegate.dispatchDecisionHandler(action);
    if (policy == KrakenNavigationActionPolicy.cancel) return;

    switch (action.navigationType) {
      case KrakenNavigationType.navigate:
        await rootController.load(KrakenBundle.fromUrl(action.target));
        break;
      case KrakenNavigationType.reload:
        await rootController.reload();
        break;
      default:
      // Navigate and other type, do nothing.
    }
  } catch (e, stack) {
    if (_delegate.errorHandler != null) {
      _delegate.errorHandler!(e, stack);
    } else {
      print('Kraken navigation failed: $e\n$stack');
    }
  }
}