in_house_ads 1.6.0 copy "in_house_ads: ^1.6.0" to clipboard
in_house_ads: ^1.6.0 copied to clipboard

PlatformAndroid

Reusable in-house (cross-promo) native, banner, interstitial, and rewarded ads for Android Flutter apps.

example/lib/main.dart

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

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  InHouseAds.configure(
    const InHouseAdsConfig(
      assetPath: 'assets/in_house_ads/apps.json',
      currentAppId: 'com.example.in_house_ads_example',
      remoteUrl: 'https://vaibhavrakholiya.github.io/in-app-ads-data.json',
      remoteRefreshInterval: Duration(hours: 6),
      theme: InHouseAdsTheme(
        cardColor: Color(0xFFFFFFFF),
        borderColor: Color(0xFFBBF7D0),
        badgeBackground: Color(0xFFDCFCE7),
        accentColor: Color(0xFF16A34A),
        ctaTextColor: Color(0xFFFFFFFF),
      ),
    ),
  );

  runApp(const InHouseAdsExampleApp());
}

class InHouseAdsExampleApp extends StatelessWidget {
  const InHouseAdsExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'in_house_ads example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF16A34A)),
        useMaterial3: true,
      ),
      home: const ExampleHomePage(),
    );
  }
}

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

  @override
  State<ExampleHomePage> createState() => _ExampleHomePageState();
}

class _ExampleHomePageState extends State<ExampleHomePage> {
  InHouseAd? _nativeAd;
  InHouseAd? _bannerAd;

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

  Future<void> _loadAds() async {
    final native = await InHouseAdRepository.pickForSlot('home_0');
    final banner = await InHouseAdRepository.pickForSlot('banner_0');
    if (!mounted) return;
    setState(() {
      _nativeAd = native;
      _bannerAd = banner;
    });
  }

  Future<void> _showInterstitial() async {
    final ad = await InHouseAdRepository.pickNext();
    if (ad == null || !mounted) return;

    await InHouseInterstitial.show(context: context, ad: ad, onComplete: () {});
  }

  Future<void> _showRewarded() async {
    final ad = await InHouseAdRepository.pickNextRewarded();
    if (ad == null || !mounted) return;

    var earned = false;
    await InHouseRewarded.show(
      context: context,
      ad: ad,
      onUserEarnedReward: () {
        earned = true;
      },
      onAdDismissed: () {
        if (!mounted) return;
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text(
              earned ? 'Reward earned!' : 'Ad closed — no reward granted.',
            ),
          ),
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    final nativeAd = _nativeAd;
    final bannerAd = _bannerAd;

    return Scaffold(
      appBar: AppBar(title: const Text('in_house_ads example')),
      body: ListView(
        padding: const EdgeInsets.all(16),
        children: [
          const Text(
            'Banner ad slot',
            style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600),
          ),
          const SizedBox(height: 12),
          if (bannerAd == null)
            const Text('No ad available (check apps.json).')
          else
            InHouseBannerAdView(ad: bannerAd),
          const SizedBox(height: 24),
          const Text(
            'Native ad slot',
            style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600),
          ),
          const SizedBox(height: 12),
          if (nativeAd == null)
            const Text('No ad available (check apps.json).')
          else
            InHouseNativeAdView(ad: nativeAd),
          const SizedBox(height: 24),
          FilledButton(
            onPressed: _showInterstitial,
            child: const Text('Show interstitial'),
          ),
          const SizedBox(height: 12),
          FilledButton(
            onPressed: _showRewarded,
            child: const Text('Show rewarded'),
          ),
        ],
      ),
    );
  }
}
0
likes
160
points
12
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Reusable in-house (cross-promo) native, banner, interstitial, and rewarded ads for Android Flutter apps.

Repository (GitHub)

Topics

#ads #cross-promo #android

License

MIT (license)

Dependencies

cached_network_image, flutter, flutter_cache_manager, http, shared_preferences, url_launcher

More

Packages that depend on in_house_ads