openLink method

Future<bool> openLink(
  1. String link, {
  2. bool preferDialogs = false,
  3. bool preferBottomSheets = false,
  4. bool? fullScreenDialog,
  5. bool? replace,
  6. bool? replacePrevious,
  7. bool? uniqueInStack,
  8. bool? forceGlobal,
  9. bool? needToEnsureClose,
  10. bool? dismissable,
  11. Object? id,
  12. NavigationRouteBuilder? customRouteBuilder,
})

Tries to open link based on routes declaration and open mapped route

Returns false if no possible link handler found

Implementation

Future<bool> openLink(
  String link, {
  bool preferDialogs = false,
  bool preferBottomSheets = false,
  bool? fullScreenDialog,
  bool? replace,
  bool? replacePrevious,
  bool? uniqueInStack,
  bool? forceGlobal,
  bool? needToEnsureClose,
  bool? dismissable,
  Object? id,
  NavigationRouteBuilder? customRouteBuilder,
}) async {
  var routeHandler = _findHandlerForLink(
    link,
    preferBottomSheets: preferBottomSheets,
    preferDialogs: preferDialogs,
  );

  if (routeHandler == null) {
    routeHandler = _findRegexHandlerForLink(
      link,
      preferBottomSheets: preferBottomSheets,
      preferDialogs: preferDialogs,
    );

    if (routeHandler == null) {
      return false;
    }
  }

  final route = await routeHandler.parseLinkToRoute(link);
  final routeData = route;

  if (routeData != null) {
    final bool global = _checkGlobalNavigatorNeeded(
      forceGlobal ?? routeData.defaultSettings.global,
    );

    final routeSettings = UIRouteSettings(
      fullScreenDialog:
          fullScreenDialog ?? routeData.defaultSettings.fullScreenDialog,
      global: global,
      uniqueInStack: uniqueInStack ?? routeData.defaultSettings.uniqueInStack,
      needToEnsureClose:
          needToEnsureClose ?? routeData.defaultSettings.needToEnsureClose,
      dismissable: dismissable ?? routeData.defaultSettings.dismissable,
      id: id ?? routeData.defaultSettings.id,
      replace: replace ?? routeData.defaultSettings.replace,
      replacePrevious:
          replacePrevious ?? routeData.defaultSettings.replacePrevious,
      name: routeData.name.toString(),
      customRouteBuilder:
          customRouteBuilder ?? routeData.defaultSettings.customRouteBuilder,
    );

    await routeHandler.processRoute(
      routeData.copyWithDefaultSettings(routeSettings),
    );

    return true;
  }

  return false;
}