Skip to content

Commit 3740573

Browse files
committed
refactor(content_management): improve country data handling in create headline page
- Remove direct state access to allCountries in ContentManagementBloc - Use BlocListener to update CreateHeadlineBloc when allCountries change in ContentManagementBloc - Simplify CreateHeadlineBloc initialization by directly reading allCountries from context - Add loading indicator for country data in ContentManagementBloc
1 parent bfd5d89 commit 3740573

File tree

1 file changed

+24
-21
lines changed

1 file changed

+24
-21
lines changed

lib/content_management/view/create_headline_page.dart

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,12 @@ class CreateHeadlinePage extends StatelessWidget {
1919

2020
@override
2121
Widget build(BuildContext context) {
22-
// The list of all countries is fetched once and cached in the
23-
// ContentManagementBloc. We read it here and provide it to the
24-
// CreateHeadlineBloc.
25-
final contentManagementState = context.watch<ContentManagementBloc>().state;
26-
final allCountries = contentManagementState.allCountries;
27-
2822
return BlocProvider(
2923
create: (context) => CreateHeadlineBloc(
3024
headlinesRepository: context.read<DataRepository<Headline>>(),
3125
sourcesRepository: context.read<DataRepository<Source>>(),
3226
topicsRepository: context.read<DataRepository<Topic>>(),
33-
countries: allCountries,
27+
countries: context.read<ContentManagementBloc>().state.allCountries,
3428
)..add(const CreateHeadlineDataLoaded()),
3529
child: const _CreateHeadlineView(),
3630
);
@@ -79,12 +73,21 @@ class _CreateHeadlineViewState extends State<_CreateHeadlineView> {
7973
),
8074
],
8175
),
82-
body: BlocConsumer<CreateHeadlineBloc, CreateHeadlineState>(
83-
listenWhen: (previous, current) => previous.status != current.status,
84-
listener: (context, state) {
85-
if (state.status == CreateHeadlineStatus.success &&
86-
state.createdHeadline != null &&
87-
ModalRoute.of(context)!.isCurrent) {
76+
body: BlocListener<ContentManagementBloc, ContentManagementState>(
77+
listenWhen: (previous, current) =>
78+
previous.allCountriesStatus != current.allCountriesStatus &&
79+
current.allCountriesStatus == ContentManagementStatus.success,
80+
listener: (context, contentState) {
81+
context.read<CreateHeadlineBloc>().add(
82+
CreateHeadlineDataUpdated(countries: contentState.allCountries),
83+
);
84+
},
85+
child: BlocConsumer<CreateHeadlineBloc, CreateHeadlineState>(
86+
listenWhen: (previous, current) => previous.status != current.status,
87+
listener: (context, state) {
88+
if (state.status == CreateHeadlineStatus.success &&
89+
state.createdHeadline != null &&
90+
ModalRoute.of(context)!.isCurrent) {
8891
ScaffoldMessenger.of(context)
8992
..hideCurrentSnackBar()
9093
..showSnackBar(
@@ -107,14 +110,14 @@ class _CreateHeadlineViewState extends State<_CreateHeadlineView> {
107110
);
108111
}
109112
},
110-
builder: (context, state) {
111-
if (state.status == CreateHeadlineStatus.loading) {
112-
return LoadingStateWidget(
113-
icon: Icons.newspaper,
114-
headline: l10n.loadingData,
115-
subheadline: l10n.pleaseWait,
116-
);
117-
}
113+
builder: (context, state) {
114+
if (state.status == CreateHeadlineStatus.loading) {
115+
return LoadingStateWidget(
116+
icon: Icons.newspaper,
117+
headline: l10n.loadingData,
118+
subheadline: l10n.pleaseWait,
119+
);
120+
}
118121

119122
if (state.status == CreateHeadlineStatus.failure &&
120123
state.sources.isEmpty &&

0 commit comments

Comments
 (0)