Skip to content

Commit ab20f6c

Browse files
committed
refactor(content_management): improve headline editing with dynamic country data
- Remove direct state access for allCountries in EditHeadlinePage - Implement BlocListener for ContentManagementBloc to update countries data - Refactor widget tree to include new BlocListener
1 parent 3740573 commit ab20f6c

File tree

1 file changed

+25
-22
lines changed

1 file changed

+25
-22
lines changed

lib/content_management/view/edit_headline_page.dart

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,12 @@ class EditHeadlinePage extends StatelessWidget {
2222

2323
@override
2424
Widget build(BuildContext context) {
25-
// The list of all countries is fetched once and cached in the
26-
// ContentManagementBloc. We read it here and provide it to the
27-
// EditHeadlineBloc.
28-
final contentManagementState = context.watch<ContentManagementBloc>().state;
29-
final allCountries = contentManagementState.allCountries;
30-
3125
return BlocProvider(
3226
create: (context) => EditHeadlineBloc(
3327
headlinesRepository: context.read<DataRepository<Headline>>(),
3428
sourcesRepository: context.read<DataRepository<Source>>(),
3529
topicsRepository: context.read<DataRepository<Topic>>(),
36-
countries: allCountries,
30+
countries: context.read<ContentManagementBloc>().state.allCountries,
3731
headlineId: headlineId,
3832
)..add(const EditHeadlineLoaded()),
3933
child: const _EditHeadlineView(),
@@ -106,14 +100,23 @@ class _EditHeadlineViewState extends State<_EditHeadlineView> {
106100
),
107101
],
108102
),
109-
body: BlocConsumer<EditHeadlineBloc, EditHeadlineState>(
103+
body: BlocListener<ContentManagementBloc, ContentManagementState>(
110104
listenWhen: (previous, current) =>
111-
previous.status != current.status ||
112-
previous.initialHeadline != current.initialHeadline,
113-
listener: (context, state) {
114-
if (state.status == EditHeadlineStatus.success &&
115-
state.updatedHeadline != null &&
116-
ModalRoute.of(context)!.isCurrent) {
105+
previous.allCountriesStatus != current.allCountriesStatus &&
106+
current.allCountriesStatus == ContentManagementStatus.success,
107+
listener: (context, contentState) {
108+
context.read<EditHeadlineBloc>().add(
109+
EditHeadlineDataUpdated(countries: contentState.allCountries),
110+
);
111+
},
112+
child: BlocConsumer<EditHeadlineBloc, EditHeadlineState>(
113+
listenWhen: (previous, current) =>
114+
previous.status != current.status ||
115+
previous.initialHeadline != current.initialHeadline,
116+
listener: (context, state) {
117+
if (state.status == EditHeadlineStatus.success &&
118+
state.updatedHeadline != null &&
119+
ModalRoute.of(context)!.isCurrent) {
117120
ScaffoldMessenger.of(context)
118121
..hideCurrentSnackBar()
119122
..showSnackBar(
@@ -141,14 +144,14 @@ class _EditHeadlineViewState extends State<_EditHeadlineView> {
141144
_imageUrlController.text = state.imageUrl;
142145
}
143146
},
144-
builder: (context, state) {
145-
if (state.status == EditHeadlineStatus.loading) {
146-
return LoadingStateWidget(
147-
icon: Icons.newspaper,
148-
headline: l10n.loadingHeadline,
149-
subheadline: l10n.pleaseWait,
150-
);
151-
}
147+
builder: (context, state) {
148+
if (state.status == EditHeadlineStatus.loading) {
149+
return LoadingStateWidget(
150+
icon: Icons.newspaper,
151+
headline: l10n.loadingHeadline,
152+
subheadline: l10n.pleaseWait,
153+
);
154+
}
152155

153156
if (state.status == EditHeadlineStatus.failure &&
154157
state.initialHeadline == null) {

0 commit comments

Comments
 (0)