Flutter - Отображение пейволов, созданных в новом Paywall Builder

Если вы создали пейвол в Paywall Builder, вам не нужно писать код для его отрисовки — пейвол уже содержит всё необходимое: что показывать и как показывать.

Этот гайд предназначен только для пейволов нового Paywall Builder, которые требуют SDK версии 3.2.0 или выше. Процесс отображения пейволов различается в зависимости от версии Paywall Builder, с помощью которой они созданы, а также для пейволов на основе Remote Config.

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

  • Отдельный экран

  • Встроенный виджет

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

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

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

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

Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наши примеры приложений — они демонстрируют полную настройку: отображение пейволов, совершение покупок и другие базовые функции.

Закрытие пейвола

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

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

Показ диалога

Используйте этот метод вместо стандартных диалоговых окон, когда пейвол отображается на Android. На Android обычные диалоги появляются позади пейвола и остаются невидимыми для пользователей. Этот метод гарантирует корректное отображение диалога поверх пейвола на всех платформах.

try {
  final action = await view.showDialog(
    title: 'Close paywall?',
    content: 'You will lose access to exclusive offers.',
    primaryActionTitle: 'Stay',
    secondaryActionTitle: 'Close',
  );
  
  if (action == AdaptyUIDialogActionType.secondary) {
    // User confirmed - close the paywall
    await view.dismiss();
  }
  // If primary - do nothing, user stays
} catch (e) {
  // handle error
}

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

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

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

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

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

AdaptyUIPaywallPlatformView(
  paywall: paywall, // The paywall object you fetched
  onDidAppear: (view) {
  },
  onDidDisappear: (view) {
  },
  onDidPerformAction: (view, action) {
  },
  onDidSelectProduct: (view, productId) {
  },
  onDidStartPurchase: (view, product) {
  },
  onDidFinishPurchase: (view, product, purchaseResult) {
  },
  onDidFailPurchase: (view, product, error) {
  },
  onDidStartRestore: (view) {
  },
  onDidFinishRestore: (view, profile) {
  },
  onDidFailRestore: (view, error) {
  },
  onDidFailRendering: (view, error) {
  },
  onDidFailLoadingProducts: (view, error) {
  },
  onDidFinishWebPaymentNavigation: (view, product, error) {
  },
)

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

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