Skip to content

Commit 362f62c

Browse files
committed
refactor(headlines-search): replace custom ad widget with AdLoaderWidget
- Remove custom ad rendering logic - Integrate AdLoaderWidget for consistent ad display - Add AdService dependency - Update imports and handle deprecation of some packages
1 parent 1ef4ee7 commit 362f62c

File tree

1 file changed

+10
-43
lines changed

1 file changed

+10
-43
lines changed

lib/headlines-search/view/headlines_search_page.dart

Lines changed: 10 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
//
2+
//
23
// ignore_for_file: lines_longer_than_80_chars
34

45
import 'package:core/core.dart';
56
import 'package:flutter/material.dart';
67
import 'package:flutter_bloc/flutter_bloc.dart';
8+
import 'package:flutter_news_app_mobile_client_full_source_code/ads/ad_service.dart';
9+
import 'package:flutter_news_app_mobile_client_full_source_code/ads/models/ad_placeholder.dart';
710
import 'package:flutter_news_app_mobile_client_full_source_code/ads/models/ad_theme_style.dart';
11+
import 'package:flutter_news_app_mobile_client_full_source_code/ads/widgets/ad_loader_widget.dart';
812
import 'package:flutter_news_app_mobile_client_full_source_code/app/bloc/app_bloc.dart';
913
// HeadlineItemWidget import removed
1014
import 'package:flutter_news_app_mobile_client_full_source_code/headlines-search/bloc/headlines_search_bloc.dart';
@@ -238,10 +242,6 @@ class _HeadlinesSearchViewState extends State<_HeadlinesSearchView> {
238242
),
239243
body: BlocBuilder<HeadlinesSearchBloc, HeadlinesSearchState>(
240244
builder: (context, state) {
241-
// Ensure textTheme and colorScheme are available in this scope
242-
final currentTextTheme = Theme.of(context).textTheme;
243-
final currentColorScheme = Theme.of(context).colorScheme;
244-
245245
return switch (state) {
246246
HeadlinesSearchInitial() => InitialStateWidget(
247247
icon: Icons.search_outlined,
@@ -344,45 +344,12 @@ class _HeadlinesSearchViewState extends State<_HeadlinesSearchView> {
344344
return TopicItemWidget(topic: feedItem);
345345
} else if (feedItem is Source) {
346346
return SourceItemWidget(source: feedItem);
347-
} else if (feedItem is Ad) {
348-
return Card(
349-
margin: const EdgeInsets.symmetric(
350-
vertical: AppSpacing.xs,
351-
),
352-
color: currentColorScheme.surfaceContainerHighest,
353-
child: Padding(
354-
padding: const EdgeInsets.all(AppSpacing.md),
355-
child: Column(
356-
children: [
357-
if (feedItem.imageUrl.isNotEmpty)
358-
ClipRRect(
359-
// Add ClipRRect for consistency
360-
borderRadius: BorderRadius.circular(
361-
AppSpacing.xs,
362-
),
363-
child: Image.network(
364-
feedItem.imageUrl,
365-
height: 100,
366-
fit: BoxFit.cover,
367-
errorBuilder: (ctx, err, st) => Icon(
368-
Icons.broken_image_outlined,
369-
size: AppSpacing.xxl,
370-
color: currentColorScheme
371-
.onSurfaceVariant,
372-
),
373-
),
374-
),
375-
const SizedBox(height: AppSpacing.sm),
376-
Text(
377-
'Placeholder Ad: ${feedItem.adType.name}',
378-
style: currentTextTheme.titleSmall,
379-
),
380-
Text(
381-
'Placement: ${feedItem.placement.name}',
382-
style: currentTextTheme.bodySmall,
383-
),
384-
],
385-
),
347+
} else if (feedItem is AdPlaceholder) {
348+
return AdLoaderWidget(
349+
adPlaceholder: feedItem,
350+
adService: context.read<AdService>(),
351+
adThemeStyle: AdThemeStyle.fromTheme(
352+
Theme.of(context),
386353
),
387354
);
388355
}

0 commit comments

Comments
 (0)