admob_kit_x 0.1.0
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 [...]
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),
],
),
),
);
}
}