diff --git a/ios/.swiftformat b/.swiftformat similarity index 97% rename from ios/.swiftformat rename to .swiftformat index f3dcf90..b8c652d 100644 --- a/ios/.swiftformat +++ b/.swiftformat @@ -13,6 +13,7 @@ --enable emptyBraces --enable initCoderUnavailable --enable isEmpty +--enable isEmpty --enable leadingDelimiters --enable numberFormatting --enable preferKeyPath @@ -42,6 +43,7 @@ --enable spaceInsideComments --enable spaceInsideGenerics --enable spaceInsideParens +--enable spaceInsideParens --enable todos --enable trailingCommas --enable wrapEnumCases diff --git a/CHANGELOG.md b/CHANGELOG.md index f29f96f..6709b05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.5.0 + +* Added support for placements (thanks [@nixxxon](https://github.com/nixxxon) & [@debaserr](https://github.com/debaserr)). + ## 0.4.1 * Upgraded Appodeal library to version 2.8.1 (thanks [@debaserr](https://github.com/debaserr)). diff --git a/README.md b/README.md index 6080bbe..d30fa52 100644 --- a/README.md +++ b/README.md @@ -138,12 +138,12 @@ Center( ### Interstitial, Reward & Non-Skippable ads -To show an interstitial, reward or non-skippable ad, call the function `Appodeal.show()` passing the type of ad that you would like to show as a paremeter: +To show an interstitial, reward or non-skippable ad, call the function `Appodeal.show()` passing the type of ad that you would like to show as a paremeter (mandatory) and the [placement name](https://faq.appodeal.com/en/articles/1154394-placements) (optional): ```dart -Appodeal.show(AdType.INTERSTITIAL); // Show an interstitial ad -Appodeal.show(AdType.REWARD); // Show a reward ad -Appodeal.show(AdType.NON_SKIPPABLE); // Show a non-skippable ad +Appodeal.show(AdType.INTERSTITIAL, placementName: "placement-name"); // Show an interstitial ad +Appodeal.show(AdType.REWARD, placementName: "placement-name"); // Show a reward ad +Appodeal.show(AdType.NON_SKIPPABLE, placementName: "placement-name"); // Show a non-skippable ad ``` ## ♻️ Callbacks diff --git a/android/src/main/kotlin/io/vinicius/appodeal_flutter/AppodealBannerFactory.kt b/android/src/main/kotlin/io/vinicius/appodeal_flutter/AppodealBannerFactory.kt index bbc6930..c43e7b6 100644 --- a/android/src/main/kotlin/io/vinicius/appodeal_flutter/AppodealBannerFactory.kt +++ b/android/src/main/kotlin/io/vinicius/appodeal_flutter/AppodealBannerFactory.kt @@ -14,15 +14,23 @@ import io.flutter.plugin.platform.PlatformViewFactory class AppodealBannerFactory(private val activity: Activity, private val messenger: BinaryMessenger) : PlatformViewFactory(StandardMessageCodec.INSTANCE) { override fun create(context: Context?, viewId: Int, args: Any?): PlatformView = - AppodealBannerView(activity, messenger, viewId) + AppodealBannerView(activity, messenger, viewId, args) - class AppodealBannerView(activity: Activity, messenger: BinaryMessenger, id: Int) : + class AppodealBannerView(activity: Activity, messenger: BinaryMessenger, id: Int, args: Any?) : PlatformView, MethodChannel.MethodCallHandler { + private val arguments = args as Map<*, *> + private val placementName = arguments["placementName"] as? String + private val bannerView = Appodeal.getBannerView(activity) private val channel = MethodChannel(messenger, "plugins.io.vinicius.appodeal/banner_$id") init { - Appodeal.show(activity, Appodeal.BANNER_VIEW) + if (placementName !== null) { + Appodeal.show(activity, Appodeal.BANNER_VIEW, placementName) + } else { + Appodeal.show(activity, Appodeal.BANNER_VIEW) + } + channel.setMethodCallHandler(this) } diff --git a/android/src/main/kotlin/io/vinicius/appodeal_flutter/AppodealFlutterPlugin.kt b/android/src/main/kotlin/io/vinicius/appodeal_flutter/AppodealFlutterPlugin.kt index 305b2e7..00bd168 100644 --- a/android/src/main/kotlin/io/vinicius/appodeal_flutter/AppodealFlutterPlugin.kt +++ b/android/src/main/kotlin/io/vinicius/appodeal_flutter/AppodealFlutterPlugin.kt @@ -35,6 +35,7 @@ class AppodealFlutterPlugin : FlutterPlugin, MethodCallHandler, ActivityAware { "setAutoCache" -> setAutoCache(call, result) "cache" -> cache(call, result) "isReadyForShow" -> isReadyForShow(call, result) + "canShow" -> canShow(call, result) "show" -> show(activity, call, result) // Consent Manager @@ -110,11 +111,28 @@ class AppodealFlutterPlugin : FlutterPlugin, MethodCallHandler, ActivityAware { result.success(Appodeal.isLoaded(adType)) } + private fun canShow(call: MethodCall, result: Result) { + val args = call.arguments as Map<*, *> + val adType = getAdType(args["adType"] as Int) + val placementName = args["placementName"] + + if (placementName !== null) { + result.success(Appodeal.canShow(adType, placementName as String)) + } else { + result.success(Appodeal.canShow(adType)) + } + } + private fun show(activity: Activity, call: MethodCall, result: Result) { val args = call.arguments as Map<*, *> val adType = getAdType(args["adType"] as Int) + val placementName = args["placementName"] - result.success(Appodeal.show(activity, adType)) + if (placementName !== null) { + result.success(Appodeal.show(activity, adType, placementName as String)) + } else { + result.success(Appodeal.show(activity, adType)) + } } // endregion diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 21656b3..d3f2666 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -100,7 +100,7 @@ PODS: - Protobuf (~> 3.12) - StackIAB (~> 1.1.2) - StackModules (~> 1.0.2) - - appodeal_flutter (0.4.1): + - appodeal_flutter (0.5.0): - APDAdColonyAdapter (= 2.8.1.1) - APDAmazonAdsAdapter (= 2.8.1.1) - APDAppLovinAdapter (= 2.8.1.1) @@ -337,7 +337,7 @@ SPEC CHECKSUMS: APDYandexAdapter: 174764c7adc6ae27556f613508b5b544d438583d AppLovinSDK: c307abff8023aa4776f863226cbe42e7a90b3364 Appodeal: bf9748c013eb1e91d973391130fab386ef947779 - appodeal_flutter: 25584b67cfc516ca2f9df8bdba3b0f5bb1214f51 + appodeal_flutter: 41c2a1e01fbc31679792b05f31779ae519833861 AppRollSDK: bd9e96ad026dd51ad07714a35d43da95bb882d5f BidMachine: 5c9659e41640613d0882a6e5f352914fdaac2a31 CriteoPublisherSdk: a7551daf9235203a040703504ae549e842b5eebf @@ -367,4 +367,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: fe0e1ee7f3d1f7d00b11b474b62dd62134535aea -COCOAPODS: 1.9.3 +COCOAPODS: 1.10.0 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 9183e38..5321842 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -133,7 +133,6 @@ buildPhases = ( 110F7A9EFDF7B90F6F32FAF4 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, - 3355360B779AB417636D2A18 /* [CP] Prepare Artifacts */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, @@ -221,23 +220,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 3355360B779AB417636D2A18 /* [CP] Prepare Artifacts */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-artifacts-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Prepare Artifacts"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-artifacts-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-artifacts.sh\"\n"; - showEnvVarsInLog = 0; - }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; diff --git a/example/ios/Runner/AppDelegate.swift b/example/ios/Runner/AppDelegate.swift index 9826c24..95b9ac2 100644 --- a/example/ios/Runner/AppDelegate.swift +++ b/example/ios/Runner/AppDelegate.swift @@ -3,11 +3,11 @@ import Flutter import UIKit @UIApplicationMain -@objc class AppDelegate: FlutterAppDelegate -{ - override func application(_ application: UIApplication, didFinishLaunchingWithOptions - launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool - { +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } diff --git a/example/lib/main.dart b/example/lib/main.dart index e789fd2..4ae2cba 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -105,7 +105,7 @@ class _Body extends StatelessWidget { RaisedButton( child: Text('Show Interstitial Ad'), onPressed: () async { - await Appodeal.show(AdType.INTERSTITIAL); + await Appodeal.show(AdType.INTERSTITIAL, placementName: "placement-name"); }, ), RaisedButton( @@ -119,7 +119,7 @@ class _Body extends StatelessWidget { RaisedButton( child: Text('Show Reward Ad'), onPressed: () async { - var status = await Appodeal.show(AdType.REWARD); + var status = await Appodeal.show(AdType.REWARD, placementName: 'placement-name'); print(status); }, ), @@ -131,6 +131,14 @@ class _Body extends StatelessWidget { duration: Toast.LENGTH_LONG, gravity: Toast.BOTTOM); }, ), + RaisedButton( + child: Text('Can Show Non-Skippable Ad?'), + onPressed: () async { + var canShow = await Appodeal.canShow(AdType.NON_SKIPPABLE, placementName: "placement-name"); + Toast.show(canShow ? 'Non-Skippable can be shown' : 'Non-Skippable can NOT be shown', context, + duration: Toast.LENGTH_LONG, gravity: Toast.BOTTOM); + }, + ), RaisedButton( child: Text('Show Non-Skippable Ad'), onPressed: () async { @@ -138,7 +146,7 @@ class _Body extends StatelessWidget { print(status); }, ), - AppodealBanner() + AppodealBanner(placementName: "placement-name"), ], ), ), diff --git a/example/pubspec.lock b/example/pubspec.lock index cae4f02..2248bb7 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -7,49 +7,49 @@ packages: path: ".." relative: true source: path - version: "0.4.1" + version: "0.5.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0-nullsafety.3" + version: "2.5.0-nullsafety.1" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0-nullsafety.1" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.5" + version: "1.1.0-nullsafety.3" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" + version: "1.2.0-nullsafety.1" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0-nullsafety.1" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0-nullsafety.5" + version: "1.15.0-nullsafety.3" cupertino_icons: dependency: "direct main" description: @@ -63,7 +63,7 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" + version: "1.2.0-nullsafety.1" flutter: dependency: "direct main" description: flutter @@ -80,21 +80,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10-nullsafety.3" + version: "0.12.10-nullsafety.1" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.6" + version: "1.3.0-nullsafety.3" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.3" + version: "1.8.0-nullsafety.1" sky_engine: dependency: transitive description: flutter @@ -106,42 +106,42 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.4" + version: "1.8.0-nullsafety.2" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety.6" + version: "1.10.0-nullsafety.1" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0-nullsafety.1" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0-nullsafety.1" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" + version: "1.2.0-nullsafety.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19-nullsafety.6" + version: "0.2.19-nullsafety.2" toast: dependency: "direct main" description: @@ -155,14 +155,14 @@ packages: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.5" + version: "1.3.0-nullsafety.3" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.5" + version: "2.1.0-nullsafety.3" sdks: - dart: ">=2.12.0-0.0 <3.0.0" + dart: ">=2.10.0-110 <2.11.0" flutter: ">=1.20.0 <2.0.0" diff --git a/ios/Classes/AppodealBannerFactory.swift b/ios/Classes/AppodealBannerFactory.swift index 7399c6f..f997e49 100644 --- a/ios/Classes/AppodealBannerFactory.swift +++ b/ios/Classes/AppodealBannerFactory.swift @@ -10,15 +10,44 @@ import Flutter import Foundation class AppodealBannerFactory: NSObject, FlutterPlatformViewFactory { - func create(withFrame _: CGRect, viewIdentifier _: Int64, arguments _: Any?) -> FlutterPlatformView { - AppodealBannerView() + var instance: SwiftAppodealFlutterPlugin + + init(instance: SwiftAppodealFlutterPlugin) { + self.instance = instance + } + + func create(withFrame _: CGRect, viewIdentifier _: Int64, arguments args: Any?) -> FlutterPlatformView { + var placementName: String? + if let argsDict = args as? [String: Any] { + placementName = argsDict["placementName"] as? String + } + + return AppodealBannerView(instance: instance, placementName: placementName) + } + + public func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol { + FlutterStandardMessageCodec.sharedInstance() } + // MARK: - AppodealBannerView + class AppodealBannerView: NSObject, FlutterPlatformView { + var instance: SwiftAppodealFlutterPlugin + var placementName: String? + + init(instance: SwiftAppodealFlutterPlugin, placementName: String?) { + self.instance = instance + self.placementName = placementName + } + func view() -> UIView { - let banner = Appodeal.banner() - banner?.frame = CGRect(x: 0, y: 0, width: 320, height: 50) - return banner ?? UIView() + let banner = APDBannerView() + banner.delegate = instance + banner.placement = placementName + banner.frame = CGRect(x: 0, y: 0, width: 320, height: 50) + banner.loadAd() + + return banner } } } diff --git a/ios/Classes/BannerDelegate.swift b/ios/Classes/BannerDelegate.swift index 5cd46d0..028bcdd 100644 --- a/ios/Classes/BannerDelegate.swift +++ b/ios/Classes/BannerDelegate.swift @@ -8,24 +8,24 @@ import Appodeal import Foundation -extension SwiftAppodealFlutterPlugin: AppodealBannerDelegate { - public func bannerDidLoadAdIsPrecache(_: Bool) { +extension SwiftAppodealFlutterPlugin: AppodealBannerViewDelegate { + public func bannerViewDidLoadAd(_: AppodealBannerView, isPrecache _: Bool) { channel?.invokeMethod("onBannerLoaded", arguments: nil) } - public func bannerDidFailToLoadAd() { + public func bannerView(_: AppodealBannerView, didFailToLoadAdWithError _: Error) { channel?.invokeMethod("onBannerFailedToLoad", arguments: nil) } - public func bannerDidShow() { - channel?.invokeMethod("onBannerShown", arguments: nil) + public func bannerViewDidInteract(_: AppodealBannerView) { + channel?.invokeMethod("onBannerClicked", arguments: nil) } - public func bannerDidClick() { - channel?.invokeMethod("onBannerClicked", arguments: nil) + public func bannerViewDidShow(_: AppodealBannerView) { + channel?.invokeMethod("onBannerShown", arguments: nil) } - public func bannerDidExpired() { + public func bannerViewExpired(_: AppodealBannerView) { channel?.invokeMethod("onBannerExpired", arguments: nil) } } diff --git a/ios/Classes/SwiftAppodealFlutterPlugin.swift b/ios/Classes/SwiftAppodealFlutterPlugin.swift index 59f6550..67dd522 100644 --- a/ios/Classes/SwiftAppodealFlutterPlugin.swift +++ b/ios/Classes/SwiftAppodealFlutterPlugin.swift @@ -12,7 +12,7 @@ public class SwiftAppodealFlutterPlugin: NSObject, FlutterPlugin { instance.channel = FlutterMethodChannel(name: "appodeal_flutter", binaryMessenger: registrar.messenger()) registrar.addMethodCallDelegate(instance, channel: instance.channel!) - registrar.register(AppodealBannerFactory(), withId: "plugins.io.vinicius.appodeal/banner") + registrar.register(AppodealBannerFactory(instance: instance), withId: "plugins.io.vinicius.appodeal/banner") } public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { @@ -21,6 +21,7 @@ public class SwiftAppodealFlutterPlugin: NSObject, FlutterPlugin { case "setAutoCache": setAutoCache(call, result) case "cache": cache(call, result) case "isReadyForShow": isReadyForShow(call, result) + case "canShow": canShow(call, result) case "show": show(call, result) // Consent Manager @@ -81,16 +82,27 @@ public class SwiftAppodealFlutterPlugin: NSObject, FlutterPlugin { result(Appodeal.isReadyForShow(with: adType)) } + private func canShow(_ call: FlutterMethodCall, _ result: @escaping FlutterResult) { + let args = call.arguments as! [String: Any] + let adType = getAdType(adId: args["adType"] as! Int) + let placementName = args["placementName"] as? String ?? "" + + result(Appodeal.canShow(adType, forPlacement: placementName)) + } + private func show(_ call: FlutterMethodCall, _ result: @escaping FlutterResult) { let args = call.arguments as! [String: Any] let adType = getShowStyle(adType: getAdType(adId: args["adType"] as! Int)) - let rootViewController = UIApplication.shared.keyWindow?.rootViewController - result(Appodeal.showAd(adType, rootViewController: rootViewController)) + if let placementName = args["placementName"] as? String { + result(Appodeal.showAd(adType, forPlacement: placementName, rootViewController: rootViewController)) + } else { + result(Appodeal.showAd(adType, rootViewController: rootViewController)) + } } private func setCallbacks() { - Appodeal.setBannerDelegate(self) + // Banner callbacks are registered in AppodealBannerFactory > AppodealBannerView Appodeal.setInterstitialDelegate(self) Appodeal.setRewardedVideoDelegate(self) Appodeal.setNonSkippableVideoDelegate(self) diff --git a/ios/appodeal_flutter.podspec b/ios/appodeal_flutter.podspec index 1e65986..5ebb43a 100644 --- a/ios/appodeal_flutter.podspec +++ b/ios/appodeal_flutter.podspec @@ -4,7 +4,7 @@ # Pod::Spec.new do |s| s.name = 'appodeal_flutter' - s.version = '0.4.1' + s.version = '0.5.0' s.summary = 'A Flutter plugin to display ads from Appodeal.' s.description = <<-DESC A Flutter plugin to display ads from Appodeal; it supports the new reqs for iOS 14+ and GDPR/CCPA consent. diff --git a/lib/src/appodeal.dart b/lib/src/appodeal.dart index fdc3a9e..e2763a9 100644 --- a/lib/src/appodeal.dart +++ b/lib/src/appodeal.dart @@ -80,15 +80,22 @@ class Appodeal { }); } + /// Check if an impression is available for a certain type [adType] and placement. + /// + /// Use the constants in the class `AdType` to specify what ad should be shown. + /// + /// Returns `true` if an impression is available. + static Future canShow(int adType, {String placementName}) async { + return _channel.invokeMethod('canShow', {'adType': adType, 'placementName': placementName}); + } + /// Shows an ad of certain type [adType]. /// /// Use the constants in the class `AdType` to specify what ad should be shown. /// /// Returns `true` if the ad is shown. - static Future show(int adType) async { - return _channel.invokeMethod('show', { - 'adType': adType, - }); + static Future show(int adType, {String placementName}) async { + return _channel.invokeMethod('show', {'adType': adType, 'placementName': placementName}); } // endregion diff --git a/lib/src/banner.dart b/lib/src/banner.dart index f475463..a6732d2 100644 --- a/lib/src/banner.dart +++ b/lib/src/banner.dart @@ -4,6 +4,12 @@ import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; class AppodealBanner extends StatelessWidget { + final Map _args = {}; + + AppodealBanner({String placementName}) { + this._args["placementName"] = placementName; + } + @override Widget build(BuildContext context) { return Container( @@ -12,12 +18,12 @@ class AppodealBanner extends StatelessWidget { child: Platform.isIOS ? UiKitView( viewType: 'plugins.io.vinicius.appodeal/banner', - creationParams: {}, + creationParams: this._args, creationParamsCodec: const StandardMessageCodec(), ) : AndroidView( viewType: 'plugins.io.vinicius.appodeal/banner', - creationParams: {}, + creationParams: this._args, creationParamsCodec: const StandardMessageCodec(), ), ); diff --git a/pubspec.lock b/pubspec.lock index 2d3263b..89ec533 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,49 +7,49 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.5.0-nullsafety.3" + version: "2.5.0-nullsafety.1" boolean_selector: dependency: transitive description: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0-nullsafety.1" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.5" + version: "1.1.0-nullsafety.3" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" + version: "1.2.0-nullsafety.1" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0-nullsafety.1" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0-nullsafety.5" + version: "1.15.0-nullsafety.3" fake_async: dependency: transitive description: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" + version: "1.2.0-nullsafety.1" flutter: dependency: "direct main" description: flutter @@ -66,21 +66,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.10-nullsafety.3" + version: "0.12.10-nullsafety.1" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.6" + version: "1.3.0-nullsafety.3" path: dependency: transitive description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.3" + version: "1.8.0-nullsafety.1" sky_engine: dependency: transitive description: flutter @@ -92,56 +92,56 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.0-nullsafety.4" + version: "1.8.0-nullsafety.2" stack_trace: dependency: transitive description: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.10.0-nullsafety.6" + version: "1.10.0-nullsafety.1" stream_channel: dependency: transitive description: name: stream_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.3" + version: "2.1.0-nullsafety.1" string_scanner: dependency: transitive description: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-nullsafety.3" + version: "1.1.0-nullsafety.1" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0-nullsafety.3" + version: "1.2.0-nullsafety.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.19-nullsafety.6" + version: "0.2.19-nullsafety.2" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0-nullsafety.5" + version: "1.3.0-nullsafety.3" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.0-nullsafety.5" + version: "2.1.0-nullsafety.3" sdks: - dart: ">=2.12.0-0.0 <3.0.0" + dart: ">=2.10.0-110 <2.11.0" flutter: ">=1.20.0 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index e838fe1..26ffbcd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: appodeal_flutter description: A Flutter plugin to display ads from Appodeal; it supports the new reqs for iOS 14+ and GDPR/CCPA consent. -version: 0.4.1 +version: 0.5.0 homepage: https://github.com/vegidio-flutter/appodeal environment: