Понимание принципов перемещения по маршрутам в 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 шт):
Как работает навигация в 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'
