From d1a208030458b729a74103a59c609cc2bb775458 Mon Sep 17 00:00:00 2001 From: Kelrap Date: Fri, 5 Dec 2025 11:21:07 -0500 Subject: [PATCH] Add a gender value to the user settings --- lib/l10n/intl_en.arb | 7 ++- lib/pangea/common/constants/model_keys.dart | 1 + lib/pangea/learning_settings/gender_enum.dart | 52 +++++++++++++++++++ lib/pangea/user/user_model.dart | 12 +++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 lib/pangea/learning_settings/gender_enum.dart diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 0f3be7536..bdf2c092a 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -4991,5 +4991,10 @@ }, "pickDifferentActivity": "Pick a different activity", "messageLanguageMismatchMessage": "Your target language doesn't match this message. Update your target language?", - "blockLemmaConfirmation": "This vocab word will be permanently removed from your analytics" + "blockLemmaConfirmation": "This vocab word will be permanently removed from your analytics", + "woman": "Woman", + "man": "Man", + "otherGender": "Other", + "unselectedGender": "Select a gender option", + "gender": "Gender" } diff --git a/lib/pangea/common/constants/model_keys.dart b/lib/pangea/common/constants/model_keys.dart index bc6920ab7..caf0d06b3 100644 --- a/lib/pangea/common/constants/model_keys.dart +++ b/lib/pangea/common/constants/model_keys.dart @@ -47,6 +47,7 @@ class ModelKey { static const String userL1 = "user_l1"; static const String userL2 = "user_l2"; + static const String userGender = "user_gender"; static const String fullText = "full_text"; static const String fullTextLang = "full_text_lang"; static const String tokens = "tokens"; diff --git a/lib/pangea/learning_settings/gender_enum.dart b/lib/pangea/learning_settings/gender_enum.dart new file mode 100644 index 000000000..47f7bc82c --- /dev/null +++ b/lib/pangea/learning_settings/gender_enum.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; + +enum GenderEnum { + unselected, + woman, + man, + other, +} + +extension GenderEnumExtension on GenderEnum { + String get string { + switch (this) { + case GenderEnum.unselected: + return 'unselected'; + case GenderEnum.woman: + return 'woman'; + case GenderEnum.man: + return 'man'; + case GenderEnum.other: + return 'other'; + } + } + + static GenderEnum fromString(String? value) { + switch (value) { + case 'woman': + return GenderEnum.woman; + case 'man': + return GenderEnum.man; + case 'other': + return GenderEnum.other; + default: + return GenderEnum.unselected; + } + } + + String title(BuildContext context) { + final L10n l10n = L10n.of(context); + switch (this) { + case GenderEnum.unselected: + return l10n.unselectedGender; + case GenderEnum.woman: + return l10n.woman; + case GenderEnum.man: + return l10n.man; + case GenderEnum.other: + return l10n.otherGender; + } + } +} diff --git a/lib/pangea/user/user_model.dart b/lib/pangea/user/user_model.dart index fae12f67b..c0bd89c63 100644 --- a/lib/pangea/user/user_model.dart +++ b/lib/pangea/user/user_model.dart @@ -3,6 +3,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/instructions/instruction_settings.dart'; +import 'package:fluffychat/pangea/learning_settings/gender_enum.dart'; import 'package:fluffychat/pangea/learning_settings/language_level_type_enum.dart'; import 'package:fluffychat/pangea/learning_settings/tool_settings_enum.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -15,6 +16,7 @@ class UserSettings { bool? publicProfile; String? targetLanguage; String? sourceLanguage; + GenderEnum gender; String? country; LanguageLevelTypeEnum cefrLevel; @@ -24,6 +26,7 @@ class UserSettings { this.publicProfile, this.targetLanguage, this.sourceLanguage, + this.gender = GenderEnum.unselected, this.country, this.cefrLevel = LanguageLevelTypeEnum.a1, }); @@ -38,6 +41,11 @@ class UserSettings { publicProfile: json[ModelKey.publicProfile], targetLanguage: json[ModelKey.l2LanguageKey], sourceLanguage: json[ModelKey.l1LanguageKey], + gender: json[ModelKey.userGender] is String + ? GenderEnumExtension.fromString( + json[ModelKey.userGender], + ) + : GenderEnum.unselected, country: json[ModelKey.userCountry], cefrLevel: json[ModelKey.cefrLevel] is String ? LanguageLevelTypeEnum.fromString( @@ -53,6 +61,7 @@ class UserSettings { data[ModelKey.publicProfile] = publicProfile; data[ModelKey.l2LanguageKey] = targetLanguage; data[ModelKey.l1LanguageKey] = sourceLanguage; + data[ModelKey.userGender] = gender.string; data[ModelKey.userCountry] = country; data[ModelKey.cefrLevel] = cefrLevel.string; return data; @@ -111,6 +120,7 @@ class UserSettings { publicProfile: publicProfile, targetLanguage: targetLanguage, sourceLanguage: sourceLanguage, + gender: gender, country: country, cefrLevel: cefrLevel, ); @@ -126,6 +136,7 @@ class UserSettings { (other.publicProfile ?? false) == (publicProfile ?? false) && other.targetLanguage == targetLanguage && other.sourceLanguage == sourceLanguage && + other.gender == gender && other.country == country && other.cefrLevel == cefrLevel; } @@ -137,6 +148,7 @@ class UserSettings { (publicProfile ?? false).hashCode, targetLanguage.hashCode, sourceLanguage.hashCode, + gender.hashCode, country.hashCode, cefrLevel.hashCode, ]);