reset method

Future<void> reset(
  1. String initialPath,
  2. List<DBPageBuilder> newPageBuilders, {
  3. Object? arguments,
  4. List<Destination>? initialPageHistory,
})

Update the list of page builder composing this delegate. initialPath to use for this delegate.

Implementation

Future<void> reset(
  final String initialPath,
  final List<DBPageBuilder> newPageBuilders, {
  Object? arguments,
  List<Destination>? initialPageHistory,
}) async {
  assert(newPageBuilders.isNotEmpty, "List of page builders can't be empty");

  _navigationObserver.reset();

  _pageBuilders
    ..clear()
    ..addAll(newPageBuilders);

  final Destination destination = Destination(
    path: initialPath,
    metadata: DestinationMetadata(
      arguments: arguments,
      history: initialPageHistory,
    ),
  );

  final DBPage? initialPage = await _pageBuilders.getPage(destination);

  if (initialPage == null) {
    throw PageNotFoundException(destination);
  }

  if (initialPageHistory != null && initialPageHistory.isNotEmpty) {
    final List<DBPage> prevPages =
        await _pageBuilders.createPages(initialPageHistory);

    _pages
      ..clear()
      ..addAll(prevPages)
      ..add(initialPage);
  } else {
    _pages
      ..clear()
      ..add(initialPage);
  }

  for (final Completer<Object?> tracker in _popResultTracker.values) {
    if (!tracker.isCompleted) {
      tracker.complete();
    }
  }

  notifyListeners();
}