Все дело в том, что во Flutter это два разных понятия. Navigator представляет собой старый добрый механизм навигации (PUSH / POP и т.п.), то есть вы говорите навигатору «добавь страницу такую-то», «вернись назад» и т.п. Если в вашем приложении достаточно этого функционала, то посмотрите статью как возможность использовать в новом проекте.
Но мы все чаще сталкиваемся с ситуациями, когда даже в небольших проектах обычного навигатора недостаточно.
Так вот Routing — это заход команды Flutter на территорию декларативной навигации. Когда вы прописываете все возможные пути заранее, а в run time просто указываете роутеру (router) какую страницу вам требуется показать именно сейчас.
Для тех кому интересна подноготная как все устроено, то вот вам ссылка на техническую документацию команды Flutter разработки по данной теме.
Не буду вдаваться в подробности, как это все устроено под капотом. Есть статья на эту тему.
Декларативный Router (навигация) позволяет решить главную задачу — управление стеком навигации. Поднималась эта задача много раз, копья ломались чуть ли не с первого стабильного релиза Flutter. Есть много различных решений, которые позволяют реализовать данный функционал. Вы даже можете самостоятельно написать свой пакет, который позволит вам досконально контролировать работу роутера.
В частности, есть пакет auto_route. Главная особенность его работы: он генерирует навигационные файлы, которые используются в последствии.
Мы в своей работе остановились на разработке flutter.dev — это пакет go_router. У данного пакета было две главных проблемы:
Отсутствие возможности выполнить var res = await context.push('/homePage'). Приходилось изобретать велосипед, чтобы передавать результаты выполнения страницы или использовать классический навигатор Navigator.of(context). И данный функционал уже реализован!
И не менее важно то, что go_router не умел сохранять стек навигатора, когда вам требовалось использовать вложенную навигацию.
Лично мое мнение, что вложенная навигация это не очень хорошо. Пользователь путается, интерфейс перегружается, а на слабых устройствах могут быть подтормаживания, т.к. это всё висит в памяти устройства.
Go_router реализовал подобный функционал буквально недавно. И так как проект с открытым исходным кодом, реализован он сторонним разработчиком. Огромное спасибо ему за напор и веру :)
Для интересующихся можно посмотреть, как шел процесс принятия данного PR.
Ради справедливости стоит сказать, что вложенная навигация появилась в пакете go_router начиная с версии пакета 4.5.0, где-то в ноябре 2022г., но он не поддерживал сохранение состояний при переключении между вкладками. Такой «чемодан без ручки». Формально, вложенная навигация есть, но без костылей ей пользоваться не захочешь.