Настройка проекта

На этой странице собрано то, что определяет, где приложение работает и на что оно имеет право: разрешения, платформы, языки и обучающий тур по интерфейсу.

Разрешения

Прежде чем взять личные данные пользователя — местоположение, здоровье, фотографии, доступ к камере и микрофону, — приложение обязано объяснить, зачем они нужны, и получить согласие. Для этого и существует запрос разрешения.

Разрешения FlutterFlow добавляет сам, как только вы подключаете функциональность, которая обращается к личным данным. А вот сообщение к каждому разрешению пишете вы — именно его человек читает, решая, соглашаться ли.

инфо
  • На Android свои сообщения не показываются: тексты отсюда видны только на iOS. Как их формулировать, описано в Human Interface Guidelines Apple.
  • Разрешения, добавленные FlutterFlow, отключить нельзя — так меньше проблем при проверке приложения в магазине.
  • См. также действие Request Permission.

permissions-fi

Запрос доступа к камере перед съёмкой

Сообщение к разрешению

Стандартные сообщения FlutterFlow подставляет сам, но их нужно переписать под своё приложение: пользователь должен понять, зачем именно вам эти данные.

Порядок действий:

  1. Откройте Settings & Integrations в левом меню.
  2. В разделе Project Setup выберите Permissions.
  3. Отредактируйте сообщение для каждого разрешения. Для тех, что ещё не добавлены, включите переключатель и введите текст. В приложении это сообщение появится в системном диалоге — между названием приложения и кнопками.

У разрешений, которые нельзя отключить, пустое сообщение означает, что в диалоге останется подсказка по умолчанию.

Adding permission message

Собственное разрешение

Иногда кастомный виджет или действие требуют разрешения, которого нет в списке, — например, распознавание речи. Такое разрешение добавляется вручную для Android и iOS.

Порядок действий:

  1. Откройте Settings & Integrations в левом меню.
  2. В разделе Project Setup выберите Permissions.
  3. Нажмите + Add Permission.
  4. Введите iOS Permission key — скажем, NSSpeechRecognitionUsageDescription или NSMicrophoneUsageDescription.
  5. Введите Android Permission name — например, RECORD_AUDIO или CAMERA.
  6. Напишите Permission Message: чётко, как именно используются данные.
  7. Нажмите значок подтверждения справа.

инфо
Перевод сообщений

Сообщения о разрешениях можно перевести на другие языки — см. руководство по локализации.

Действие Request Permission

Это действие запрашивает разрешение перед обращением к личным данным: местоположению, микрофону, контактам, фотографиям.

Нужно оно там, где вы добавили кастомный виджет или действие без собственного механизма запроса.

инфо
  • Работает только на мобильных платформах.
  • Для разрешения Bluetooth диалог не показывается.

Пользователь согласился

Пользователь отказал

Как добавить действие

  1. Добавьте новое действие и выберите Request Permissions в разделе Alerts/Notifications.
  2. Задайте Permission Type. В списке видны только те разрешения, для которых написано сообщение.
  3. Добавьте условное действие, чтобы проверить ответ. В условии выберите Permission > имя разрешения.
  4. Под TRUE положите действия на случай согласия, под FALSE — на случай отказа, и нажмите Close.

Платформы

Сгенерированный проект по умолчанию работает на Android, iOS и в вебе. Чтобы собрать десктопную версию — macOS, Windows, Linux — платформу нужно включить здесь.

Дополнительные параметры Android

  • Kotlin Version — версия Kotlin в Android-проекте. Меняют её, когда этого требует библиотека или инструмент.
  • Minimum SDK Version — самая старая версия Android, на которой приложение запустится. Чем выше значение, тем больше новых API доступно и тем меньше устройств, куда приложение можно поставить.
  • Compile SDK Version — версия Android, под которую компилируется код; от неё зависит набор доступных API.
  • Target SDK Version — версия, на которую приложение рассчитано. По ней Android решает, применять ли к вашему приложению новые правила поведения.

Дополнительные параметры iOS

  • Disable iPad Support — если приложение сделано под iPhone и на планшете выглядит неважно, поддержку iPad лучше отключить.
  • Minimum iOS Version — самая старая версия iOS, на которой приложение запустится.

Дополнительные параметры веба

  • Use Original Engine Initialization — исходная инициализация веб-движка Flutter. Иногда ускоряет загрузку опубликованного приложения; включайте, если с обычной инициализацией есть проблемы.
  • Use CanvasKit — отрисовка через WebAssembly: выше качество и производительность, особенно на сложной графике и анимации.
внимание

Код для macOS и Windows FlutterFlow сгенерировать умеет, но эти платформы пока в статусе альфы и предоставляются как есть. Инфраструктуры для сборки, отладки и запуска под них нет, и поддержка FlutterFlow с такими сборками не помогает. При этом сгенерированный код открывается и собирается обычными средствами Flutter — в Android Studio или VS Code.

Оговорка касается только платформ публикации, но не самого десктопного приложения FlutterFlow.

Языки

О поддержке нескольких языков — в руководстве по локализации.

Обучающие подсказки

Walkthrough — это тур по приложению, который показывают при первом запуске: серия подсказок, объясняющих, где что находится.

В новостном приложении такой тур может по очереди подсветить видео в статье, подписку на обновления и фильтр по тегам.

Тур собирается в три шага:

  1. Создать тур
  2. Запустить его действием
  3. Узнавать о завершении и пропуске

1. Создание тура

  1. Откройте Settings and Integrations > General > Walkthroughs и нажмите Create New.

  2. Введите Name и Description, выберите Page, на которой тур будет показан. Имя понадобится, чтобы запустить тур.

  3. Добавьте шаги. Каждый шаг — отдельная подсказка, подсвечивающая элемент интерфейса:

    1. Нажмите + Add Step.
    2. Выберите виджет для подсветки: нажмите Widget Unset, укажите его в превью справа и нажмите Confirm.
    3. Решите, что показать рядом с подсвеченным виджетом. Это может быть простой текст или компонент — скажем, надпись со стрелкой. Нажмите значок ромба, создайте компонент и укажите его в Content.
    4. Положение подсказки задаётся свойством Content Alignment.
    5. Форму подсветки выбирают в Focus Shape: Circle или Rectangle.
    6. Overlay Color — цвет затемнения вокруг подсвеченного элемента.
    7. Кнопка пропуска добавляется автоматически; её положение задаёт Skip Alignment.
    8. Повторите для остальных элементов, о которых хотите рассказать.
  4. Нажмите Start Preview и пролистайте шаги стрелками, чтобы посмотреть, что получилось.

  5. Порядок шагов меняется так: включите Reorder и переставьте их стрелками.

  6. Нажмите Add Walkthrough, чтобы сохранить.

2. Действие Start Walkthrough

Готовый тур запускается действием Start Walkthrough — обычно при загрузке страницы.

  1. Откройте страницу, на которой должен показываться тур.
  2. В панели свойств выберите Actions и нажмите Open — откроется редактор действий.
  3. Убедитесь, что выбран триггер On Page Load, и нажмите + Add Action.
  4. Найдите действие Walkthrough > Start Walkthrough (в разделе Widget/UI Interactions).
  5. Нажмите Select Walkthrough и выберите созданный тур.

3. Завершение и пропуск

Иногда нужно знать, досмотрел пользователь тур или пропустил: отправить событие в аналитику, открыть следующую страницу, включить какую-то возможность.

Когда на странице есть тур, появляются два колбэка:

  • On Walkthrough Complete — пользователь прошёл все шаги.
  • On Walkthrough Skip — пользователь нажал «пропустить».

Видео

Если удобнее посмотреть:

Частые вопросы

Подсказка съезжает и подсвечивает не тот виджет

Обычно так бывает, когда анимация виджета и запуск тура происходят одновременно: тур запоминает положение виджета до того, как анимация закончилась, и после её завершения элемент оказывается в другом месте.

Пример съехавшей подсветки

Лечится задержкой: добавьте перед запуском тура действие Wait длительностью не меньше, чем сама анимация.

fix-align-issues

Виджет на прокручиваемой странице не подсвечивается

Это известное ограничение: элементы, до которых нужно доскроллить, подсветить пока не получается. Временное решение — разместить такой виджет в видимой без прокрутки части экрана.

перевод официальной документации FlutterFlow

обновлено

ESC