multilevel_navigator 2.0.0 copy "multilevel_navigator: ^2.0.0" to clipboard
multilevel_navigator: ^2.0.0 copied to clipboard

Мультиуровневая адаптивная навигация для Flutter поверх go_router: 4 уровня, автоподбор колонок под экран, resizable-колонки, модалки и сохранение состояния.

2.0.0 #

Мажорное обновление зависимостей go_router и equatable.

  • Что: go_router 17→18 и equatable 2→3 — обе мажорные, версия пакета поднята вслед за ними.
  • Где: pubspec.yaml, example/pubspec.yaml, analysis_options.yaml (пакет и example).
  • Почему: go_router целиком реэкспортируется из lib/multilevel_navigator.dart (export 'package:go_router/go_router.dart'), поэтому его breaking-релиз (18.0.0: миграция на material_ui/cupertino_ui, минимум Flutter 3.44/Dart 3.12) становится breaking и для потребителей пакета. equatable 3.0.0 убрал EquatableMixin и изменил семантику сравнения — в самом пакете EquatableMixin не используется (проверено flutter analyze и тестами), но фиксация на ^3.0.0 конфликтует с приложениями, ещё сидящими на equatable ^2.x.
  • Было: go_router: ^17.3.0, equatable: ^2.0.8.

Changed #

  • go_router: ^17.3.0 → ^18.0.1
  • equatable: ^2.0.8 → ^3.0.0 (в pubspec.yaml и example/pubspec.yaml)
  • meta: ^1.17.0 → ^1.19.0
  • build_runner: ^2.15.0 → ^2.16.1
  • very_good_analysis: ^10.3.0 → ^11.0.0
  • uuid: ^4.5.3 → ^4.6.0 в example/pubspec.yaml
  • analysis_options.yaml пакета исключает build/**; example/analysis_options.yaml дополнительно исключает android/**, ios/**, web/**, windows/**, macos/**, linux/** — гигиена анализатора на случай появления кода/скриптов в этих папках

1.0.0 #

Первый релиз с обнулённым версионированием. Ниже — то, что реально есть в пакете на этот момент (история более ранних внутренних версий не сохраняется).

Навигация и адаптивный layout #

  • 4-уровневая навигация (level1 — панель навигации, level2 — список, level3/level4 — детали), конфигурируется через FeatureNavigationConfiguration + FeatureLevelItemConfiguration
  • Автоматический расчёт видимости уровней и режима отображения (DisplayMode: floatingPanel, singleColumn, singleColumnWithBottomNav, fixedMultiColumn, resizableMultiColumn) по ширине экрана (MultilevelDimensions, FeatureMultilevelRules/FeatureMultilevelDefaultRules)
  • Resizable-колонки (SplitPane) с ручным изменением ширины и опциональной начальной шириной per-фича (initialLevel2Width/initialLevel3Width/initialLevel4Width)
  • Сворачивание level2 по повторному тапу на активную фичу (Level2CollapseMode.remove/.hide) с анимацией (collapseAnimationDuration)
  • Сворачивание level3/level4 на мобильных с сохранением состояния (MobileLevelCollapseMode.preserve/.discard, context.collapseMobileLevel3/4(), expandMobileLevel3/4(), toggleMobileLevel3/4())
  • Поддержка Android 14+ Predictive Back через BackButtonHandler (interceptors и peek-interceptors)

Сохранение состояния #

  • PersistentBlocProvider<TBloc> — сохраняет BLoC на уровне фичи, даже если уровень временно скрыт по адаптивным правилам
  • NavigationStorage — запоминает полный URI каждой фичи при переключении и восстанавливает его через context.switchToFeature()

Модальные окна #

  • Открытие/закрытие через query-параметр modal (context.openModal/closeModal/toggleModals/closeAllModals/isModalOpen), поддержка нескольких модалок одновременно
  • Асинхронные модалки с результатом: openModalAsync<T>()/closeModalWithResult<T>()
  • Передача аргументов в модалку: openModalWithArgs()/readModalArgs<T>(), и через инстанс билдера: openModalInstance()/openModalInstanceAsync()
  • MultilevelModalPlatformBuilder — раздельные билдеры (dialog/bottom sheet) под платформу (mobile/desktop/web) и ширину экрана (singleColumn/multiColumn); устаревший MultilevelModalBuilder сохранён как fallback (@Deprecated)

Табы #

  • TabManagerConfiguration с автогенерацией уникального query-параметра из типа страницы, TabControllerMixin для синхронизации TabController с URL, виджеты MultilevelTabBar/MultilevelTabContent/MultilevelTabPage

Авторизация #

  • Разделение фич на авторизованные/неавторизованные через requiresAuthentication
  • AuthenticationStateNotifier (ChangeNotifier с геттерами isAuthenticated/isGuest) для редиректов роутера

Инфраструктура пакета #

  • DI-контейнер (MultilevelNavigatorDependencies, InheritedWidget), полностью скрытый за MultilevelNavigatorProvider
  • Внутренний LRU-кэш (core/cache/*) для вычислений видимости/layout/сохранённых ширин колонок — не публичный API
  • Валидация конфигурации фич при старте (FeatureConfigurationValidator)
  • Структура пакета по Clean Architecture (domain/infrastructure/application/presentation в каждой фиче)
1
likes
130
points
58
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Мультиуровневая адаптивная навигация для Flutter поверх go_router: 4 уровня, автоподбор колонок под экран, resizable-колонки, модалки и сохранение состояния.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

bloc_concurrency, collection, equatable, flutter, flutter_bloc, go_router, meta, provider, rxdart

More

Packages that depend on multilevel_navigator