openLink method
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;
}