Skip to content

Commit 7238b04

Browse files
authored
Merge pull request #107 from flutter-news-app-full-source-code/build/update-dependencies
Build/update dependencies
2 parents 3c03aa3 + a2f2fec commit 7238b04

16 files changed

+175
-66
lines changed

lib/content_management/bloc/create_source/create_source_bloc.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
1818
on<CreateSourceNameChanged>(_onNameChanged);
1919
on<CreateSourceDescriptionChanged>(_onDescriptionChanged);
2020
on<CreateSourceUrlChanged>(_onUrlChanged);
21+
on<CreateSourceLogoUrlChanged>(_onLogoUrlChanged);
2122
on<CreateSourceTypeChanged>(_onSourceTypeChanged);
2223
on<CreateSourceLanguageChanged>(_onLanguageChanged);
2324
on<CreateSourceHeadquartersChanged>(_onHeadquartersChanged);
@@ -49,6 +50,14 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
4950
emit(state.copyWith(url: event.url));
5051
}
5152

53+
void _onLogoUrlChanged(
54+
CreateSourceLogoUrlChanged event,
55+
Emitter<CreateSourceState> emit,
56+
) {
57+
// Update state when the logo URL input changes.
58+
emit(state.copyWith(logoUrl: event.logoUrl));
59+
}
60+
5261
void _onSourceTypeChanged(
5362
CreateSourceTypeChanged event,
5463
Emitter<CreateSourceState> emit,
@@ -81,6 +90,7 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
8190
final newSource = Source(
8291
id: _uuid.v4(),
8392
name: state.name,
93+
logoUrl: state.logoUrl,
8494
description: state.description,
8595
url: state.url,
8696
sourceType: state.sourceType!,
@@ -92,6 +102,7 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
92102
);
93103

94104
await _sourcesRepository.create(item: newSource);
105+
95106
emit(
96107
state.copyWith(
97108
status: CreateSourceStatus.success,
@@ -121,6 +132,7 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
121132
final newSource = Source(
122133
id: _uuid.v4(),
123134
name: state.name,
135+
logoUrl: state.logoUrl,
124136
description: state.description,
125137
url: state.url,
126138
sourceType: state.sourceType!,
@@ -132,6 +144,7 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
132144
);
133145

134146
await _sourcesRepository.create(item: newSource);
147+
135148
emit(
136149
state.copyWith(
137150
status: CreateSourceStatus.success,

lib/content_management/bloc/create_source/create_source_event.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ final class CreateSourceUrlChanged extends CreateSourceEvent {
3232
List<Object?> get props => [url];
3333
}
3434

35+
/// Event for when the source's logo URL is changed.
36+
final class CreateSourceLogoUrlChanged extends CreateSourceEvent {
37+
const CreateSourceLogoUrlChanged(this.logoUrl);
38+
final String logoUrl;
39+
@override
40+
List<Object?> get props => [logoUrl];
41+
}
42+
3543
/// Event for when the source's type is changed.
3644
final class CreateSourceTypeChanged extends CreateSourceEvent {
3745
const CreateSourceTypeChanged(this.sourceType);

lib/content_management/bloc/create_source/create_source_state.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ final class CreateSourceState extends Equatable {
2626
this.name = '',
2727
this.description = '',
2828
this.url = '',
29+
this.logoUrl = '',
2930
this.sourceType,
3031
this.language,
3132
this.headquarters,
@@ -37,6 +38,7 @@ final class CreateSourceState extends Equatable {
3738
final String name;
3839
final String description;
3940
final String url;
41+
final String logoUrl;
4042
final SourceType? sourceType;
4143
final Language? language;
4244
final Country? headquarters;
@@ -48,6 +50,7 @@ final class CreateSourceState extends Equatable {
4850
name.isNotEmpty &&
4951
description.isNotEmpty &&
5052
url.isNotEmpty &&
53+
logoUrl.isNotEmpty &&
5154
sourceType != null &&
5255
language != null &&
5356
headquarters != null;
@@ -57,6 +60,7 @@ final class CreateSourceState extends Equatable {
5760
String? name,
5861
String? description,
5962
String? url,
63+
String? logoUrl,
6064
ValueGetter<SourceType?>? sourceType,
6165
ValueGetter<Language?>? language,
6266
ValueGetter<Country?>? headquarters,
@@ -68,6 +72,7 @@ final class CreateSourceState extends Equatable {
6872
name: name ?? this.name,
6973
description: description ?? this.description,
7074
url: url ?? this.url,
75+
logoUrl: logoUrl ?? this.logoUrl,
7176
sourceType: sourceType != null ? sourceType() : this.sourceType,
7277
language: language != null ? language() : this.language,
7378
headquarters: headquarters != null ? headquarters() : this.headquarters,
@@ -82,6 +87,7 @@ final class CreateSourceState extends Equatable {
8287
name,
8388
description,
8489
url,
90+
logoUrl,
8591
sourceType,
8692
language,
8793
headquarters,

lib/content_management/bloc/edit_source/edit_source_bloc.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class EditSourceBloc extends Bloc<EditSourceEvent, EditSourceState> {
2121
on<EditSourceNameChanged>(_onNameChanged);
2222
on<EditSourceDescriptionChanged>(_onDescriptionChanged);
2323
on<EditSourceUrlChanged>(_onUrlChanged);
24+
on<EditSourceLogoUrlChanged>(_onLogoUrlChanged);
2425
on<EditSourceTypeChanged>(_onSourceTypeChanged);
2526
on<EditSourceLanguageChanged>(_onLanguageChanged);
2627
on<EditSourceHeadquartersChanged>(_onHeadquartersChanged);
@@ -44,6 +45,7 @@ class EditSourceBloc extends Bloc<EditSourceEvent, EditSourceState> {
4445
name: source.name,
4546
description: source.description,
4647
url: source.url,
48+
logoUrl: source.logoUrl,
4749
sourceType: () => source.sourceType,
4850
language: () => source.language,
4951
headquarters: () => source.headquarters,
@@ -89,6 +91,16 @@ class EditSourceBloc extends Bloc<EditSourceEvent, EditSourceState> {
8991
emit(state.copyWith(url: event.url, status: EditSourceStatus.initial));
9092
}
9193

94+
void _onLogoUrlChanged(
95+
EditSourceLogoUrlChanged event,
96+
Emitter<EditSourceState> emit,
97+
) {
98+
// Update state when the logo URL input changes.
99+
emit(
100+
state.copyWith(logoUrl: event.logoUrl, status: EditSourceStatus.initial),
101+
);
102+
}
103+
92104
void _onSourceTypeChanged(
93105
EditSourceTypeChanged event,
94106
Emitter<EditSourceState> emit,
@@ -135,6 +147,7 @@ class EditSourceBloc extends Bloc<EditSourceEvent, EditSourceState> {
135147
final originalSource = await _sourcesRepository.read(id: state.sourceId);
136148
final updatedSource = originalSource.copyWith(
137149
name: state.name,
150+
logoUrl: state.logoUrl,
138151
description: state.description,
139152
url: state.url,
140153
sourceType: state.sourceType,
@@ -148,6 +161,7 @@ class EditSourceBloc extends Bloc<EditSourceEvent, EditSourceState> {
148161
id: state.sourceId,
149162
item: updatedSource,
150163
);
164+
151165
emit(
152166
state.copyWith(
153167
status: EditSourceStatus.success,
@@ -176,6 +190,7 @@ class EditSourceBloc extends Bloc<EditSourceEvent, EditSourceState> {
176190
final originalSource = await _sourcesRepository.read(id: state.sourceId);
177191
final updatedSource = originalSource.copyWith(
178192
name: state.name,
193+
logoUrl: state.logoUrl,
179194
description: state.description,
180195
url: state.url,
181196
sourceType: state.sourceType,
@@ -189,6 +204,7 @@ class EditSourceBloc extends Bloc<EditSourceEvent, EditSourceState> {
189204
id: state.sourceId,
190205
item: updatedSource,
191206
);
207+
192208
emit(
193209
state.copyWith(
194210
status: EditSourceStatus.success,

lib/content_management/bloc/edit_source/edit_source_event.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,16 @@ final class EditSourceUrlChanged extends EditSourceEvent {
4343
List<Object?> get props => [url];
4444
}
4545

46+
/// Event triggered when the source logo URL input changes.
47+
final class EditSourceLogoUrlChanged extends EditSourceEvent {
48+
const EditSourceLogoUrlChanged(this.logoUrl);
49+
50+
final String logoUrl;
51+
52+
@override
53+
List<Object?> get props => [logoUrl];
54+
}
55+
4656
/// Event triggered when the source type input changes.
4757
final class EditSourceTypeChanged extends EditSourceEvent {
4858
const EditSourceTypeChanged(this.sourceType);

lib/content_management/bloc/edit_source/edit_source_state.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ final class EditSourceState extends Equatable {
2626
this.name = '',
2727
this.description = '',
2828
this.url = '',
29+
this.logoUrl = '',
2930
this.sourceType,
3031
this.language,
3132
this.headquarters,
@@ -38,6 +39,7 @@ final class EditSourceState extends Equatable {
3839
final String name;
3940
final String description;
4041
final String url;
42+
final String logoUrl;
4143
final SourceType? sourceType;
4244
final Language? language;
4345
final Country? headquarters;
@@ -50,6 +52,7 @@ final class EditSourceState extends Equatable {
5052
name.isNotEmpty &&
5153
description.isNotEmpty &&
5254
url.isNotEmpty &&
55+
logoUrl.isNotEmpty &&
5356
sourceType != null &&
5457
language != null &&
5558
headquarters != null;
@@ -60,6 +63,7 @@ final class EditSourceState extends Equatable {
6063
String? name,
6164
String? description,
6265
String? url,
66+
String? logoUrl,
6367
ValueGetter<SourceType?>? sourceType,
6468
ValueGetter<Language?>? language,
6569
ValueGetter<Country?>? headquarters,
@@ -72,6 +76,7 @@ final class EditSourceState extends Equatable {
7276
name: name ?? this.name,
7377
description: description ?? this.description,
7478
url: url ?? this.url,
79+
logoUrl: logoUrl ?? this.logoUrl,
7580
sourceType: sourceType != null ? sourceType() : this.sourceType,
7681
language: language != null ? language() : this.language,
7782
headquarters: headquarters != null ? headquarters() : this.headquarters,
@@ -87,6 +92,7 @@ final class EditSourceState extends Equatable {
8792
name,
8893
description,
8994
url,
95+
logoUrl,
9096
sourceType,
9197
language,
9298
headquarters,

lib/content_management/view/create_source_page.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class _CreateSourceViewState extends State<_CreateSourceView> {
3939
late final TextEditingController _nameController;
4040
late final TextEditingController _descriptionController;
4141
late final TextEditingController _urlController;
42+
late final TextEditingController _logoUrlController;
4243

4344
@override
4445
void initState() {
@@ -47,13 +48,15 @@ class _CreateSourceViewState extends State<_CreateSourceView> {
4748
_nameController = TextEditingController(text: state.name);
4849
_descriptionController = TextEditingController(text: state.description);
4950
_urlController = TextEditingController(text: state.url);
51+
_logoUrlController = TextEditingController(text: state.logoUrl);
5052
}
5153

5254
@override
5355
void dispose() {
5456
_nameController.dispose();
5557
_descriptionController.dispose();
5658
_urlController.dispose();
59+
_logoUrlController.dispose();
5760
super.dispose();
5861
}
5962

@@ -211,6 +214,17 @@ class _CreateSourceViewState extends State<_CreateSourceView> {
211214
.add(CreateSourceUrlChanged(value)),
212215
),
213216
const SizedBox(height: AppSpacing.lg),
217+
TextFormField(
218+
controller: _logoUrlController,
219+
decoration: InputDecoration(
220+
labelText: l10n.logoUrl,
221+
border: const OutlineInputBorder(),
222+
),
223+
onChanged: (value) => context
224+
.read<CreateSourceBloc>()
225+
.add(CreateSourceLogoUrlChanged(value)),
226+
),
227+
const SizedBox(height: AppSpacing.lg),
214228
SearchableSelectionInput<Language>(
215229
label: l10n.language,
216230
selectedItems: state.language != null

lib/content_management/view/edit_source_page.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,20 +43,23 @@ class _EditSourceViewState extends State<_EditSourceView> {
4343
late final TextEditingController _nameController;
4444
late final TextEditingController _descriptionController;
4545
late final TextEditingController _urlController;
46+
late final TextEditingController _logoUrlController;
4647

4748
@override
4849
void initState() {
4950
super.initState();
5051
_nameController = TextEditingController();
5152
_descriptionController = TextEditingController();
5253
_urlController = TextEditingController();
54+
_logoUrlController = TextEditingController();
5355
}
5456

5557
@override
5658
void dispose() {
5759
_nameController.dispose();
5860
_descriptionController.dispose();
5961
_urlController.dispose();
62+
_logoUrlController.dispose();
6063
super.dispose();
6164
}
6265

@@ -140,6 +143,7 @@ class _EditSourceViewState extends State<_EditSourceView> {
140143
_nameController.text = state.name;
141144
_descriptionController.text = state.description;
142145
_urlController.text = state.url;
146+
_logoUrlController.text = state.logoUrl;
143147
}
144148
},
145149
builder: (context, state) {
@@ -201,6 +205,17 @@ class _EditSourceViewState extends State<_EditSourceView> {
201205
),
202206
),
203207
const SizedBox(height: AppSpacing.lg),
208+
TextFormField(
209+
controller: _logoUrlController,
210+
decoration: InputDecoration(
211+
labelText: l10n.logoUrl,
212+
border: const OutlineInputBorder(),
213+
),
214+
onChanged: (value) => context.read<EditSourceBloc>().add(
215+
EditSourceLogoUrlChanged(value),
216+
),
217+
),
218+
const SizedBox(height: AppSpacing.lg),
204219
SearchableSelectionInput<Language>(
205220
label: l10n.language,
206221
selectedItems: state.language != null

lib/content_management/widgets/filter_dialog/filter_dialog.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ class _FilterDialogState extends State<FilterDialog> {
264264
name: '',
265265
description: '',
266266
url: '',
267+
logoUrl: '',
267268
sourceType: SourceType.other,
268269
language: Language(
269270
id: '',

lib/l10n/app_localizations.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2839,6 +2839,12 @@ abstract class AppLocalizations {
28392839
/// In en, this message translates to:
28402840
/// **'Do you want to publish this ad or save it as a draft?'**
28412841
String get saveAdMessage;
2842+
2843+
/// Label for the source logo URL input field
2844+
///
2845+
/// In en, this message translates to:
2846+
/// **'Logo URL'**
2847+
String get logoUrl;
28422848
}
28432849

28442850
class _AppLocalizationsDelegate

0 commit comments

Comments
 (0)