multilevel_navigator 2.0.0
multilevel_navigator: ^2.0.0 copied to clipboard
Мультиуровневая адаптивная навигация для Flutter поверх go_router: 4 уровня, автоподбор колонок под экран, resizable-колонки, модалки и сохранение состояния.
2.0.0 #
Мажорное обновление зависимостей go_router и equatable.
- Что:
go_router17→18 иequatable2→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 и для потребителей пакета.equatable3.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.1equatable: ^2.0.8→^3.0.0(вpubspec.yamlиexample/pubspec.yaml)meta: ^1.17.0→^1.19.0build_runner: ^2.15.0→^2.16.1very_good_analysis: ^10.3.0→^11.0.0uuid: ^4.5.3→^4.6.0вexample/pubspec.yamlanalysis_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в каждой фиче)