Изучение

Module, вкладки и вложенная навигация

Функциональные модули, размещение в приложении, независимые Navigator Scope и сохранение стека каждой вкладки.

v1.1.0Средний уровень

Module, вкладки и вложенная навигация

Module определяет Route функциональности. Mount размещает Module в конкретном приложении. Scope владеет одним стеком Navigator.

Функциональность экспортирует Module

dart
NavigationModule createCatalogModule() => NavigationModule(
  id: const NavigationModuleId('catalog'),
  routes: <NavigationRouteDefinitionBase>[catalogRoute, productRoute],
);

Module не знает, будет ли URL начинаться с /catalog или /shop и в какой вкладке он появится.

Приложение задаёт Mount

dart
NavigationMount(
  id: const NavigationMountId('customer-catalog'),
  moduleId: const NavigationModuleId('catalog'),
  scopeId: const NavigationScopeId('catalog-tab'),
  pathPrefix: '/catalog',
)

Отдельный Scope для каждой вкладки

Catalog и Profile должны быть дочерними Scope одного Shell. Отрисуйте выбранную ветвь:

dart
const NavigationActiveOutlet(parentScopeId: NavigationScopeId('shell'))

Переключите вкладку без уничтожения стека:

dart
navigation.activateBranch(const NavigationScopeId('profile-tab'));

Если Catalog содержит [Catalog, Product], переход в Profile и обратно вернёт пользователя на Product. resetBranch вызывайте только для намеренной очистки, например после выхода из аккаунта.

Полное приложение с NavigationBar находится в руководстве «Модульные вкладки».