Skip to content

Commit 3a67f49

Browse files
committed
feat(content): adapt create source bloc for language picker
1 parent 84b229b commit 3a67f49

File tree

4 files changed

+17
-15
lines changed

4 files changed

+17
-15
lines changed

lib/content_management/bloc/create_source/create_source_bloc.dart

Lines changed: 3 additions & 2 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/shared/shared.dart';
@@ -72,7 +73,7 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
7273
CreateSourceLanguageChanged event,
7374
Emitter<CreateSourceState> emit,
7475
) {
75-
emit(state.copyWith(language: event.language));
76+
emit(state.copyWith(language: () => event.language));
7677
}
7778

7879
void _onHeadquartersChanged(
@@ -115,7 +116,7 @@ class CreateSourceBloc extends Bloc<CreateSourceEvent, CreateSourceState> {
115116
description: state.description,
116117
url: state.url,
117118
sourceType: state.sourceType!,
118-
language: state.language,
119+
language: adaptPackageLanguageToLanguageCode(state.language!),
119120
createdAt: now,
120121
updatedAt: now,
121122
headquarters: state.headquarters!,

lib/content_management/bloc/create_source/create_source_event.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ final class CreateSourceTypeChanged extends CreateSourceEvent {
4848
/// Event for when the source's language is changed.
4949
final class CreateSourceLanguageChanged extends CreateSourceEvent {
5050
const CreateSourceLanguageChanged(this.language);
51-
final String language;
51+
final language_picker.Language? language;
5252
@override
5353
List<Object?> get props => [language];
5454
}

lib/content_management/bloc/create_source/create_source_state.dart

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

3+
import 'package:language_picker/language_picker.dart' as language_picker;
34
/// Represents the status of the create source operation.
45
enum CreateSourceStatus {
56
/// Initial state, before any data is loaded.
@@ -27,7 +28,7 @@ final class CreateSourceState 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,
@@ -39,7 +40,7 @@ final class CreateSourceState extends Equatable {
3940
final String description;
4041
final String url;
4142
final SourceType? sourceType;
42-
final String language;
43+
final language_picker.Language? language;
4344
final Country? headquarters;
4445
final ContentStatus contentStatus;
4546
final HttpException? exception;
@@ -51,7 +52,7 @@ final class CreateSourceState extends Equatable {
5152
description.isNotEmpty &&
5253
url.isNotEmpty &&
5354
sourceType != null &&
54-
language.isNotEmpty &&
55+
language != null &&
5556
headquarters != null;
5657

5758
CreateSourceState copyWith({
@@ -60,7 +61,7 @@ final class CreateSourceState extends Equatable {
6061
String? description,
6162
String? url,
6263
ValueGetter<SourceType?>? sourceType,
63-
String? language,
64+
ValueGetter<language_picker.Language?>? language,
6465
ValueGetter<Country?>? headquarters,
6566
ContentStatus? contentStatus,
6667
HttpException? exception,
@@ -72,7 +73,7 @@ final class CreateSourceState extends Equatable {
7273
description: description ?? this.description,
7374
url: url ?? this.url,
7475
sourceType: sourceType != null ? sourceType() : this.sourceType,
75-
language: language ?? this.language,
76+
language: language != null ? language() : this.language,
7677
headquarters: headquarters != null ? headquarters() : this.headquarters,
7778
contentStatus: contentStatus ?? this.contentStatus,
7879
exception: exception,

lib/shared/widgets/language_picker_form_field.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import 'package:flutter/material.dart';
2-
import 'package:language_picker/language_picker.dart';
3-
import 'package:language_picker/languages.dart';
2+
import 'package:language_picker/language_picker.dart' as language_picker;
43

54
/// A form field for selecting a language using the `language_picker` package.
65
///
76
/// This widget wraps the language picker functionality in a standard
87
/// [FormField], making it easy to integrate into forms for validation
98
/// and state management. It presents as a read-only [TextFormField] that,
109
/// when tapped, opens a language selection dialog.
11-
class LanguagePickerFormField extends FormField<Language> {
10+
class LanguagePickerFormField extends FormField<language_picker.Language> {
1211
/// Creates a [LanguagePickerFormField].
1312
///
1413
/// The [onSaved], [validator], [initialValue], and [autovalidateMode] are
@@ -23,7 +22,7 @@ class LanguagePickerFormField extends FormField<Language> {
2322
super.autovalidateMode,
2423
String? labelText,
2524
}) : super(
26-
builder: (FormFieldState<Language> state) {
25+
builder: (FormFieldState<language_picker.Language> state) {
2726
// This controller is just for displaying the text. The actual
2827
// value is managed by the FormField's state.
2928
final controller = TextEditingController(
@@ -40,11 +39,12 @@ class LanguagePickerFormField extends FormField<Language> {
4039
suffixIcon: const Icon(Icons.arrow_drop_down),
4140
),
4241
onTap: () {
43-
showLanguagePicker(
42+
language_picker.showLanguagePicker(
4443
context: state.context,
4544
// Provide a default if no language is selected yet.
46-
selectedLanguage: state.value ?? Languages.english,
47-
onValuePicked: (Language language) {
45+
selectedLanguage:
46+
state.value ?? language_picker.Languages.english,
47+
onValuePicked: (language_picker.Language language) {
4848
state.didChange(language);
4949
// Update the text in the read-only text field.
5050
controller.text = language.name;

0 commit comments

Comments
 (0)