Skip to content

Commit 4c642bf

Browse files
committed
feat(settings): Add feed display preferences
- Added FeedDisplayPreferences model - Updated UserAppSettings model
1 parent 580253a commit 4c642bf

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

lib/src/models/user_settings/user_app_settings.dart

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import 'package:equatable/equatable.dart';
22
import 'package:ht_shared/src/models/user_settings/app_language.dart';
33
import 'package:ht_shared/src/models/user_settings/display_settings.dart';
4+
import 'package:ht_shared/src/models/user_settings/feed_display_preferences.dart';
45
import 'package:json_annotation/json_annotation.dart';
56

67
part 'user_app_settings.g.dart';
78

89
/// {@template user_app_settings}
910
/// Represents a collection of user-specific application settings,
10-
/// including display preferences and language selection.
11+
/// including display preferences, language selection, and feed display options.
1112
///
1213
/// This model unifies settings that are tied to a specific user,
1314
/// making it suitable for management via a generic data client.
@@ -24,8 +25,10 @@ class UserAppSettings extends Equatable {
2425
required this.id,
2526
DisplaySettings? displaySettings,
2627
AppLanguage? language,
28+
FeedDisplayPreferences? feedPreferences,
2729
}) : displaySettings = displaySettings ?? const DisplaySettings(),
28-
language = language ?? 'en'; // Default language is English
30+
language = language ?? 'en', // Default language is English
31+
feedPreferences = feedPreferences ?? const FeedDisplayPreferences();
2932

3033
/// Factory method to create a [UserAppSettings] instance from a JSON map.
3134
factory UserAppSettings.fromJson(Map<String, dynamic> json) =>
@@ -40,23 +43,28 @@ class UserAppSettings extends Equatable {
4043
/// The selected application language code (ISO 639-1).
4144
final AppLanguage language;
4245

46+
/// User-configurable settings for how content feeds are displayed.
47+
final FeedDisplayPreferences feedPreferences;
48+
4349
/// Converts this [UserAppSettings] instance to a JSON map.
4450
Map<String, dynamic> toJson() => _$UserAppSettingsToJson(this);
4551

4652
@override
47-
List<Object?> get props => [id, displaySettings, language];
53+
List<Object?> get props => [id, displaySettings, language, feedPreferences];
4854

4955
/// Creates a copy of this [UserAppSettings] but with the given fields
5056
/// replaced with the new values.
5157
UserAppSettings copyWith({
5258
String? id,
5359
DisplaySettings? displaySettings,
5460
AppLanguage? language,
61+
FeedDisplayPreferences? feedPreferences,
5562
}) {
5663
return UserAppSettings(
5764
id: id ?? this.id,
5865
displaySettings: displaySettings ?? this.displaySettings,
5966
language: language ?? this.language,
67+
feedPreferences: feedPreferences ?? this.feedPreferences,
6068
);
6169
}
6270
}

lib/src/models/user_settings/user_app_settings.g.dart

Lines changed: 6 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/src/models/user_settings/user_app_settings_test.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,19 @@ void main() {
5858
accentTheme: AppAccentTheme.newsRed,
5959
);
6060
const customLanguage = 'es';
61+
const defaultFeedPreferences = FeedDisplayPreferences();
6162
expect(
6263
createSubject(
6364
id: userId,
6465
displaySettings: customDisplaySettings,
6566
language: customLanguage,
6667
).props,
67-
equals([userId, customDisplaySettings, customLanguage]),
68+
equals([
69+
userId,
70+
customDisplaySettings,
71+
customLanguage,
72+
defaultFeedPreferences,
73+
]),
6874
);
6975
});
7076

0 commit comments

Comments
 (0)