admob_kit_x 0.1.0 copy "admob_kit_x: ^0.1.0" to clipboard
admob_kit_x: ^0.1.0 copied to clipboard

High-level AdMob integration for Flutter. Banner, interstitial, rewarded, and app-open ads with UMP consent flow, automatic test/production ID switching, retry with exponential backoff, and frequency [...]

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_admob_kit/flutter_admob_kit.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 1. Create an AdManager with your ad unit IDs.
  //    In debug mode, test IDs are used automatically.
  final adManager = AdManager(
    config: AdConfig(
      bannerId: AdUnitId(
        android: 'ca-app-pub-3940256099942544/6300978111',
        ios: 'ca-app-pub-3940256099942544/2934735716',
      ),
      interstitialId: AdUnitId(
        android: 'ca-app-pub-3940256099942544/1033173712',
        ios: 'ca-app-pub-3940256099942544/4411468910',
      ),
      rewardedId: AdUnitId(
        android: 'ca-app-pub-3940256099942544/5224354917',
        ios: 'ca-app-pub-3940256099942544/1712485313',
      ),
      frequencyCapSeconds: 30,
    ),
  );

  // 2. Set up event tracking before initializing.
  adManager.onAdEvent.listen((event) {
    debugPrint('[AdEvent] ${event.type.name}: ${event.adUnitId ?? ""}');
  });

  // 3. Initialize (also runs UMP consent flow).
  await adManager.initialize();

  // 4. Preload ads.
  await Future.wait([
    adManager.loadInterstitial(),
    adManager.loadRewarded(),
  ]);

  runApp(ExampleApp(adManager: adManager));
}

/// Root widget for the example app.
class ExampleApp extends StatelessWidget {
  /// Creates the example app.
  const ExampleApp({required this.adManager, super.key});

  /// The ad manager instance.
  final AdManager adManager;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'flutter_admob_kit Example',
      theme: ThemeData(
        colorSchemeSeed: Colors.deepPurple,
        useMaterial3: true,
      ),
      home: HomeScreen(adManager: adManager),
    );
  }
}

/// Home screen demonstrating all ad formats.
class HomeScreen extends StatelessWidget {
  /// Creates the home screen.
  const HomeScreen({required this.adManager, super.key});

  /// The ad manager instance.
  final AdManager adManager;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('AdMob Kit Demo')),
      body: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            const Text(
              'Ad Formats',
              style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
            ),
            const SizedBox(height: 16),

            // Interstitial (imperative)
            ElevatedButton.icon(
              onPressed: () async {
                final shown = await adManager.showInterstitial();
                if (context.mounted) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(
                      content: Text(
                        shown ? 'Interstitial shown!' : 'Interstitial skipped',
                      ),
                    ),
                  );
                }
              },
              icon: const Icon(Icons.fullscreen),
              label: const Text('Show Interstitial'),
            ),
            const SizedBox(height: 8),

            // Rewarded (imperative)
            ElevatedButton.icon(
              onPressed: () async {
                final reward = await adManager.showRewarded();
                if (context.mounted) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(
                      content: Text(
                        reward != null
                            ? 'Earned ${reward.amount} ${reward.type}!'
                            : 'Rewarded ad skipped',
                      ),
                    ),
                  );
                }
              },
              icon: const Icon(Icons.card_giftcard),
              label: const Text('Show Rewarded Ad'),
            ),
            const SizedBox(height: 8),

            // Consent (manual)
            OutlinedButton.icon(
              onPressed: () async {
                final result = await adManager.consent.requestConsent();
                if (context.mounted) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Consent: ${result.name}')),
                  );
                }
              },
              icon: const Icon(Icons.privacy_tip),
              label: const Text('Request UMP Consent'),
            ),

            const Spacer(),

            // Banner at the bottom
            BannerAdWidget(manager: adManager),
          ],
        ),
      ),
    );
  }
}
0
likes
140
points
123
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

High-level AdMob integration for Flutter. Banner, interstitial, rewarded, and app-open ads with UMP consent flow, automatic test/production ID switching, retry with exponential backoff, and frequency capping — all in a single, state-management-agnostic package.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter, google_mobile_ads

More

Packages that depend on admob_kit_x