showDialog method
Implementation
Future<dynamic> showDialog(
UIRoute<DialogType> dialog, {
bool? forceGlobal,
bool? dismissable,
bool? uniqueInStack,
Object? id,
NavigationRouteBuilder? customRouteBuilder,
}) async {
final bool global = _checkGlobalNavigatorNeeded(
forceGlobal ?? dialog.defaultSettings.global,
);
final dialogSettings = UIRouteSettings(
global: global,
uniqueInStack: uniqueInStack ?? dialog.defaultSettings.uniqueInStack,
dismissable: dismissable ?? dialog.defaultSettings.dismissable,
id: id ?? dialog.defaultSettings.id,
name: dialog.name.toString(),
customRouteBuilder:
customRouteBuilder ?? dialog.defaultSettings.customRouteBuilder,
);
if (dialogSettings.uniqueInStack &&
!navigationStack.checkUnique(
routeName: dialog,
tab: currentTab,
global: true,
)) {
return;
}
final dialogName = dialog.name;
final navigator =
global ? bottomSheetDialogNavigatorKey : currentTabKeys[currentTab]!;
navigationStack.addRoute(
routeName: dialogName,
tab: currentTab,
settings: dialogSettings,
);
final dialogToOpen = dialog.child;
unawaited(onDialogOpened(dialogToOpen, dialogSettings));
final routeBuilder =
dialogSettings.customRouteBuilder ?? settings.routeBuilder;
// coverage:ignore-start
final stackLength = global
? navigationStack.globalNavigationStack.stack.length
: navigationStack.tabNavigationStack.stack[currentTab]!.length;
// coverage:ignore-end
final route = routeBuilder.buildDialogRoute(
navigator: navigator,
dismissable: dialogSettings.dismissable,
child: dialogToOpen,
// coverage:ignore-start
onPop: () {
final currentStackLength = global
? navigationStack.globalNavigationStack.stack.length
: navigationStack.tabNavigationStack.stack[currentTab]!.length;
if (currentStackLength == stackLength) {
pop(onlyInternalStack: true);
}
},
// coverage:ignore-end
);
final result = await navigator.currentState?.push(route);
return result;
}