Отображение онбординга во Flutter SDK

Онбординги устарели в SDK v4 и будут удалены в одном из следующих релизов. Они больше не получают исправлений и улучшений. Используйте флоу: в отличие от онбордингов, которые работают внутри WebView, флоу рендерятся нативно на устройстве — это даёт более плавные анимации, единый нативный внешний вид, быструю загрузку и отсутствие зависимости от WebView. Подробнее: Получение флоу и пейволов и Отображение флоу и пейволов.

Если вы настроили онбординг с помощью билдера, вам не нужно беспокоиться о его рендеринге в коде Flutter-приложения — всё отображение уже описано внутри самого онбординга. Он содержит как то, что нужно показать, так и то, как это должно выглядеть.

Перед началом убедитесь, что:

  1. Вы установили Adapty Flutter SDK версии 3.8.0 или новее.
  2. Вы создали онбординг.
  3. Вы добавили онбординг в плейсмент.

Adapty Flutter SDK предоставляет два способа отображения онбордингов:

  • Отдельный экран (Standalone screen)

  • Встроенный виджет (Embedded widget)

Отображение как отдельный экран

Чтобы отобразить онбординг как отдельный экран, вызовите метод onboardingView.present() на объекте onboardingView, созданном методом createOnboardingView. Каждый view можно использовать только один раз. Если нужно снова показать онбординг, вызовите createOnboardingView ещё раз, чтобы создать новый экземпляр onboardingView.

Повторное использование того же onboardingView без его пересоздания может привести к ошибке AdaptyUIError.viewAlreadyPresented.

try {
  await onboardingView.present();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

Закрытие онбординга

Чтобы программно закрыть онбординг, используйте метод dismiss():

try {
  await onboardingView.dismiss();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

Настройка стиля отображения на iOS

Настройте способ отображения онбординга на iOS, передав параметр iosPresentationStyle в метод present(). Параметр принимает значения AdaptyUIIOSPresentationStyle.fullScreen (по умолчанию) или AdaptyUIIOSPresentationStyle.pageSheet.

try {
  await onboardingView.present(iosPresentationStyle: AdaptyUIIOSPresentationStyle.pageSheet);
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}

Встраивание в иерархию виджетов

Чтобы встроить онбординг в существующее дерево виджетов, используйте виджет AdaptyUIOnboardingPlatformView напрямую в иерархии виджетов Flutter.

AdaptyUIOnboardingPlatformView(
  onboarding: onboarding, // The onboarding object you fetched
  onDidFinishLoading: (meta) {
  },
  onDidFailWithError: (error) {
  },
  onCloseAction: (meta, actionId) {
  },
  onPaywallAction: (meta, actionId) {
  },
  onCustomAction: (meta, actionId) {
  },
  onStateUpdatedAction: (meta, elementId, params) {
  },
  onAnalyticsEvent: (meta, event) {
  },
)

Чтобы платформенный виджет на Android работал корректно, убедитесь, что ваш MainActivity наследует FlutterFragmentActivity:

class MainActivity : FlutterFragmentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

Загрузка во время онбординга

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

Управление сплэш-экраном через onDidFinishLoading

Этот подход доступен только при встраивании онбординга как виджета. Для отображения в виде отдельного экрана он недоступен.

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

При использовании встроенного виджета разместите свой виджет поверх него и скройте оверлей, когда сработает onDidFinishLoading:

AdaptyUIOnboardingPlatformView(
  onboarding: onboarding,
  onDidFinishLoading: (meta) {
    // Hide your custom splash screen or overlay here
  },
  // ... other callbacks
)

Кастомизация нативного загрузчика

Этот подход зависит от платформы и требует поддержки нативного UI-кода. Не рекомендуется, если вы не поддерживаете отдельные нативные слои в своём приложении.

Если нужно кастомизировать сам загрузчик по умолчанию, его можно заменить платформо-специфичными макетами. Этот подход требует отдельных реализаций для Android и iOS:

  • iOS: добавьте AdaptyOnboardingPlaceholderView.xib в ваш Xcode-проект
  • Android: создайте adapty_onboarding_placeholder_view.xml в res/layout и определите там заглушку

Настройка открытия ссылок в онбордингах поддерживается начиная с Adapty SDK v3.15.1.

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

Если вы хотите открывать ссылки во внешнем браузере, вы можете изменить это поведение, задав параметру externalUrlsPresentation значение AdaptyWebPresentation.externalBrowser:

Отключение отступов для безопасной зоны (Android)

По умолчанию на Android-устройствах экран онбординга автоматически добавляет отступы для безопасной зоны, чтобы не перекрывать системные элементы интерфейса — строку состояния и навигационную панель. Если вы хотите отключить это поведение и самостоятельно управлять разметкой, добавьте булев ресурс в ваше приложение:

  1. Перейдите в android/app/src/main/res/values. Если файл bools.xml отсутствует, создайте его.

  2. Добавьте следующий ресурс:

<resources>
    <bool name="adapty_onboarding_enable_safe_area_paddings">false</bool>
</resources>

Обратите внимание, что изменения применяются глобально для всех онбордингов в вашем приложении.