Файлы конфигурации
FlutterFlow позволяет изменять файлы конфигурации вашего приложения и файлы, специфичные для платформ, не выходя из интерфейса FlutterFlow.
В некоторых случаях вам потребуется внести корректировки в файлы конфигурации, которые генерирует FlutterFlow. Обычно это необходимо при интеграции сторонних пакетов, таких как аналитика, рекламные сети и платежные решения.
Вот ключевые файлы конфигурации, которые вы можете редактировать:
AndroidManifest.xml— Настраивает разрешения приложения, метаданные и фильтры интентов для Android.build.gradle— Определяет конфигурации сборки, специфичные для Android, такие как версия compile SDK, зависимости, типы сборки и конфигурации подписи.- ProGuard files — Используются для сжатия и обф ускации кода в сборках Android.
Info.plist— Управляет настройками приложения для iOS, включая разрешения и конфигурации.Entitlements.plist— Определяет привилегии приложения для iOS, такие как push-уведомления и Apple Pay.AppDelegate.swift— Управляет поведением запуска приложения для iOS и конфигурацией во время выполнения. Здесь регистрируются плагины Flutter, инициализируются сервисы вроде Firebase, а также обрабатываются события жизненного цикла приложения и глубокие ссылки.main.dart— Точка входа в ваше приложение Flutter, где можно изменить логику на уровне приложения.
Хотя редактирование фа йлов конфигурации позволяет разблокировать расширенный функционал, это сопряжено с рисками. Небольшая ошибка (например, пропущенный тег XML или неверный ключ) может привести к сбою компиляции или аварийному завершению приложения во время выполнения. Неправильные изменения могут вызвать отклонение приложения в App Store или Play Store. Поэтому важно фиксировать свои изменения и тщательно тестировать приложение после каждого редактирования.
Вкратце, редактируйте нативный код только при необходимости и делайте это осторожно.
Редактирование файлов
FlutterFlow предоставляет два основных способа изменения нативных файлов: Добавление отдельных фрагментов и Режим ручного редактирования.
Вариант 1: Добавление отдельных фрагментов
Фрагменты — это небольшие фрагменты кода, которые вы можете вставить в нативные файлы в предопределенных местах. Вместо открытия всего файла для редактирования вы предоставляете только фрагмент, который хотите добавить, а FlutterFlow объединяет его с файлом в правильном месте. Это безопаснее и проще для небольших добавлений, таких как строка разрешения или тег метаданных.
Размещение фрагментов для Android
Давайте разберем, как добавить фрагмент для файла AndroidManifest.xml, где можно добавить следующие теги:
- Теги активности: Вставляет XML-код внутри блока
MainActivity. Обычно это используется дл я добавления дочерних XML-элементов в MainActivity, таких как<intent-filter>или<meta-data>, чтобы управлять аспектами вроде глубоких ссылок, применения темы или режима запуска. - Теги приложения: Используется для вставки свойств или атрибутов непосредственно в тег
<application>. Например, с помощью этого можно установить значения, такие какandroid:icon,android:label,android:allowBackup. - Теги компонентов приложения: Вставляет полные XML-компоненты внутри блока
<application>...</application>. Используйте это для добавления дополнительных активностей, сервисов, широковещательных приемников или поставщиков контента, от которых зависит ваше приложение.
Чтобы добавить фрагмент в AndroidManifest.xml, перейдите в Custom Code из левого меню навигации, выберите Configuration Files, затем выберите AndroidManifest.xml. Нажмите кнопку plus (+) рядом с тегом, куда хотите вставить фрагмент. Укажите имя (оно будет включено как комментарий в файл) и вставьте код фрагмента.
Размещение фрагментов для iOS
Для iOS разберем, как добавить фрагмент для файлов Info.plist и Entitlements.plist. В отличие от Android, здесь нет вложенной структуры приложения/активности. Вместо этого оба файла представляют собой словари пар ключ-значение. При добавлении фрагмента он размещается непосредственно под корневым элементом <dict> этих файлов plist.
Чтобы добавить фрагмент в нативные файлы iOS, перейдите в Custom Code (из бокового меню) > Configuration Files и выберите нужный файл. Нажмите кнопку plus (+), укажите описательное имя (оно появится как комментарий в файле) и вставьте код фрагмента.
- Вставка фрагментов недоступна для
main.dart. Вместо этого вы можете напрямую изменить файл с помощью Режима ручного редактирования. - Вы также можете использовать значения вашей среды разработки Environment Values и Library Values внутри фрагментов. Подробнее см. раздел Включение переменных в нативный код.
Вариант 2: Режим ручного редактирования
Для более сложных изменений можно включить Режим ручного редактирования, который разблокирует весь файл для свободного редактирования. Это похоже на открытие сырого файла в текстовом редакторе непосредственно в FlutterFlow. Обратите внимание, что ручной режим мощный, но его следует использовать с осторожностью.
Чтобы вручную редактировать нативные файлы, перейдите в Custom Code (из бокового меню) > Configuration Files, выберите файл для редактирования и нажмите кнопку lock, чтобы разблокировать его. Теперь вы можете свободно изменять файл.
После разблокировки файл остается в режиме ручно го редактирования, пока вы не заблокируете его снова. Повторная блокировка сбросит файл к версии, сгенерированной FlutterFlow, что перезапишет все ручные изменения.
- Не удаляйте существующие записи FlutterFlow, если не уверены в этом. Безопаснее добавлять или изменять только необходимые строки, оставляя остальное как есть.
- Используйте режим ручного редактирования для массовых или сложных правок, которые сложно выполнить с помощью фрагмента, например, для перестановки тегов, удаления чего-либо или вставки большого блока конфигурации. Всегда проверяйте, что приложение все еще собирается и запускается после таких правок.
- Вы также можете использовать значения вашей среды разработки Environment Values и Library Values внутри фрагментов. Подробнее см. раздел Включение переменных в нативный код.
Включение переменных в нативный код
При редактировании нативных файлов в FlutterFlow вам может потребоваться включить динамические значения, такие как ключи API, конфигурации приложения или настройки, специфичные для среды. Вместо жесткого кодирования этих значений непосредственно в AndroidManifest.xml, Info.plist или других нативных файлах вы можете использовать значения среды FlutterFlow Environment Values и Library Values, чтобы сохранить гибкость и безопасность вашего приложения.
Чтобы включить переменную в файл конфигурации, сначала создайте переменную на уровне файла и присвойте ей значение из Environment Values или Library Values. Затем сослаться на эту переменную с помощью формата плейсхолдера (например, {{apiToken}}) внутри файла конфигурации. Эти плейсхолдеры в нативных файлах автоматически заменяются на реальные значения в процессе генерации кода.
Вот как это сделать шаг за шагом:
Вы также можете напрямую вставить плейсхолдер переменной (например, {{variableName}}) в код с помощью фрагмента или режима ручного редактирования, и FlutterFlow автоматически создаст соответствующую переменную на уровне файла.
Вы можете использовать переменную на уровне файла в разных фрагментах внутри одного и того же файла.
Вот несколько примеров использования переменных в нативном коде:
Пример 1: Использование ключей API в AndroidManifest.xml
Предположим, вы интегрируете пакет Mapbox в приложение FlutterFlow, и для этого требуется ключ API в виде токена внутри файла AndroidManifest.xml. Вместо жесткого кодирования токена вы можете использовать переменную следующим образом:
<meta-data
android:name="com.mapbox.token"
android:value="{{MAPBOX_ACCESS_TOKEN}}"/>
Здесь {{MAPBOX_ACCESS_TOKEN}} — это переменная на уровне файла, которая содержит значение среды.
Пример 2: Настройка Info.plist для iOS
Для приложений iOS может потребоваться настройка App Transport Security (ATS), чтобы разрешить не-HTTPS-соединения. Вместо ручной установки NSAllowsArbitraryLoads в true вы можете использовать переменную:
<key>NSAllowsArbitraryLoads</key>
<{{ALLOW_HTTP_TRAFFIC}}/>
Если ALLOW_HTTP_TRAFFIC установлено в true в значении среды FlutterFlow, приложение разрешит HTTP-соединения.
Пример 3: Использование значений библиотеки
Если вы создаете библиотеку FlutterFlow и вам нужно включить публичные ключи API в нативный код, вы можете использовать Library Values в качестве плейсхолдеров. Это гарантирует, что при установке библиотеки пользователи смогут определить свои собственные значения.
Например, если ваша библиотека интегрируется с публичным API погоды, требующим ключ API (например, Open-Meteo или WeatherAPI для общего использования), лучше не добавлять ключ напрямую в файл манифеста. Вместо этого создайте переменную на уровне файла и присвойте ей значение библиотеки.
<application>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="{{WEATHER_API_KEY}}" />
</application>
Пользователь библиотеки определит свой ключ API в Library Values при импорте вашей библиотеки. Во время сборки FlutterFlow заменит {{WEATHER_API_KEY}} на ключ, определенный пользователем.