---
metadata:
  - name: generator
    content: Diplodoc Platform v5.55.2
alternate:
  - https://ads.yandex.com/helpcenter/en/easy/integration/flutter/formats/rewarded.md
  - https://ads.yandex.com/helpcenter/ru/easy/integration/flutter/formats/rewarded.md
  - https://ads.yandex.com/helpcenter/zh/easy/integration/flutter/formats/rewarded.md
  - href: en/easy/integration/flutter/formats/rewarded.md
    type: text/markdown
    title: Markdown version
  - href: ../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://ads.yandex.com/helpcenter/en/llms.txt

# Rewarded ads

<!-- source: en/easy/_includes/sdk-guide.md -->
Rewarded ads are a full-screen ad format where users get bonuses or other rewards (for example, in-game coins, retries, access to premium features, and so on) for watching ads.

{% note info %}

The user **decides** whether to skip the ad or watch it and get a reward.

{% endnote %}
<!-- endsource: en/easy/_includes/sdk-guide.md -->

<!-- source: en/easy/_includes/notes-flutter-easy-guide.md -->
{% note info %}

Examples showing how all the format types work are available in the [demo project](https://ads.yandex.com/helpcenter/en/easy/integration/flutter/testing.md#demo).

{% endnote %}
<!-- endsource: en/easy/_includes/notes-flutter-easy-guide.md -->

#|
||

**Entity**

|

**Description**

||
||

`adUnitId`

|

Use:

- **Development mode** to work with [demo ad units](https://ads.yandex.com/helpcenter/en/easy/integration/flutter/testing.md#blocks).

- **Production mode** to work with `R-M-XXXXXX-Y` (for the actual ID, check the Yandex Advertising Network interface). `R-M-XXXXXX-Y` is a template for your actual ad unit ID that will be used to receive various creatives.

||
|#

## Example of creating a rewarded ad

```dart
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:yandex_mobileads/mobile_ads.dart';

class RewardedPage extends StatefulWidget {
  const RewardedPage({super.key});

  @override
  State<RewardedPage> createState() => _RewardedPageState();
}

class _RewardedPageState extends State<RewardedPage> {
  static const _tag = 'Rewarded';
  static const _adUnitId = 'demo-rewarded-yandex';

  final RewardedAdLoader _loader = RewardedAdLoader();
  RewardedAd? _ad;
  String _status = 'Initializing...';
  String _reward = '';

  @override
  void initState() {
    super.initState();
    _init();
  }

  @override
  void dispose() {
    _ad?.destroy();
    super.dispose();
  }

  Future<void> _init() async {
    setState(() => _status = 'Loading ad...');
    try {
      final ad = await _loader.loadAd(
        adRequest: AdRequest(adUnitId: _adUnitId),
      );
      if (!mounted) {
        ad.destroy();
        return;
      }
      _ad = ad;
      setState(() => _status = 'Showing...');
      await _show();
    } on AdRequestError catch (error) {
      debugPrint('[$_tag] onAdFailedToLoad: ${error.description}');
      if (mounted) setState(() => _status = 'Error: ${error.description}');
    }
  }

  Future<void> _show() async {
    final ad = _ad;
    if (ad == null) return;

    ad.setAdEventListener(
      eventListener: RewardedAdEventListener(
        onAdShown: () => debugPrint('[$_tag] onAdShown'),
        onAdDismissed: () {
          debugPrint('[$_tag] onAdDismissed');
          if (mounted) setState(() => _status = _reward.isEmpty ? 'Closed' : 'Reward received!');
        },
        onAdClicked: () => debugPrint('[$_tag] onAdClicked'),
        onAdFailedToShow: (error) {
          debugPrint('[$_tag] onAdFailedToShow: ${error.description}');
          if (mounted) setState(() => _status = 'Show error: ${error.description}');
        },
        onAdImpression: (ImpressionData impressionData) =>
            debugPrint('[$_tag] onAdImpression: $impressionData'),
        onRewarded: (reward) {
          debugPrint('[$_tag] onRewarded: ${reward.amount} ${reward.type}');
          if (mounted) setState(() => _reward = '+${reward.amount} ${reward.type}');
        },
      ),
    );

    await ad.show();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Rewarded')),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            if (_reward.isEmpty && !_status.contains('Error') && !_status.contains('Closed'))
              const CircularProgressIndicator(),
            const SizedBox(height: 16),
            Text(_status),
            if (_reward.isNotEmpty) ...[
              const SizedBox(height: 16),
              Text(_reward, style: const TextStyle(color: Colors.green, fontSize: 24, fontWeight: FontWeight.bold)),
            ],
          ],
        ),
      ),
    );
  }
}

```

## Checking integration

<!-- source: en/easy/_includes/notes-flutter-easy-guide.md -->
Build and run your project. You can check if the integration is successful by searching the `YandexAds` keyword in **Logcat** in **Android Studio**:
<!-- endsource: en/easy/_includes/notes-flutter-easy-guide.md -->

```
[Integration] Ad type rewarded was integrated successfully
```
