---
title: "Flutter - Yeni Paywall Builder paywalllarını sunma"
description: "Adapty'nin monetizasyon özelliklerini kullanarak Flutter uygulamalarında paywalllar sunun."
---

Paywall Builder ile bir paywall özelleştirdiyseniz, onu kullanıcıya göstermek için mobil uygulama kodunuzda ayrıca render etmenize gerek yoktur. Bu tür bir paywall, hem ne gösterileceğini hem de nasıl gösterileceğini içerir.

:::warning

Bu kılavuz yalnızca SDK v3.2.0 veya üzerini gerektiren **yeni Paywall Builder paywallları** içindir. Paywall sunma süreci, farklı Paywall Builder sürümleriyle tasarlanan paywalllar ve remote config paywalllar için farklılık gösterir.

- **Remote config paywalllarını** sunmak için bkz. [Remote config ile tasarlanan paywall'ı render etme](present-remote-config-paywalls).

:::

Adapty Flutter SDK, paywallları sunmak için iki yöntem sunar:

- **Bağımsız ekran**

- **Gömülü widget**

## Bağımsız ekran olarak sunma \{#present-as-standalone-screen\}

Bir paywall'ı bağımsız ekran olarak görüntülemek için, [`createPaywallView`](flutter-get-pb-paywalls#fetch-the-view-configuration-of-paywall-designed-using-paywall-builder) metoduyla oluşturulan `view` üzerinde `view.present()` metodunu kullanın. Her `view` yalnızca bir kez kullanılabilir. Paywall'ı tekrar göstermeniz gerekiyorsa, yeni bir `view` örneği oluşturmak için `createPaywallView`'ı bir kez daha çağırın.

:::warning

Aynı `view`'ı yeniden oluşturmadan tekrar kullanmak `AdaptyUIError.viewAlreadyPresented` hatasına yol açabilir.
:::

```dart showLineNumbers title="Flutter"
try {
  await view.present();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}
```
:::tip

Adapty SDK'nın bir mobil uygulamaya nasıl entegre edildiğini gerçek bir örnekle görmek ister misiniz? Tam kurulumu, paywall'ların gösterimini, satın alma işlemlerini ve diğer temel işlevleri içeren [örnek uygulamalarımıza](sample-apps) göz atın.

:::

### Paywall'ı kapatma \{#dismiss-the-paywall\}

Paywall'ı programatik olarak kapatmanız gerektiğinde `dismiss()` metodunu kullanın:

```dart showLineNumbers title="Flutter"
try {
  await view.dismiss();
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}
```

### Diyalog gösterme \{#show-dialog\}

Android'de bir paywall görünümü sunulduğunda, yerel uyarı diyalogları yerine bu metodu kullanın. Android'de normal uyarılar paywall görünümünün arkasında kalır ve kullanıcılar tarafından görülemez. Bu metod, tüm platformlarda diyaloğun paywall'ın üzerinde düzgün şekilde gösterilmesini sağlar.

```dart showLineNumbers title="Flutter"
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 sunum stilini yapılandırma \{#configure-ios-presentation-style\}

`present()` metoduna `iosPresentationStyle` parametresini geçirerek paywall'ın iOS'ta nasıl sunulacağını yapılandırın. Parametre, `AdaptyUIIOSPresentationStyle.fullScreen` (varsayılan) veya `AdaptyUIIOSPresentationStyle.pageSheet` değerlerini kabul eder.

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

## Widget hiyerarşisine gömme \{#embed-in-widget-hierarchy\}

Bir paywall'ı mevcut widget ağacınıza gömmek için `AdaptyUIPaywallPlatformView` widget'ını doğrudan Flutter widget hiyerarşinizde kullanın.

```dart showLineNumbers title="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) {
  },
)
```

:::note 
Android platform görünümünün çalışması için `MainActivity`'nizin `FlutterFragmentActivity`'yi genişlettiğinden emin olun:

```kotlin showLineNumbers title="Kotlin"
class MainActivity : FlutterFragmentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}
```
:::