Skip to content

Commit ca30b3b

Browse files
committed
update companion ad slot to use companionadslotsize
1 parent e207221 commit ca30b3b

13 files changed

+74
-157
lines changed

packages/interactive_media_ads/example/lib/main.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,8 @@ class _AdExampleWidgetState extends State<AdExampleWidget>
6161
final ContentProgressProvider _contentProgressProvider =
6262
ContentProgressProvider();
6363

64-
late final CompanionAdSlot companionAd = CompanionAdSlot.size(
65-
width: 300,
66-
height: 250,
64+
late final CompanionAdSlot companionAd = CompanionAdSlot(
65+
size: CompanionAdSlotSize.fixed(width: 300, height: 250),
6766
onClicked: () => debugPrint('Companion Ad Clicked'),
6867
);
6968

packages/interactive_media_ads/lib/interactive_media_ads.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,7 @@ export 'src/platform_interface/platform_interface.dart'
2121
AdEvent,
2222
AdEventType,
2323
AdUIElement,
24-
AdsLoadErrorData;
24+
AdsLoadErrorData,
25+
CompanionAdSlotSize,
26+
CompanionAdSlotSizeFixed,
27+
CompanionAdSlotSizeFluid;

packages/interactive_media_ads/lib/src/android/android_companion_ad_slot.dart

Lines changed: 15 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:flutter/cupertino.dart';
66
import 'package:meta/meta.dart';
77

88
import '../platform_interface/build_widget_creation_params.dart';
9+
import '../platform_interface/companion_ad_slot_size.dart';
910
import '../platform_interface/platform_companion_ad_slot.dart';
1011
import 'android_view_widget.dart';
1112
import 'interactive_media_ads.g.dart' as ima;
@@ -15,52 +16,26 @@ import 'platform_views_service_proxy.dart';
1516
/// Android implementation of [PlatformCompanionAdSlotCreationParams].
1617
final class AndroidCompanionAdSlotCreationParams
1718
extends PlatformCompanionAdSlotCreationParams {
18-
/// Constructs a [AndroidCompanionAdSlotCreationParams].
19-
const AndroidCompanionAdSlotCreationParams.size({
20-
required super.width,
21-
required super.height,
19+
/// Constructs an [AndroidCompanionAdSlotCreationParams].
20+
const AndroidCompanionAdSlotCreationParams({
21+
required super.size,
2222
super.onClicked,
2323
@visibleForTesting InteractiveMediaAdsProxy? proxy,
2424
@visibleForTesting PlatformViewsServiceProxy? platformViewsProxy,
2525
}) : _proxy = proxy ?? const InteractiveMediaAdsProxy(),
2626
_platformViewsProxy =
2727
platformViewsProxy ?? const PlatformViewsServiceProxy(),
28-
super.size();
28+
super();
2929

30-
/// Constructs a [AndroidCompanionAdSlotCreationParams].
31-
const AndroidCompanionAdSlotCreationParams.fluid({
32-
super.onClicked,
33-
@visibleForTesting InteractiveMediaAdsProxy? proxy,
34-
@visibleForTesting PlatformViewsServiceProxy? platformViewsProxy,
35-
}) : _proxy = proxy ?? const InteractiveMediaAdsProxy(),
36-
_platformViewsProxy =
37-
platformViewsProxy ?? const PlatformViewsServiceProxy(),
38-
super.fluid();
39-
40-
/// Creates a [AndroidCompanionAdSlotCreationParams] from an instance of
30+
/// Creates a [AndroidCompanionAdSlotCreationParams] from an instance of
4131
/// [PlatformCompanionAdSlotCreationParams].
4232
factory AndroidCompanionAdSlotCreationParams.fromPlatformCompanionAdSlotCreationParamsSize(
4333
PlatformCompanionAdSlotCreationParams params, {
4434
@visibleForTesting InteractiveMediaAdsProxy? proxy,
4535
@visibleForTesting PlatformViewsServiceProxy? platformViewsProxy,
4636
}) {
47-
return AndroidCompanionAdSlotCreationParams.size(
48-
width: params.width!,
49-
height: params.height!,
50-
onClicked: params.onClicked,
51-
proxy: proxy,
52-
platformViewsProxy: platformViewsProxy,
53-
);
54-
}
55-
56-
/// Creates a [AndroidCompanionAdSlotCreationParams] from an instance of
57-
/// [PlatformCompanionAdSlotCreationParams].
58-
factory AndroidCompanionAdSlotCreationParams.fromPlatformCompanionAdSlotCreationParamsFluid(
59-
PlatformCompanionAdSlotCreationParams params, {
60-
@visibleForTesting InteractiveMediaAdsProxy? proxy,
61-
@visibleForTesting PlatformViewsServiceProxy? platformViewsProxy,
62-
}) {
63-
return AndroidCompanionAdSlotCreationParams.fluid(
37+
return AndroidCompanionAdSlotCreationParams(
38+
size: params.size,
6439
onClicked: params.onClicked,
6540
proxy: proxy,
6641
platformViewsProxy: platformViewsProxy,
@@ -106,13 +81,8 @@ base class AndroidCompanionAdSlot extends PlatformCompanionAdSlot {
10681
return params;
10782
}
10883

109-
if (params.isFluid) {
110-
return AndroidCompanionAdSlotCreationParams
111-
.fromPlatformCompanionAdSlotCreationParamsFluid(params);
112-
} else {
113-
return AndroidCompanionAdSlotCreationParams
114-
.fromPlatformCompanionAdSlotCreationParamsSize(params);
115-
}
84+
return AndroidCompanionAdSlotCreationParams
85+
.fromPlatformCompanionAdSlotCreationParamsSize(params);
11686
}
11787

11888
Future<ima.CompanionAdSlot> _initCompanionAdSlot() async {
@@ -122,10 +92,11 @@ base class AndroidCompanionAdSlot extends PlatformCompanionAdSlot {
12292

12393
await Future.wait(<Future<void>>[
12494
adSlot.setContainer(_frameLayout),
125-
if (params.isFluid)
126-
adSlot.setFluidSize()
127-
else
128-
adSlot.setSize(params.width!, params.height!),
95+
switch (params.size) {
96+
final CompanionAdSlotSizeFixed size =>
97+
adSlot.setSize(size.width, size.height),
98+
CompanionAdSlotSizeFluid() => adSlot.setFluidSize(),
99+
},
129100
if (params.onClicked != null)
130101
adSlot.addClickListener(
131102
_createAdSlotClickListener(

packages/interactive_media_ads/lib/src/companion_ad_slot.dart

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,35 +29,22 @@ import 'platform_interface/platform_interface.dart';
2929
/// }
3030
/// ```
3131
class CompanionAdSlot {
32-
/// Constructs an instance of a [CompanionAdSlot] with design ad width and
33-
/// height.
32+
/// Constructs an instance of a [CompanionAdSlot].
3433
///
3534
/// See [CompanionAdSlot.fromPlatformCreationParams] for setting parameters
3635
/// for a specific platform.
37-
CompanionAdSlot.size({
38-
required int width,
39-
required int height,
36+
CompanionAdSlot({
37+
required CompanionAdSlotSize size,
4038
void Function()? onClicked,
4139
}) : this.fromPlatformCreationParams(
42-
params: PlatformCompanionAdSlotCreationParams.size(
43-
width: width,
44-
height: height,
40+
params: PlatformCompanionAdSlotCreationParams(
41+
size: size,
4542
onClicked: onClicked,
4643
),
4744
);
4845

49-
/// Constructs an instance of a [CompanionAdSlot] with fluid size.
50-
///
51-
/// See [CompanionAdSlot.fromPlatformCreationParams] for setting parameters
52-
/// for a specific platform.
53-
CompanionAdSlot.fluid({void Function()? onClicked})
54-
: this.fromPlatformCreationParams(
55-
params: PlatformCompanionAdSlotCreationParams.fluid(
56-
onClicked: onClicked,
57-
),
58-
);
59-
60-
/// Constructs an [CompanionAdSlot] from creation params for a specific platform.
46+
/// Constructs an [CompanionAdSlot] from creation params for a specific
47+
/// platform.
6148
///
6249
/// {@template interactive_media_ads.CompanionAdSlot.fromPlatformCreationParams}
6350
/// Below is an example of setting platform-specific creation parameters for

packages/interactive_media_ads/lib/src/ios/ios_companion_ad_slot.dart

Lines changed: 20 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -7,50 +7,30 @@ import 'package:flutter/services.dart';
77
import 'package:meta/meta.dart';
88

99
import '../platform_interface/build_widget_creation_params.dart';
10+
import '../platform_interface/companion_ad_slot_size.dart';
1011
import '../platform_interface/platform_companion_ad_slot.dart';
1112
import 'interactive_media_ads.g.dart';
1213
import 'interactive_media_ads_proxy.dart';
1314

1415
/// Implementation of [PlatformCompanionAdSlotCreationParams] for iOS.
1516
final class IOSCompanionAdSlotCreationParams
1617
extends PlatformCompanionAdSlotCreationParams {
17-
/// Constructs a [IOSCompanionAdSlotCreationParams].
18-
const IOSCompanionAdSlotCreationParams.size({
19-
required super.width,
20-
required super.height,
18+
/// Constructs an [IOSCompanionAdSlotCreationParams].
19+
const IOSCompanionAdSlotCreationParams({
20+
required super.size,
2121
super.onClicked,
2222
@visibleForTesting InteractiveMediaAdsProxy? proxy,
2323
}) : _proxy = proxy ?? const InteractiveMediaAdsProxy(),
24-
super.size();
24+
super();
2525

26-
/// Constructs a [IOSCompanionAdSlotCreationParams].
27-
const IOSCompanionAdSlotCreationParams.fluid({
28-
super.onClicked,
29-
@visibleForTesting InteractiveMediaAdsProxy? proxy,
30-
}) : _proxy = proxy ?? const InteractiveMediaAdsProxy(),
31-
super.fluid();
32-
33-
/// Creates a [IOSCompanionAdSlotCreationParams] from an instance of
26+
/// Creates an [IOSCompanionAdSlotCreationParams] from an instance of
3427
/// [PlatformCompanionAdSlotCreationParams].
3528
factory IOSCompanionAdSlotCreationParams.fromPlatformCompanionAdSlotCreationParamsSize(
3629
PlatformCompanionAdSlotCreationParams params, {
3730
@visibleForTesting InteractiveMediaAdsProxy? proxy,
3831
}) {
39-
return IOSCompanionAdSlotCreationParams.size(
40-
width: params.width!,
41-
height: params.height!,
42-
onClicked: params.onClicked,
43-
proxy: proxy,
44-
);
45-
}
46-
47-
/// Creates a [IOSCompanionAdSlotCreationParams] from an instance of
48-
/// [PlatformCompanionAdSlotCreationParams].
49-
factory IOSCompanionAdSlotCreationParams.fromPlatformCompanionAdSlotCreationParamsFluid(
50-
PlatformCompanionAdSlotCreationParams params, {
51-
@visibleForTesting InteractiveMediaAdsProxy? proxy,
52-
}) {
53-
return IOSCompanionAdSlotCreationParams.fluid(
32+
return IOSCompanionAdSlotCreationParams(
33+
size: params.size,
5434
onClicked: params.onClicked,
5535
proxy: proxy,
5636
);
@@ -96,23 +76,21 @@ base class IOSCompanionAdSlot extends PlatformCompanionAdSlot {
9676
return params;
9777
}
9878

99-
if (params.isFluid) {
100-
return IOSCompanionAdSlotCreationParams
101-
.fromPlatformCompanionAdSlotCreationParamsFluid(params);
102-
} else {
103-
return IOSCompanionAdSlotCreationParams
104-
.fromPlatformCompanionAdSlotCreationParamsSize(params);
105-
}
79+
return IOSCompanionAdSlotCreationParams
80+
.fromPlatformCompanionAdSlotCreationParamsSize(params);
10681
}
10782

10883
IMACompanionAdSlot _initCompanionAdSlot() {
109-
final IMACompanionAdSlot adSlot = params.isFluid
110-
? _iosParams._proxy.newIMACompanionAdSlot(view: _view)
111-
: _iosParams._proxy.sizeIMACompanionAdSlot(
112-
view: _view,
113-
width: _iosParams.width!,
114-
height: _iosParams.height!,
115-
);
84+
final IMACompanionAdSlot adSlot = switch (params.size) {
85+
final CompanionAdSlotSizeFixed size =>
86+
_iosParams._proxy.sizeIMACompanionAdSlot(
87+
view: _view,
88+
width: size.width,
89+
height: size.height,
90+
),
91+
CompanionAdSlotSizeFluid() =>
92+
_iosParams._proxy.newIMACompanionAdSlot(view: _view),
93+
};
11694

11795
if (params.onClicked != null) {
11896
adSlot.setDelegate(_delegate);

packages/interactive_media_ads/lib/src/platform_interface/companion_ad_slot_size.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ sealed class CompanionAdSlotSize {
2020
/// A slot for a companion had with no fixed size, but rather adapts to fit the
2121
/// creative content they display.
2222
factory CompanionAdSlotSize.fluid() {
23-
return const CompanionAdSizeSlotFluid._();
23+
return const CompanionAdSlotSizeFluid._();
2424
}
2525
}
2626

@@ -42,6 +42,6 @@ class CompanionAdSlotSizeFixed extends CompanionAdSlotSize {
4242
/// A slot for a companion had with no fixed size, but rather adapts to fit the
4343
/// creative content they display.
4444
@immutable
45-
class CompanionAdSizeSlotFluid extends CompanionAdSlotSize {
46-
const CompanionAdSizeSlotFluid._() : super._();
45+
class CompanionAdSlotSizeFluid extends CompanionAdSlotSize {
46+
const CompanionAdSlotSizeFluid._() : super._();
4747
}

packages/interactive_media_ads/lib/src/platform_interface/platform_companion_ad_slot.dart

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'package:flutter/widgets.dart';
66

77
import 'build_widget_creation_params.dart';
8+
import 'companion_ad_slot_size.dart';
89
import 'interactive_media_ads_platform.dart';
910

1011
/// Object specifying creation parameters for creating a
@@ -45,37 +46,18 @@ import 'interactive_media_ads_platform.dart';
4546
@immutable
4647
base class PlatformCompanionAdSlotCreationParams {
4748
/// Used by the platform implementation to create a new
48-
/// [PlatformCompanionAdSlot] with ad width and height.
49-
const PlatformCompanionAdSlotCreationParams.size({
50-
required int this.width,
51-
required int this.height,
49+
/// [PlatformCompanionAdSlot].
50+
const PlatformCompanionAdSlotCreationParams({
51+
required this.size,
5252
this.onClicked,
53-
}) : isFluid = false;
54-
55-
/// Used by the platform implementation to create a new
56-
/// [PlatformCompanionAdSlot] with fluid size.
57-
const PlatformCompanionAdSlotCreationParams.fluid({this.onClicked})
58-
: width = null,
59-
height = null,
60-
isFluid = true;
53+
});
6154

62-
/// The width of the companion slot.
63-
///
64-
/// Returns `null` when [isFluid] returns true;
65-
final int? width;
66-
67-
/// The height of the companion slot.
68-
///
69-
/// Returns `null` when [isFluid] returns true;
70-
final int? height;
55+
/// The size of the slot.
56+
final CompanionAdSlotSize size;
7157

7258
/// Called when the slot is clicked on by the user and will successfully
7359
/// navigate away.
7460
final void Function()? onClicked;
75-
76-
/// Whether the companion ad has no fixed size, but rather adapts to fit the
77-
/// creative content they display.
78-
final bool isFluid;
7961
}
8062

8163
/// Ad slot for companion ads.

packages/interactive_media_ads/lib/src/platform_interface/platform_interface.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export 'ad_error.dart';
66
export 'ad_event.dart';
77
export 'ad_ui_element.dart';
88
export 'build_widget_creation_params.dart';
9+
export 'companion_ad_slot_size.dart';
910
export 'interactive_media_ads_platform.dart';
1011
export 'platform_ad_display_container.dart';
1112
export 'platform_ads_loader.dart';

packages/interactive_media_ads/test/android/ad_display_container_test.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -754,9 +754,8 @@ void main() {
754754
platformViewsProxy: mockPlatformViewsProxy,
755755
companionSlots: <PlatformCompanionAdSlot>[
756756
AndroidCompanionAdSlot(
757-
AndroidCompanionAdSlotCreationParams.size(
758-
width: 300,
759-
height: 444,
757+
AndroidCompanionAdSlotCreationParams(
758+
size: CompanionAdSlotSize.fixed(width: 300, height: 444),
760759
proxy: imaProxy,
761760
),
762761
)

packages/interactive_media_ads/test/android/companion_ad_slot_test.dart

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:interactive_media_ads/src/android/android_companion_ad_slot.dart
77
import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart'
88
as ima;
99
import 'package:interactive_media_ads/src/android/interactive_media_ads_proxy.dart';
10+
import 'package:interactive_media_ads/src/platform_interface/companion_ad_slot_size.dart';
1011
import 'package:mockito/annotations.dart';
1112
import 'package:mockito/mockito.dart';
1213

@@ -25,9 +26,8 @@ void main() {
2526
);
2627
final MockCompanionAdSlot mockCompanionAdSlot = MockCompanionAdSlot();
2728
final AndroidCompanionAdSlotCreationParams params =
28-
AndroidCompanionAdSlotCreationParams.size(
29-
width: 300,
30-
height: 400,
29+
AndroidCompanionAdSlotCreationParams(
30+
size: CompanionAdSlotSize.fixed(width: 300, height: 400),
3131
proxy: InteractiveMediaAdsProxy(
3232
newFrameLayout: () {
3333
return frameLayout;
@@ -52,9 +52,8 @@ void main() {
5252
test('AndroidCompanionAdSlot receives onClick', () async {
5353
final MockCompanionAdSlot mockCompanionAdSlot = MockCompanionAdSlot();
5454
final AndroidCompanionAdSlotCreationParams params =
55-
AndroidCompanionAdSlotCreationParams.size(
56-
width: 300,
57-
height: 400,
55+
AndroidCompanionAdSlotCreationParams(
56+
size: CompanionAdSlotSize.fixed(width: 300, height: 400),
5857
onClicked: expectAsync0(() {}),
5958
proxy: InteractiveMediaAdsProxy(
6059
newFrameLayout: () {

0 commit comments

Comments
 (0)