Как стать автором
Обновить

Flutter: как мы выбирали навигацию для мобильного приложения?

Время на прочтение11 мин
Количество просмотров24K
Всего голосов 15: ↑14 и ↓1+13
Комментарии17

Комментарии 17

А в каком из рассмотренных вариантов из коробки работает возврат на предыдущую вкладку нижней навигации по нажатию кнопки "назад"?

В случае с Navigator для этого можно использовать WIllPopScope. Им оборачивается все приложение и мы всегда получаем событие нажатия кнопки назад. Тогда сами можем решать - будет ли это возврат внутри вкладки, смена вкладки на предыдущую, либо возврат назад в рамках самого верхнего уровня навигации.

Когда используем Router, мы переопределяем событие onPopPage у Navigator-а, который возвращается из RouterDelegate, и также сами решаем, что делать, нужно ли спускать это событие вниз по дереву навигации. В том числе можем вернуться на предыдущую вкладку. Из готовых примеров можно посмотреть на Routemaster - там реализовано такое поведение, причем его можно менять через конфигурацию роута.

Спасибо.

Такая же штука есть из коробки у библиотеки navigation_manager :)

А WillPopScope все еще ломает возвращение на предыдущую страницу свайпом в ios?

Когда оборачиваешь приложение целиком не ломает и не ломал. Честно говоря, я не сталкивался с ситуацией, когда это поведение ломалось, нашел только это issue.

Раза два читал их статью на медиуме про навигатор 2.0 и так не вкурил, как его готовить. У вас это получилось лучше, чем у команды флаттера!

Спасибо за позитивный фидбэк! Очень рад, что материл оказался для вас полезным, у самого были те же трудности) Для полного понимания очень советую посмотреть на код библиотек из статьи, можно найти интересные детали реализации.

Как то все это сложно.А Вы смотрели реализацию роутинга у GetX ?Там как раз все просто и понятно.В примерах что Вы привели настолько все запутано что отпадает желание вообще на флаттере работать

Сложность есть, не спорю, но она дает гибкость.

Если у вас условный стартап, с небольшой командой, либо просто нет необходимости в проекте делать больше, чем дает Navigator, то его может быть достаточно. Тогда нет смысла тратить ресурсы на другие решения, все-таки инструмент должен выбираться исхода из задач. В нашем случае проект рассчитан на долгосрочную поддержку и участие большого количества команд, поэтому гибкость была необходима.

А GetX также под капотом использует Navigator 2.0, так что его можно отнести к списку библиотек из статьи. Сложность осталась, но ее забрали на себя разработчики этих библиотек.

НЛО прилетело и опубликовало эту надпись здесь
Не обманывайтесь, GetX использует старую императивную навигацию. Это всего лишь GlobalKey, ведущий на обычный навигатор, с переименованными методами.

Раз
Два

Хотя бы одна из этих библиотек поддерживает neglect ?

Если под neglect имеете ввиду переход, без добавления записи в бэкстек браузера, то любая из библиотек это поддерживает при использовании встроенного метода Router.neglect. Так как мы не используем flutter for web, я такое не пробовал делать, но должно работать:

Пример кода
Router.neglect(context, () {
  WhatEverNavigationLib.navigate(somewhere);
});

Хотел бы предложить вам посмотреть и оценить библиотечку navigation_manager)
В ней пока мало функций, но возможно есть потенциал. Было бы хорошо узнать чье-нибудь мнение)

Приятная библиотека! Мне в целом нравится концепция поддеревьев, хорошая идея с duplicate strategy, у некоторых проектов может быть потребность в такой фиче.

Сейчас не хватает документации, чтобы было проще понять используемые концепции. Будет интересно посмотреть за развитием. Добавил в список библиотек 😉

НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий