Адаптивный макет
FlutterFlow отлично подходит для создания приложений, которые адаптированы под различные размеры экранов, устройства и платформы. Очень важно, чтобы дизайн наших экранов оставался привлекательным на всех этих вариациях. Ниже мы рассмотрим различные методы улучшения отзывчивости ваших пользовательских интерфейсов.
Примечание:
Просим ознакомиться с примерами в порядке их представления, поскольку они используют один и тот же пример. Переход в разделы может вызвать путаницу.
Глобальные свойства
Давайте начнем с демонстрации изменения значений ширины и высоты экрана при переключении между устройствами в режиме тестирования.
Сначала создайте новый проект. На домашней странице, внутри родительского виджета столбца (Column), добавьте два виджета Text. Обозначьте один как "Ширина экрана", а другой как "Высота экрана".
Затем мы отобразим изменяющиеся значения рядом с этими названиями. Для каждого виджета Text установите его значение в переменную. Выберите Объединить текст из доступных опций. Первое значение для Text должно быть "Ширина экрана: " или "Высота экрана: ".
Затем добавьте еще одно значение Text, которое покажет соответствующее значение. Это второе значение Text также устанавливается из переменной. Выберите 'Глобальные свойства', а затем выберите либо 'Ширина экрана', либо 'Высота экрана' из списка. Эти параметры содержат текущие значения ширины/высоты экрана. Повторите этот процесс для обоих виджетов Text.
Теперь, когда вы переключаетесь в режим тестирования и пробуете разные устройства, вы увидите, как значения ширины и высоты экрана обновляются соответственно.
Расширение и гибкость
Давайте рассмотрим основной метод сделать строки и колонки адаптивными под различные размеры экранов. При проектировании строки (Row) или столбца (Column) важно избегать присваивания фиксированных размеров дочерним элементам, если это не требуется специально по дизайну.
Рассмотрим, например, панель навигации, которую мы создаем для нашей веб-версии. Она включает название страницы, несколько иконок навигации и поисковую строку. Обратите внимание, как поисковая строка автоматически изменяет свою длину в зависимости от доступной ширины. Эта адаптивность достигается за счет того, что ширина дочерних элементов установлена относительно доступного пространства в горизонтальной секции.
Для создания такой же панели навигации создайте следующую иерархию виджетов:
- Container (назван как webHeader)
- Row
- Row
- TextField (назван как searchBar)
- IconButton
Вторая строка дополнительно разбивается следующим образом:
- Row 2
- Text (назван как pageName)
- Row 3 (назван как navIcons)
- IconButton
- IconButton
- IconButton
Как видно, поисковая строка в данный момент занимает максимальное доступное пространство. Однако мы хотим, чтобы и Row 2
, и searchBar
делили это пространство поровну. Чтобы добиться этого, просто отрегулируйте свойства виджетов.
Для Row 2
установите его свойство Expansion в Гибкий (средняя иконка) и присвойте значение Flex равное 1. Повторите те же шаги для searchBar
. Эти изменения гарантируют, что им будет выделено место в соотношении 1:1, исходя из доступного пространства. После такой регулировки вы заметите, что оставшееся пространство, идущее после размещения search IconButton справа, будет равномерно разделено между Row 2
и searchBar
.
Приглашаем вас опробовать различные варианты размеров веб-экрана, чтобы увидеть, насколько хорошо это адаптируется.
В зависимости от ваших дизайнерских потребностей существуют различные подходы к управлению пространством. Рассмотрим другой сценарий: что если мы хотим, чтобы searchBar
всегда занимала 40% ширины экрана, а Row 2
занимала оставшееся пространство после размещения searchBar
и search IconButton
?
Для э того сначала установите ширину searchBar
в 40% и его расширение в По умолчанию (первая иконка).
Затем отрегулируйте свойство Expansion виджета Row 2
на Расширение (третья иконка). С этими настройками Row 2
будет теперь занимать все свободное место после выделения 40% searchBar
и размещения search IconButton
.
Примечание: Мы добавили немного отступов и улучшили интерфейс searchBar
, чтобы улучшить его внешний вид.
Можно также улучшить расстояние между pageName
и navIcons
, отрегулировав выравнивание MainAxisAlignment на В промежутках (последняя иконка).
Не стесняйтесь опробовать это с различными размерами экрана, чтобы увидеть, насколько эффективно это адаптируется к доступному пространству.
Метод Wrap
Другой эффективный метод улучшения отзывчивости строки или столбца, содержащего несколько элементов, - использование виджета Wrap.
Рассмотрим сценарий с рядом категориальных карточек.
Вы можете заметить, что при из менении размера экрана, чтобы имитировать мобильные размеры, карточки начинают обрезаться по краям.
Для решения этой проблемы просто замените родительский виджет Row на виджет Wrap.
Убедитесь, что в настройках Wrap установлено направление Wrap на 'Горизонтальный'. После этого вы увидите, как ранее выходившие за границы карточки аккуратно перемещаются на следующую строку, как показано в примере.
Адаптивные точки остановки
Переходим к более сложным сценариям макета, где интерфейс значительно отличается между мобильными и веб-платформами. Важно понимать точки остановки (breakpoints) в адаптивном дизайне.
Точки остановки в отзывчивом дизайне подобны порогам для разных размеров экранов. Они действуют как специальные точки, где макет пользовательского интерфейса соответствует определенным требованиям к размеру экрана, а затем изменяется, чтобы адаптироваться к э тим требованиям. Когда размер экрана пересекает один из этих порогов, макет корректируется.
В FlutterFlow есть стандартные точки остановки для различных размеров экранов, но их также можно настроить, чтобы лучше соответствовать потребностям дизайна вашего приложения.
Настройка адаптивных точек остановок
Перейдите в Настройки темы > Система дизайна и найдите раздел Точки остановок с уже установленными значениями по умолчанию. При необходимости вы можете настроить их.
Следующие разделы также будут сильно зависеть от Адаптивной видимости, поэтому давайте продолжим.