Skip to content

Commit 832bf5c

Browse files
committed
feat(content): adapt edit source bloc for language picke
1 parent a84b878 commit 832bf5c

File tree

5 files changed

+22
-22
lines changed

5 files changed

+22
-22
lines changed

lib/content_management/bloc/edit_source/edit_source_bloc.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:bloc/bloc.dart';
22
import 'package:core/core.dart';
33
import 'package:country_picker/country_picker.dart' as picker;
44
import 'package:data_repository/data_repository.dart';
5+
import 'package:language_picker/language_picker.dart' as language_picker;
56
import 'package:equatable/equatable.dart';
67
import 'package:flutter/foundation.dart';
78
import 'package:flutter_news_app_web_dashboard_full_source_code/l10n/app_localizations.dart';
@@ -48,7 +49,9 @@ class EditSourceBloc extends Bloc<EditSourceEvent, EditSourceState> {
4849
description: source.description,
4950
url: source.url,
5051
sourceType: () => source.sourceType,
51-
language: source.language,
52+
language: () => adaptLanguageCodeToPackageLanguage(
53+
source.language,
54+
),
5255
headquarters: () => source.headquarters,
5356
contentStatus: source.status,
5457
),
@@ -109,7 +112,7 @@ class EditSourceBloc extends Bloc<EditSourceEvent, EditSourceState> {
109112
) {
110113
emit(
111114
state.copyWith(
112-
language: event.language,
115+
language: () => event.language,
113116
status: EditSourceStatus.initial,
114117
),
115118
);
@@ -169,7 +172,7 @@ class EditSourceBloc extends Bloc<EditSourceEvent, EditSourceState> {
169172
description: state.description,
170173
url: state.url,
171174
sourceType: state.sourceType,
172-
language: state.language,
175+
language: adaptPackageLanguageToLanguageCode(state.language!),
173176
headquarters: state.headquarters,
174177
status: state.contentStatus,
175178
updatedAt: DateTime.now(),

lib/content_management/bloc/edit_source/edit_source_event.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
part of 'edit_source_bloc.dart';
22

3+
import 'package:language_picker/language_picker.dart' as language_picker;
34
/// Base class for all events related to the [EditSourceBloc].
45
sealed class EditSourceEvent extends Equatable {
56
const EditSourceEvent();
@@ -56,8 +57,7 @@ final class EditSourceTypeChanged extends EditSourceEvent {
5657
/// Event triggered when the source language input changes.
5758
final class EditSourceLanguageChanged extends EditSourceEvent {
5859
const EditSourceLanguageChanged(this.language);
59-
60-
final String language;
60+
final language_picker.Language? language;
6161

6262
@override
6363
List<Object?> get props => [language];

lib/content_management/bloc/edit_source/edit_source_state.dart

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
part of 'edit_source_bloc.dart';
22

3+
import 'package:language_picker/language_picker.dart' as language_picker;
34
/// Represents the status of the edit source operation.
45
enum EditSourceStatus {
56
/// Initial state, before any data is loaded.
@@ -27,7 +28,7 @@ final class EditSourceState extends Equatable {
2728
this.description = '',
2829
this.url = '',
2930
this.sourceType,
30-
this.language = '',
31+
this.language,
3132
this.headquarters,
3233
this.contentStatus = ContentStatus.active,
3334
this.exception,
@@ -40,7 +41,7 @@ final class EditSourceState extends Equatable {
4041
final String description;
4142
final String url;
4243
final SourceType? sourceType;
43-
final String language;
44+
final language_picker.Language? language;
4445
final Country? headquarters;
4546
final ContentStatus contentStatus;
4647
final HttpException? exception;
@@ -52,7 +53,7 @@ final class EditSourceState extends Equatable {
5253
description.isNotEmpty &&
5354
url.isNotEmpty &&
5455
sourceType != null &&
55-
language.isNotEmpty &&
56+
language != null &&
5657
headquarters != null;
5758

5859
EditSourceState copyWith({
@@ -62,7 +63,7 @@ final class EditSourceState extends Equatable {
6263
String? description,
6364
String? url,
6465
ValueGetter<SourceType?>? sourceType,
65-
String? language,
66+
ValueGetter<language_picker.Language?>? language,
6667
ValueGetter<Country?>? headquarters,
6768
ContentStatus? contentStatus,
6869
HttpException? exception,
@@ -75,7 +76,7 @@ final class EditSourceState extends Equatable {
7576
description: description ?? this.description,
7677
url: url ?? this.url,
7778
sourceType: sourceType != null ? sourceType() : this.sourceType,
78-
language: language ?? this.language,
79+
language: language != null ? language() : this.language,
7980
headquarters: headquarters != null ? headquarters() : this.headquarters,
8081
contentStatus: contentStatus ?? this.contentStatus,
8182
exception: exception,

lib/content_management/view/create_source_page.dart

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import 'package:flutter_news_app_web_dashboard_full_source_code/content_manageme
77
import 'package:flutter_news_app_web_dashboard_full_source_code/content_management/bloc/create_source/create_source_bloc.dart';
88
import 'package:flutter_news_app_web_dashboard_full_source_code/content_management/bloc/edit_source/edit_source_bloc.dart';
99
import 'package:flutter_news_app_web_dashboard_full_source_code/l10n/l10n.dart';
10-
import 'package:flutter_news_app_web_dashboard_full_source_code/l10n/l10n.dart';
1110
import 'package:flutter_news_app_web_dashboard_full_source_code/shared/shared.dart';
1211
import 'package:go_router/go_router.dart';
1312
import 'package:ui_kit/ui_kit.dart';
@@ -161,13 +160,15 @@ class _CreateSourceViewState extends State<_CreateSourceView> {
161160
.add(CreateSourceUrlChanged(value)),
162161
),
163162
const SizedBox(height: AppSpacing.lg),
164-
LanguagePickerFormField(
165-
labelText: l10n.language,
163+
TextFormField(
166164
initialValue: state.language,
167-
onChanged: (language) =>
168-
context.read<CreateSourceBloc>().add(
169-
CreateSourceLanguageChanged(language),
170-
),
165+
decoration: InputDecoration(
166+
labelText: l10n.language,
167+
border: const OutlineInputBorder(),
168+
),
169+
onChanged: (value) => context
170+
.read<CreateSourceBloc>()
171+
.add(CreateSourceLanguageChanged(value)),
171172
),
172173
const SizedBox(height: AppSpacing.lg),
173174
DropdownButtonFormField<SourceType?>(

lib/shared/widgets/language_picker_form_field.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,13 @@ class LanguagePickerFormField extends FormField<language_picker.Language> {
1414
/// standard [FormField] properties.
1515
///
1616
/// The [labelText] is displayed as the input field's label.
17-
/// The [onChanged] callback is invoked when a new language is selected.
1817
LanguagePickerFormField({
1918
super.key,
2019
super.onSaved,
2120
super.validator,
2221
super.initialValue,
2322
super.autovalidateMode,
2423
String? labelText,
25-
void Function(language_picker.Language)? onChanged,
2624
}) : super(
2725
builder: (FormFieldState<language_picker.Language> state) {
2826
// This controller is just for displaying the text. The actual
@@ -48,9 +46,6 @@ class LanguagePickerFormField extends FormField<language_picker.Language> {
4846
state.value ?? language_picker.Languages.english,
4947
onValuePicked: (language_picker.Language language) {
5048
state.didChange(language);
51-
if (onChanged != null) {
52-
onChanged(language);
53-
}
5449
// Update the text in the read-only text field.
5550
controller.text = language.name;
5651
},

0 commit comments

Comments
 (0)