Понимание принципов перемещения по маршрутам в Flutter

Кто работал с маршрутами: https://flutter.su/tutorial/5-navigacija-i-marshrutizacija-v-prilozhenii. Не могу понять:

у меня есть маршруты:

'/home'
'/home/nav_one'
'/home/nav_one/nav_two'
'/home/contacts'
'/home/contacts/description'

и были выполнены переходы:

'/home' -> '/home/nav_one' -> '/home/nav_one/nav_two' -> '/home/contacts/description'

Куда вернёт команда: Navigator.pop(): В '/home/nav_one/nav_two' или '/home/contacts' ?

Если в первый вариант, тогда зачем мы пишем эти самые маршруты, ради удобства чтения и понимания?


Ответы (1 шт):

Автор решения: MiT

Как работает навигация в Flutter

Работает она по принципу стека (stack), он представляет из себя "стопку", где можно забрать тот предмет, который положил последним в "стопку". Для стека используются две основные операции - push и pop. Push - добавить элемент в стек, pop - удаляем элемент из стека.

введите сюда описание изображения

Все остальные разновидности операций для работы с навигацией, являются модифицируемыми версиями push и pop.

Для чего делать именованные маршруты? И как они работают...

В Flutter есть два вида создания нового маршрута.

По классам (декларация происходит в момент перехода):

Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => HomeScreen()),
);

И по имени:

Navigator.pushNamed(context, '/home_screen');

Но для работы по имени маршрута нам необходимо также задекларировать куда он будет вести:

{
  ...
  '/home_screen': (context) => HomeScreen(),
  ...
}

И передать это все в routes приложения (MaterialApp, CupertinoApp и т.д.).

У обеих подходов есть свои плюсы и минусы во время работы. Но чем больше приложение (от 15 экранов), тем сложнее становиться использовать навигацию по классам...


Navigator.pop(); вернет '/home/nav_one/nav_two'

→ Ссылка