Add a gender value to the user settings

This commit is contained in:
Kelrap 2025-12-05 11:21:07 -05:00
parent abd96ffccf
commit d1a2080304
4 changed files with 71 additions and 1 deletions

View file

@ -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"
}

View file

@ -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";

View file

@ -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;
}
}
}

View file

@ -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,
]);