Skip to content

Commit 18ab4a3

Browse files
committed
refactor(content): use country_picker for edit headline
1 parent b0d2a72 commit 18ab4a3

File tree

4 files changed

+26
-51
lines changed

4 files changed

+26
-51
lines changed

lib/content_management/bloc/edit_headline/edit_headline_bloc.dart

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import 'package:bloc/bloc.dart';
22
import 'package:core/core.dart';
3+
import 'package:country_picker/country_picker.dart' as picker;
34
import 'package:data_repository/data_repository.dart';
45
import 'package:equatable/equatable.dart';
56
import 'package:flutter/foundation.dart';
7+
import 'package:flutter_news_app_web_dashboard_full_source_code/shared/shared.dart';
68

79
part 'edit_headline_event.dart';
810
part 'edit_headline_state.dart';
@@ -14,12 +16,10 @@ class EditHeadlineBloc extends Bloc<EditHeadlineEvent, EditHeadlineState> {
1416
required DataRepository<Headline> headlinesRepository,
1517
required DataRepository<Source> sourcesRepository,
1618
required DataRepository<Topic> topicsRepository,
17-
required DataRepository<Country> countriesRepository,
1819
required String headlineId,
1920
}) : _headlinesRepository = headlinesRepository,
2021
_sourcesRepository = sourcesRepository,
2122
_topicsRepository = topicsRepository,
22-
_countriesRepository = countriesRepository,
2323
_headlineId = headlineId,
2424
super(const EditHeadlineState()) {
2525
on<EditHeadlineLoaded>(_onLoaded);
@@ -37,7 +37,6 @@ class EditHeadlineBloc extends Bloc<EditHeadlineEvent, EditHeadlineState> {
3737
final DataRepository<Headline> _headlinesRepository;
3838
final DataRepository<Source> _sourcesRepository;
3939
final DataRepository<Topic> _topicsRepository;
40-
final DataRepository<Country> _countriesRepository;
4140
final String _headlineId;
4241

4342
Future<void> _onLoaded(
@@ -50,7 +49,6 @@ class EditHeadlineBloc extends Bloc<EditHeadlineEvent, EditHeadlineState> {
5049
headlineResponse,
5150
sourcesResponse,
5251
topicsResponse,
53-
countriesResponse,
5452
] = await Future.wait([
5553
_headlinesRepository.read(id: _headlineId),
5654
_sourcesRepository.readAll(
@@ -59,15 +57,11 @@ class EditHeadlineBloc extends Bloc<EditHeadlineEvent, EditHeadlineState> {
5957
_topicsRepository.readAll(
6058
sort: [const SortOption('updatedAt', SortOrder.desc)],
6159
),
62-
_countriesRepository.readAll(
63-
sort: [const SortOption('updatedAt', SortOrder.desc)],
64-
),
6560
]);
6661

6762
final headline = headlineResponse as Headline;
6863
final sources = (sourcesResponse as PaginatedResponse<Source>).items;
6964
final topics = (topicsResponse as PaginatedResponse<Topic>).items;
70-
final countries = (countriesResponse as PaginatedResponse<Country>).items;
7165

7266
emit(
7367
state.copyWith(
@@ -82,7 +76,6 @@ class EditHeadlineBloc extends Bloc<EditHeadlineEvent, EditHeadlineState> {
8276
eventCountry: () => headline.eventCountry,
8377
sources: sources,
8478
topics: topics,
85-
countries: countries,
8679
contentStatus: headline.status,
8780
),
8881
);
@@ -166,12 +159,16 @@ class EditHeadlineBloc extends Bloc<EditHeadlineEvent, EditHeadlineState> {
166159
EditHeadlineCountryChanged event,
167160
Emitter<EditHeadlineState> emit,
168161
) {
169-
emit(
170-
state.copyWith(
171-
eventCountry: () => event.country,
172-
status: EditHeadlineStatus.initial,
173-
),
174-
);
162+
final packageCountry = event.country;
163+
if (packageCountry == null) {
164+
emit(state.copyWith(eventCountry: () => null));
165+
} else {
166+
final coreCountry = adaptPackageCountryToCoreCountry(packageCountry);
167+
emit(
168+
state.copyWith(
169+
eventCountry: () => coreCountry, status: EditHeadlineStatus.initial),
170+
);
171+
}
175172
}
176173

177174
void _onStatusChanged(

lib/content_management/bloc/edit_headline/edit_headline_event.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ final class EditHeadlineTopicChanged extends EditHeadlineEvent {
6464
/// Event for when the headline's country is changed.
6565
final class EditHeadlineCountryChanged extends EditHeadlineEvent {
6666
const EditHeadlineCountryChanged(this.country);
67-
final Country? country;
67+
final picker.Country? country;
6868
@override
6969
List<Object?> get props => [country];
7070
}

lib/content_management/bloc/edit_headline/edit_headline_state.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ final class EditHeadlineState extends Equatable {
3232
this.eventCountry,
3333
this.sources = const [],
3434
this.topics = const [],
35-
this.countries = const [],
3635
this.contentStatus = ContentStatus.active,
3736
this.exception,
3837
this.updatedHeadline,
@@ -49,7 +48,6 @@ final class EditHeadlineState extends Equatable {
4948
final Country? eventCountry;
5049
final List<Source> sources;
5150
final List<Topic> topics;
52-
final List<Country> countries;
5351
final ContentStatus contentStatus;
5452
final HttpException? exception;
5553
final Headline? updatedHeadline;
@@ -76,7 +74,6 @@ final class EditHeadlineState extends Equatable {
7674
ValueGetter<Country?>? eventCountry,
7775
List<Source>? sources,
7876
List<Topic>? topics,
79-
List<Country>? countries,
8077
ContentStatus? contentStatus,
8178
HttpException? exception,
8279
Headline? updatedHeadline,
@@ -93,7 +90,6 @@ final class EditHeadlineState extends Equatable {
9390
eventCountry: eventCountry != null ? eventCountry() : this.eventCountry,
9491
sources: sources ?? this.sources,
9592
topics: topics ?? this.topics,
96-
countries: countries ?? this.countries,
9793
contentStatus: contentStatus ?? this.contentStatus,
9894
exception: exception,
9995
updatedHeadline: updatedHeadline ?? this.updatedHeadline,
@@ -113,7 +109,6 @@ final class EditHeadlineState extends Equatable {
113109
eventCountry,
114110
sources,
115111
topics,
116-
countries,
117112
contentStatus,
118113
exception,
119114
updatedHeadline,

lib/content_management/view/edit_headline_page.dart

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:core/core.dart';
2+
import 'package:country_picker/country_picker.dart' as picker;
23
import 'package:data_repository/data_repository.dart';
34
import 'package:flutter/material.dart';
45
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -27,7 +28,6 @@ class EditHeadlinePage extends StatelessWidget {
2728
headlinesRepository: context.read<DataRepository<Headline>>(),
2829
sourcesRepository: context.read<DataRepository<Source>>(),
2930
topicsRepository: context.read<DataRepository<Topic>>(),
30-
countriesRepository: context.read<DataRepository<Country>>(),
3131
headlineId: headlineId,
3232
)..add(const EditHeadlineLoaded()),
3333
child: const _EditHeadlineView(),
@@ -178,17 +178,6 @@ class _EditHeadlineViewState extends State<_EditHeadlineView> {
178178
}
179179
}
180180

181-
Country? selectedCountry;
182-
if (state.eventCountry != null) {
183-
try {
184-
selectedCountry = state.countries.firstWhere(
185-
(c) => c.id == state.eventCountry!.id,
186-
);
187-
} catch (_) {
188-
selectedCountry = null;
189-
}
190-
}
191-
192181
return SingleChildScrollView(
193182
child: Padding(
194183
padding: const EdgeInsets.all(AppSpacing.lg),
@@ -282,24 +271,18 @@ class _EditHeadlineViewState extends State<_EditHeadlineView> {
282271
.add(EditHeadlineTopicChanged(value)),
283272
),
284273
const SizedBox(height: AppSpacing.lg),
285-
DropdownButtonFormField<Country?>(
286-
value: selectedCountry,
287-
decoration: InputDecoration(
288-
labelText: l10n.countryName,
289-
border: const OutlineInputBorder(),
290-
),
291-
items: [
292-
DropdownMenuItem(value: null, child: Text(l10n.none)),
293-
...state.countries.map(
294-
(country) => DropdownMenuItem(
295-
value: country,
296-
child: Text(country.name),
297-
),
298-
),
299-
],
300-
onChanged: (value) => context
301-
.read<EditHeadlineBloc>()
302-
.add(EditHeadlineCountryChanged(value)),
274+
CountryPickerFormField(
275+
labelText: l10n.countryName,
276+
initialValue: state.eventCountry != null
277+
? adaptCoreCountryToPackageCountry(
278+
state.eventCountry!,
279+
)
280+
: null,
281+
onChanged: (picker.Country country) {
282+
context.read<EditHeadlineBloc>().add(
283+
EditHeadlineCountryChanged(country),
284+
);
285+
},
303286
),
304287
const SizedBox(height: AppSpacing.lg),
305288
DropdownButtonFormField<ContentStatus>(

0 commit comments

Comments
 (0)