clever_ads_solutions 0.7.6 copy "clever_ads_solutions: ^0.7.6" to clipboard
clever_ads_solutions: ^0.7.6 copied to clipboard

The CAS.AI Flutter plugin allows you to easily monetize your apps for iOS and Android using lot of Ads SDKs in mediation.

example/lib/main.dart

import 'package:clever_ads_solutions/clever_ads_solutions.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: HomeScreen(),
    );
  }
}

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

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen>
    implements AdLoadCallback, OnDismissListener {
  final GlobalKey<BannerWidgetState> _bannerKey = GlobalKey();
  MediationManager? _manager;

  bool _isReady = false;
  bool _isInterstitialReady = false;
  bool _isRewardedReady = false;
  String? _sdkVersion;

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('CAS.AI Sample'),
      ),
      body: Column(
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.fromLTRB(16, 8, 16, 8),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                if (_sdkVersion != null) Text('CAS.AI $_sdkVersion'),
                const Spacer(),
                Text('Plugin version ${CAS.getPluginVersion()}'),
              ],
            ),
          ),
          Expanded(
            child: SingleChildScrollView(
              padding: const EdgeInsets.fromLTRB(16, 12, 16, 20),
              child: Column(
                children: [
                  BannerWidget(
                    key: _bannerKey,
                    listener: BannerListener('banner'),
                  ),
                  ElevatedButton(
                    child: const Text('Load next ad on upper widget'),
                    onPressed: () => _bannerKey.currentState?.loadNextAd(),
                  ),
                  BannerWidget(
                    size: AdSize.leaderboard,
                    refreshInterval: 20,
                    listener: BannerListener('leaderboard'),
                  ),
                  ElevatedButton(
                    onPressed: _isInterstitialReady ? _showInterstitial : null,
                    child: const Text('Show interstitial'),
                  ),
                  ElevatedButton(
                    onPressed: _isRewardedReady ? _showRewarded : null,
                    child: const Text('Show rewarded'),
                  ),
                  BannerWidget(
                    size: AdSize.mediumRectangle,
                    refreshInterval: 60,
                    listener: BannerListener('mediumRectangle'),
                  ),
                  LayoutBuilder(
                    builder: (_, BoxConstraints constraints) => BannerWidget(
                      size: AdSize.getAdaptiveBanner(constraints.maxWidth),
                      listener: BannerListener('adaptive'),
                    ),
                  ),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }

  void _initialize() {
    // Set Ads Settings
    CAS.settings.setDebugMode(true);
    CAS.settings.setTaggedAudience(Audience.notChildren);

    // Set Manual loading mode to disable auto requests
    // CAS.settings.setLoadingMode(LoadingManagerMode.manual);

    // Initialize SDK
    _manager = CAS
        .buildManager()
        .withCasId('demo')
        .withTestMode(true)
        .withAdTypes(AdTypeFlags.banner |
            AdTypeFlags.interstitial |
            AdTypeFlags.rewarded)
        .withConsentFlow(ConsentFlow.create()
            .withDismissListener(this)
            .withPrivacyPolicy('https://example.com/'))
        .withCompletionListener(_onCASInitialized)
        .build();
  }

  void _onCASInitialized(InitConfig initConfig) async {
    final String? error = initConfig.error;
    if (error != null) {
      logDebug('Ad manager initialization failed: $error');
      return;
    }
    logDebug('Ad manager initialized');

    setState(() {
      _isReady = true;
    });

    _manager?.setAdLoadCallback(this);

    final String sdkVersion = await CAS.getSDKVersion();
    setState(() {
      _sdkVersion = sdkVersion;
    });
  }

  @override
  void onConsentFlowDismissed(int status) {
    logDebug('Consent flow dismissed: $status');
  }

  @override
  void onAdLoaded(AdType adType) {
    if (adType == AdType.Interstitial) {
      setState(() {
        _isInterstitialReady = true;
      });
    } else if (adType == AdType.Rewarded) {
      setState(() {
        _isRewardedReady = true;
      });
    }
  }

  @override
  void onAdFailedToLoad(AdType adType, String? error) {
    logDebug('Ad ${adType.name} failed to load: $error');
  }

  void _showInterstitial() {
    _manager?.showInterstitial(AdListener('Interstitial'));
  }

  void _showRewarded() {
    _manager?.showRewarded(AdListener('Rewarded'));
  }
}

class AdListener extends AdCallback {
  final String? _name;

  AdListener(this._name);

  @override
  void onClicked() {
    logDebug('$_name ad was pressed!');
  }

  @override
  void onClosed() {
    logDebug('$_name ad was closed!');
  }

  @override
  void onComplete() {
    logDebug('$_name ad was complete!');
  }

  @override
  void onImpression(AdImpression? adImpression) {
    logDebug('$_name ad did impression: $adImpression!');
  }

  @override
  void onShowFailed(String? message) {
    logDebug('$_name ad failed to show: $message!');
  }

  @override
  void onShown() {
    logDebug('$_name ad shown!');
  }
}

class BannerListener extends AdViewListener {
  final String _name;

  BannerListener(this._name);

  @override
  void onAdViewPresented() {
    logDebug('Banner $_name ad was presented!');
  }

  @override
  void onClicked() {
    logDebug('Banner $_name ad was pressed!');
  }

  @override
  void onFailed(String? message) {
    logDebug('Banner $_name error! $message');
  }

  @override
  void onImpression(AdImpression? adImpression) {
    logDebug('Banner $_name impression: $adImpression');
  }

  @override
  void onLoaded() {
    logDebug('Banner $_name ad was loaded!');
  }
}

void logDebug(String message) {
  if (kDebugMode) {
    debugPrint('CAS.AI.Flutter.Example: $message');
  }
}
10
likes
150
points
205
downloads

Publisher

unverified uploader

Weekly Downloads

The CAS.AI Flutter plugin allows you to easily monetize your apps for iOS and Android using lot of Ads SDKs in mediation.

Repository (GitHub)

Topics

#ads #android #ios

Documentation

Documentation
API reference

License

Apache-2.0 (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on clever_ads_solutions