1
1
import 'package:bloc/bloc.dart' ;
2
2
import 'package:core/core.dart' ;
3
- import 'package:country_picker/country_picker.dart' as picker;
4
3
import 'package:data_repository/data_repository.dart' ;
5
4
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' ;
9
6
import 'package:uuid/uuid.dart' ;
10
7
11
8
part 'create_source_event.dart' ;
@@ -16,8 +13,12 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
16
13
/// {@macro create_source_bloc}
17
14
CreateSourceBloc ({
18
15
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 ()) {
21
22
on < CreateSourceDataLoaded > (_onDataLoaded);
22
23
on < CreateSourceNameChanged > (_onNameChanged);
23
24
on < CreateSourceDescriptionChanged > (_onDescriptionChanged);
@@ -30,15 +31,38 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
30
31
}
31
32
32
33
final DataRepository <Source > _sourcesRepository;
34
+ final DataRepository <Country > _countriesRepository;
35
+ final DataRepository <Language > _languagesRepository;
33
36
final _uuid = const Uuid ();
34
37
35
38
Future <void > _onDataLoaded (
36
39
CreateSourceDataLoaded event,
37
40
Emitter <CreateSourceState > emit,
38
41
) 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
+ }
42
66
}
43
67
44
68
void _onNameChanged (
@@ -80,13 +104,7 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
80
104
CreateSourceHeadquartersChanged event,
81
105
Emitter <CreateSourceState > emit,
82
106
) {
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));
90
108
}
91
109
92
110
void _onStatusChanged (
@@ -116,7 +134,7 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
116
134
description: state.description,
117
135
url: state.url,
118
136
sourceType: state.sourceType! ,
119
- language: adaptPackageLanguageToLanguageCode ( state.language! ) ,
137
+ language: state.language! .code ,
120
138
createdAt: now,
121
139
updatedAt: now,
122
140
headquarters: state.headquarters! ,
0 commit comments