Skip to content

Commit a4ef9d9

Browse files
committed
refactor: Use SafeArea for HeadlineDetails/Feed page
- Improves layout on notched devices
1 parent 06be069 commit a4ef9d9

File tree

2 files changed

+35
-34
lines changed

2 files changed

+35
-34
lines changed

lib/headline-details/view/headline_details_page.dart

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -40,39 +40,41 @@ class _HeadlineDetailsView extends StatelessWidget {
4040
@override
4141
Widget build(BuildContext context) {
4242
final l10n = context.l10n;
43-
return Scaffold(
44-
// Body contains the BlocBuilder which returns either state widgets
45-
// or the scroll view
46-
body: BlocBuilder<HeadlineDetailsBloc, HeadlineDetailsState>(
47-
builder: (context, state) {
48-
// Handle Loading/Initial/Failure states outside the scroll view
49-
// for better user experience.
50-
return switch (state) {
51-
HeadlineDetailsInitial _ => InitialStateWidget(
52-
icon: Icons.article,
53-
headline: l10n.headlineDetailsInitialHeadline,
54-
subheadline: l10n.headlineDetailsInitialSubheadline,
55-
),
56-
HeadlineDetailsLoading _ => LoadingStateWidget(
57-
icon: Icons.downloading,
58-
headline: l10n.headlineDetailsLoadingHeadline,
59-
subheadline: l10n.headlineDetailsLoadingSubheadline,
60-
),
61-
final HeadlineDetailsFailure state => FailureStateWidget(
62-
message: state.message,
63-
onRetry: () {
64-
context.read<HeadlineDetailsBloc>().add(
65-
HeadlineDetailsRequested(headlineId: '1'),
66-
);
67-
},
68-
),
69-
final HeadlineDetailsLoaded state => _buildLoadedContent(
70-
context,
71-
state.headline,
72-
),
73-
_ => const SizedBox.shrink(), // Should not happen in practice
74-
};
75-
},
43+
return SafeArea(
44+
child: Scaffold(
45+
// Body contains the BlocBuilder which returns either state widgets
46+
// or the scroll view
47+
body: BlocBuilder<HeadlineDetailsBloc, HeadlineDetailsState>(
48+
builder: (context, state) {
49+
// Handle Loading/Initial/Failure states outside the scroll view
50+
// for better user experience.
51+
return switch (state) {
52+
HeadlineDetailsInitial _ => InitialStateWidget(
53+
icon: Icons.article,
54+
headline: l10n.headlineDetailsInitialHeadline,
55+
subheadline: l10n.headlineDetailsInitialSubheadline,
56+
),
57+
HeadlineDetailsLoading _ => LoadingStateWidget(
58+
icon: Icons.downloading,
59+
headline: l10n.headlineDetailsLoadingHeadline,
60+
subheadline: l10n.headlineDetailsLoadingSubheadline,
61+
),
62+
final HeadlineDetailsFailure state => FailureStateWidget(
63+
message: state.message,
64+
onRetry: () {
65+
context.read<HeadlineDetailsBloc>().add(
66+
HeadlineDetailsRequested(headlineId: '1'),
67+
);
68+
},
69+
),
70+
final HeadlineDetailsLoaded state => _buildLoadedContent(
71+
context,
72+
state.headline,
73+
),
74+
_ => const SizedBox.shrink(), // Should not happen in practice
75+
};
76+
},
77+
),
7678
),
7779
);
7880
}

lib/headlines-feed/view/headlines_feed_page.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ class _HeadlinesFeedViewState extends State<_HeadlinesFeedView> {
7878
'HT', // TODO(fulleni): Localize this title
7979
style: textTheme.titleLarge?.copyWith(fontWeight: FontWeight.bold),
8080
),
81-
centerTitle: true,
8281
actions: [
8382
// Removed Search IconButton
8483
BlocBuilder<HeadlinesFeedBloc, HeadlinesFeedState>(

0 commit comments

Comments
 (0)