DroidScript

Thunkable X: навигация

© 2016-2018 Автор материалов - Александр Страшко admin@starport.ru
DroidScript
инструменты для мобильной разработки

Thunkable X: навигация

© 2016-2018 Автор материалов - Александр Страшко admin@starport.ru
Thunkable X  
Дата изменения 17.06.2018

При разработке многоэкранного приложения возникает вопрос организации переходов между ними. Для перехода с одного экрана на другой можно использовать:

Каждый из доступных способов имеет свои преимущества и особенности работы, о которых нужно хотя бы иметь представление, чтобы случайно не создать экран-ловушку или неудобную в использовании навигацию. Для этого также нужно понимать то, когда выполняются блоки "Screen.Starts" и "Screen.Opens":

Самым простым способом перехода на другой экран является использование блока "navigate to". Если экраны не находятся внутри контейнера какого-либо навигационного компонента (Tab, Draw или Stack navigator), то при каждом вызове блока "navigate to" в стеке экранов будет создан новый экран. Например, если пользователь с использованием данного блока сделал переход

Screen1 -> Screen2 -> Screen1 -> Screen2,

то в стеке экранов будет 4 экрана, а не 2, как может показаться. При этом переход на новый экран происходит с анимацией и выполняются блоки "Screen.Starts" и "Screen.Opens".

Вернутся на предыдущий открытый экран (в стеке) можно при помощи swipe-жеста. При этом будет вызван только блок Screen.Opens.

Базовая навигация

Показанная базовая навигация содержит в себе ловушку. Иногда пользователи хотят при запуске приложения показать экран-заставку, который в течение какого-то времени показывается, а затем по таймеру происходит переход на другой экран. Если после этого пользователь при помощи swipe-жеста вернётся на данный экран-заставку, то больше перейти с него он уже никуда не сможет - таймер сработал, а блок Screen.Starts, в котором, возможно, находится блок запуска таймера, не вызывается при возврате на ранее открытый экран. Для выхода из этой ситуации можно:

Если экран-заставку нужно показать только один раз при запуске приложения, то первые два варианта не подходят, так как пользователь может сколько угодно раз возвращаться к ним. Последний вариант является подходящим, но тогда станет невозможным использовать для перехода между ними swipe-жест.

Если экраны находятся внутри контейнеров навигационных компонентов, то при использовании блока "navigate to" происходит только переход на указанный экран без создания нового экрана и помещения его в стек экранов.

Компонент навигации Tab navigator используется для перехода между независимыми друг от друга экранами при помощи вкладок. Показ области вкладок можно отключить и тогда переход можно осуществлять при помощи блока navigate to" или swipe-жеста. С помощью последнего можно переходить как на предыдущий, так и на следующий по порядку экран.

Компонент навигации Stack navigator используется для организации между зависимых друг от друга экранов - "главный экран > вспомогательный > главный экран". Например, на главном экране выводится список имён пользователей, при выборе которого на вспомогательном экране показывается его телефон и адрес. Tab navigator в таких случаях не подходит.

Для перехода на вспомогательный экран используется блок "navigate to". В результате этого создаётся новый экран, который помещается в стек и выполняются блоки "Screen.Starts" и "Screen.Opens". Для возврата обратно на главный экран используется либо кнопка возврата в заголовке или swipe-жест. Использование на вспомогательном экране блока "navigate to" для перехода на главный экран является ошибкой, та как при этом в стек экранов будет добавлен новый экран, на который можно перейти по swipe-жесту.

Stack-навигация

Stack-навигация работает и при использовании блока "link to". Этот блок позволяет открыть внешний браузер или приложение, установленное на телефон, которое имеет глубокую ссылку.

Компонент навигации Drawer navigator интересен тем, что в отличие от других компонентов навигации позволяет работать с большим количеством экранов благодаря прокручивающемуся списку, расположенному на выдвижной панели. При переходе на любой выбранный экран выполняются блоки "Screen.Starts" и "Screen.Opens".

Разные варианты навигации и компоненты можно использовать совместно. Например, в Tab navigator поместить Stack navigator и др.

При совместном использовании компонентов и блоков навигации нужно учитывать их действие друг на друга и проверять все возможные варианты переходов между экранами.

Thunkable X