Skip to content

Commit e67adeb

Browse files
authored
Merge pull request #39 from flutter-news-app-full-source-code/enhance-ad-config
Enhance ad config
2 parents 70434ca + 7d4387d commit e67adeb

21 files changed

+223
-457
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ Think of it as the common language 🗣️ that all parts of your news applicati
1515
* **🔗 Seamless Integration:** Enables the Flutter mobile app, web dashboard, and Dart Frog API to work together flawlessly using a shared language.
1616
* **🎯 Consistency by Design:** Reduces errors and simplifies maintenance by providing a single source of truth for all core data definitions.
1717
* **🛡️ Standardized Error Handling:** Includes a comprehensive hierarchy of `HttpException` subtypes for predictable error management across all layers.
18-
* **🌟 Foundation for Rich Features:** Provides models for user personalization (`UserContentPreferences`, `UserAppSettings`), dynamic feed items (e.g., `Ad`, `CallToActionItem`, `ContentCollectionItem`), remote configuration (`RemoteConfig`), and standardized API responses.
18+
* **🌟 Foundation for Rich Features:** Provides models for user personalization (`UserContentPreferences`, `UserAppSettings`), dynamic feed items (e.g., `LocalAd`, `CallToActionItem`, `ContentCollectionItem`), remote configuration (`RemoteConfig`), and standardized API responses.
1919

2020
## 🎁 Key Models Provided
2121

2222
This package includes well-defined Dart classes for:
2323

2424
* **News & Content Entities:** `Headline`, `Topic`, `Source`, `Country`, `Language`
25-
* **Feed System:** `FeedItem` (the abstract base class for all feed content) and its concrete subtypes like `Headline`, `Ad`, `CallToActionItem`, and `ContentCollectionItem`.
25+
* **Feed System:** `FeedItem` (the abstract base class for all feed content) and its concrete subtypes like `Headline`, `LocalAd`, `CallToActionItem`, and `ContentCollectionItem`.
2626
* **User Data:** `User`, `AppUserRole`, `DashboardUserRole`, `Permission`, `UserContentPreferences`, `UserAppSettings`
2727
* **Application Configuration:** `RemoteConfig` (containing `AdConfig`, `UserPreferenceConfig`, `AppStatus`, and `FeedDecoratorConfig`)
2828
* **Dashboard:** `DashboardSummary`

lib/src/enums/ad_type.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/// {@template ad_type}
2+
/// Defines the visual format or type of an advertisement in the feed.
3+
/// {@endtemplate}
4+
enum AdType {
5+
/// A banner advertisement, typically a rectangular image.
6+
banner,
7+
8+
/// A native advertisement, designed to blend seamlessly with the feed content.
9+
native,
10+
11+
/// A video advertisement.
12+
video,
13+
14+
/// A full-screen interstitial advertisement.
15+
interstitial,
16+
}

lib/src/enums/enums.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export 'ad_platform_type.dart';
2+
export 'ad_type.dart';
23
export 'app_accent_theme.dart';
34
export 'app_base_theme.dart';
45
export 'app_font_weight.dart';

lib/src/fixtures/remote_configs.dart

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -41,48 +41,6 @@ final List<RemoteConfig> remoteConfigsFixturesData = [
4141
inArticleBannerAdId: 'local_in_article_banner_ad_id',
4242
),
4343
},
44-
localAdsCatalog: {
45-
'local_feed_native_ad_id': LocalAd(
46-
id: 'local_feed_native_ad_id',
47-
title: 'Local Native Ad Title',
48-
subtitle: 'This is a local native ad description.',
49-
imageUrl: 'https://example.com/local_native_ad.png',
50-
targetUrl: 'https://example.com/local_native_ad_target',
51-
adType: AdType.native,
52-
),
53-
'local_feed_banner_ad_id': LocalAd(
54-
id: 'local_feed_banner_ad_id',
55-
title: 'Local Banner Ad Title',
56-
subtitle: 'This is a local banner ad description.',
57-
imageUrl: 'https://example.com/local_banner_ad.png',
58-
targetUrl: 'https://example.com/local_banner_ad_target',
59-
adType: AdType.banner,
60-
),
61-
'local_article_interstitial_ad_id': LocalAd(
62-
id: 'local_article_interstitial_ad_id',
63-
title: 'Local Interstitial Ad Title',
64-
subtitle: 'This is a local interstitial ad description.',
65-
imageUrl: 'https://example.com/local_interstitial_ad.png',
66-
targetUrl: 'https://example.com/local_interstitial_ad_target',
67-
adType: AdType.interstitial,
68-
),
69-
'local_in_article_native_ad_id': LocalAd(
70-
id: 'local_in_article_native_ad_id',
71-
title: 'Local In-Article Native Ad Title',
72-
subtitle: 'This is a local in-article native ad description.',
73-
imageUrl: 'https://example.com/local_in_article_native_ad.png',
74-
targetUrl: 'https://example.com/local_in_article_native_ad_target',
75-
adType: AdType.native,
76-
),
77-
'local_in_article_banner_ad_id': LocalAd(
78-
id: 'local_in_article_banner_ad_id',
79-
title: 'Local In-Article Banner Ad Title',
80-
subtitle: 'This is a local in-article banner ad description.',
81-
imageUrl: 'https://example.com/local_in_article_banner_ad.png',
82-
targetUrl: 'https://example.com/local_in_article_banner_ad_target',
83-
adType: AdType.banner,
84-
),
85-
},
8644
feedAdConfiguration: FeedAdConfiguration(
8745
enabled: true,
8846
adType: AdType.native,

lib/src/models/config/ad_config.dart

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import 'package:core/src/enums/ad_platform_type.dart';
22
import 'package:core/src/models/config/ad_platform_identifiers.dart';
33
import 'package:core/src/models/config/article_ad_configuration.dart';
44
import 'package:core/src/models/config/feed_ad_configuration.dart';
5-
import 'package:core/src/models/config/local_ad.dart';
65
import 'package:equatable/equatable.dart';
76
import 'package:json_annotation/json_annotation.dart';
87
import 'package:meta/meta.dart';
@@ -19,7 +18,6 @@ class AdConfig extends Equatable {
1918
const AdConfig({
2019
required this.primaryAdPlatform,
2120
required this.platformAdIdentifiers,
22-
required this.localAdsCatalog,
2321
required this.feedAdConfiguration,
2422
required this.articleAdConfiguration,
2523
});
@@ -37,9 +35,6 @@ class AdConfig extends Equatable {
3735
/// Map to store identifiers for all platforms.
3836
final Map<AdPlatformType, AdPlatformIdentifiers> platformAdIdentifiers;
3937

40-
/// All defined local ads by ID.
41-
final Map<String, LocalAd> localAdsCatalog;
42-
4338
/// Configuration for main feed, search feed, similar headlines feed.
4439
final FeedAdConfiguration feedAdConfiguration;
4540

@@ -50,7 +45,6 @@ class AdConfig extends Equatable {
5045
List<Object> get props => [
5146
primaryAdPlatform,
5247
platformAdIdentifiers,
53-
localAdsCatalog,
5448
feedAdConfiguration,
5549
articleAdConfiguration,
5650
];
@@ -60,15 +54,13 @@ class AdConfig extends Equatable {
6054
AdConfig copyWith({
6155
AdPlatformType? primaryAdPlatform,
6256
Map<AdPlatformType, AdPlatformIdentifiers>? platformAdIdentifiers,
63-
Map<String, LocalAd>? localAdsCatalog,
6457
FeedAdConfiguration? feedAdConfiguration,
6558
ArticleAdConfiguration? articleAdConfiguration,
6659
}) {
6760
return AdConfig(
6861
primaryAdPlatform: primaryAdPlatform ?? this.primaryAdPlatform,
6962
platformAdIdentifiers:
7063
platformAdIdentifiers ?? this.platformAdIdentifiers,
71-
localAdsCatalog: localAdsCatalog ?? this.localAdsCatalog,
7264
feedAdConfiguration: feedAdConfiguration ?? this.feedAdConfiguration,
7365
articleAdConfiguration:
7466
articleAdConfiguration ?? this.articleAdConfiguration,

lib/src/models/config/ad_config.g.dart

Lines changed: 0 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/models/config/article_ad_configuration.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import 'package:core/core.dart';
1+
import 'package:core/src/enums/enums.dart';
2+
import 'package:core/src/models/config/article_interstitial_ad_configuration.dart';
3+
import 'package:core/src/models/config/in_article_ad_slot_configuration.dart';
24
import 'package:equatable/equatable.dart';
35
import 'package:json_annotation/json_annotation.dart';
46
import 'package:meta/meta.dart';

lib/src/models/config/article_interstitial_ad_configuration.g.dart

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/models/config/config.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,5 @@ export 'feed_ad_frequency_config.dart';
99
export 'feed_decorator_config.dart';
1010
export 'feed_decorator_role_config.dart';
1111
export 'in_article_ad_slot_configuration.dart';
12-
export 'local_ad.dart';
1312
export 'remote_config.dart';
1413
export 'user_preference_config.dart';

lib/src/models/core/feed_item.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ abstract class FeedItem extends Equatable {
3838
return Source.fromJson(json);
3939
case 'country':
4040
return Country.fromJson(json);
41-
case 'ad':
42-
return Ad.fromJson(json);
4341
case 'callToAction':
4442
return CallToActionItem.fromJson(json);
43+
case 'localAd':
44+
return LocalAd.fromJson(json);
4545
case 'contentCollection':
4646
final contentType = json['contentType'] as String?;
4747
if (contentType == null) {

0 commit comments

Comments
 (0)