goNamedWithCloseModal static method

void goNamedWithCloseModal(
  1. GoRouter router,
  2. String name, {
  3. required List<String> modalIds,
  4. Map<String, String> pathParameters = const <String, String>{},
  5. Map<String, String> queryParameters = const <String, String>{},
  6. Object? extra,
})

Closes modalIds and navigates to name as a single atomic step.

Implementation

static void goNamedWithCloseModal(
  GoRouter router,
  String name, {
  required List<String> modalIds,
  Map<String, String> pathParameters = const <String, String>{},
  Map<String, String> queryParameters = const <String, String>{},
  Object? extra,
}) {
  final currentState = router.state;
  var currentLocation = currentState.uri;

  for (final modalId in modalIds) {
    currentLocation = closeModalInUri(currentLocation, modalId);
  }

  final updatedQueryParams = <String, String>{
    for (final entry in currentLocation.queryParameters.entries)
      if (entry.key != 'modal') entry.key: entry.value,
    ...queryParameters,
    if (currentLocation.queryParameters.containsKey('modal') && !queryParameters.containsKey('modal'))
      'modal': currentLocation.queryParameters['modal']!,
  };

  goNamed(router, name, pathParameters: pathParameters, queryParameters: updatedQueryParams, extra: extra);
}