Skip to content

Commit 41c3e15

Browse files
committed
feat(content): refactor CreateSourceBloc to fetch API data
1 parent 673d45b commit 41c3e15

File tree

1 file changed

+35
-17
lines changed

1 file changed

+35
-17
lines changed

lib/content_management/bloc/create_source/create_source_bloc.dart

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
import 'package:bloc/bloc.dart';
22
import 'package:core/core.dart';
3-
import 'package:country_picker/country_picker.dart' as picker;
43
import 'package:data_repository/data_repository.dart';
54
import 'package:equatable/equatable.dart';
6-
import 'package:flutter/material.dart';
7-
import 'package:flutter_news_app_web_dashboard_full_source_code/shared/shared.dart';
8-
import 'package:language_picker/languages.dart';
5+
import 'package:flutter/foundation.dart';
96
import 'package:uuid/uuid.dart';
107

118
part 'create_source_event.dart';
@@ -16,8 +13,12 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
1613
/// {@macro create_source_bloc}
1714
CreateSourceBloc({
1815
required DataRepository<Source> sourcesRepository,
19-
}) : _sourcesRepository = sourcesRepository,
20-
super(const CreateSourceState()) {
16+
required DataRepository<Country> countriesRepository,
17+
required DataRepository<Language> languagesRepository,
18+
}) : _sourcesRepository = sourcesRepository,
19+
_countriesRepository = countriesRepository,
20+
_languagesRepository = languagesRepository,
21+
super(CreateSourceState()) {
2122
on<CreateSourceDataLoaded>(_onDataLoaded);
2223
on<CreateSourceNameChanged>(_onNameChanged);
2324
on<CreateSourceDescriptionChanged>(_onDescriptionChanged);
@@ -30,15 +31,38 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
3031
}
3132

3233
final DataRepository<Source> _sourcesRepository;
34+
final DataRepository<Country> _countriesRepository;
35+
final DataRepository<Language> _languagesRepository;
3336
final _uuid = const Uuid();
3437

3538
Future<void> _onDataLoaded(
3639
CreateSourceDataLoaded event,
3740
Emitter<CreateSourceState> emit,
3841
) async {
39-
// This event is now a no-op since we don't need to load countries.
40-
// We just ensure the BLoC is in the initial state.
41-
emit(state.copyWith(status: CreateSourceStatus.initial));
42+
emit(state.copyWith(status: CreateSourceStatus.loading));
43+
try {
44+
final [countriesResponse, languagesResponse] = await Future.wait([
45+
_countriesRepository.readAll(
46+
sort: [const SortOption('name', SortOrder.asc)],
47+
),
48+
_languagesRepository.readAll(
49+
sort: [const SortOption('name', SortOrder.asc)],
50+
),
51+
]);
52+
53+
final countries = (countriesResponse as PaginatedResponse<Country>).items;
54+
final languages = (languagesResponse as PaginatedResponse<Language>).items;
55+
56+
emit(
57+
state.copyWith(
58+
status: CreateSourceStatus.initial,
59+
countries: countries,
60+
languages: languages,
61+
),
62+
);
63+
} catch (e) {
64+
emit(state.copyWith(status: CreateSourceStatus.failure));
65+
}
4266
}
4367

4468
void _onNameChanged(
@@ -80,13 +104,7 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
80104
CreateSourceHeadquartersChanged event,
81105
Emitter<CreateSourceState> emit,
82106
) {
83-
final packageCountry = event.headquarters;
84-
if (packageCountry == null) {
85-
emit(state.copyWith(headquarters: () => null));
86-
} else {
87-
final coreCountry = adaptPackageCountryToCoreCountry(packageCountry);
88-
emit(state.copyWith(headquarters: () => coreCountry));
89-
}
107+
emit(state.copyWith(headquarters: () => event.headquarters));
90108
}
91109

92110
void _onStatusChanged(
@@ -116,7 +134,7 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
116134
description: state.description,
117135
url: state.url,
118136
sourceType: state.sourceType!,
119-
language: adaptPackageLanguageToLanguageCode(state.language!),
137+
language: state.language!.code,
120138
createdAt: now,
121139
updatedAt: now,
122140
headquarters: state.headquarters!,

0 commit comments

Comments
 (0)