From 2754bff62e8d3ed70415ffa0f42b0e0455c4f67a Mon Sep 17 00:00:00 2001 From: sienna-sterling <112006749+sienna-sterling@users.noreply.github.com> Date: Mon, 27 Jan 2025 16:47:14 -0500 Subject: [PATCH] =?UTF-8?q?refactor(language=20levels):=20Removed=20Langua?= =?UTF-8?q?ge=20Levels=20class=20converted=20it=E2=80=A6=20(#1580)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor(language levels): Removed Language Levels class converted it to it's own enum file * refactor(lanugage levels): cleaned up code by removing unused varible and setting initial values to class instances * refactor(language level): Fixed some loose ends to explicitly take a LanguageLevelTypeEnum * refactor(language level): implemented changes after testing. --------- Co-authored-by: ggurdin --- .../activity_plan_request.dart | 42 +++------ .../activity_planner_page.dart | 7 +- .../models/bot_options_model.dart | 17 ++-- .../utils/language_level_copy.dart | 23 ++--- .../conversation_bot_settings.dart | 5 +- .../conversation_bot_settings_form.dart | 9 +- .../widgets/language_level_dropdown.dart | 19 ++-- lib/pangea/common/network/requests.dart | 5 +- .../constants/language_constants.dart | 4 - .../enums/language_level_type_enum.dart | 86 +++++++++++++++++++ .../pages/settings_learning.dart | 7 +- lib/pangea/login/pages/user_settings.dart | 7 +- .../login/pages/user_settings_view.dart | 2 +- lib/pangea/spaces/models/space_model.dart | 4 - lib/pangea/user/models/user_model.dart | 13 ++- 15 files changed, 165 insertions(+), 85 deletions(-) create mode 100644 lib/pangea/learning_settings/enums/language_level_type_enum.dart diff --git a/lib/pangea/activity_planner/activity_plan_request.dart b/lib/pangea/activity_planner/activity_plan_request.dart index 36fa91fc7..9d095bdda 100644 --- a/lib/pangea/activity_planner/activity_plan_request.dart +++ b/lib/pangea/activity_planner/activity_plan_request.dart @@ -1,11 +1,12 @@ import 'package:fluffychat/pangea/activity_planner/media_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; class ActivityPlanRequest { final String topic; final String mode; final String objective; final MediaEnum media; - final int cefrLevel; + final LanguageLevelTypeEnum cefrLevel; final String languageOfInstructions; final String targetLanguage; final int count; @@ -29,7 +30,7 @@ class ActivityPlanRequest { 'mode': mode, 'objective': objective, 'media': media.string, - 'cefr_level': cefrLanguageLevel, + 'cefr_level': cefrLevel, 'language_of_instructions': languageOfInstructions, 'target_language': targetLanguage, 'count': count, @@ -38,28 +39,28 @@ class ActivityPlanRequest { } factory ActivityPlanRequest.fromJson(Map json) { - int cefrLevel = 0; + LanguageLevelTypeEnum cefrLevel = LanguageLevelTypeEnum.a1; switch (json['cefr_level']) { case 'Pre-A1': - cefrLevel = 0; + cefrLevel = LanguageLevelTypeEnum.preA1; break; case 'A1': - cefrLevel = 1; + cefrLevel = LanguageLevelTypeEnum.a1; break; case 'A2': - cefrLevel = 2; + cefrLevel = LanguageLevelTypeEnum.a2; break; case 'B1': - cefrLevel = 3; + cefrLevel = LanguageLevelTypeEnum.b1; break; case 'B2': - cefrLevel = 4; + cefrLevel = LanguageLevelTypeEnum.b2; break; case 'C1': - cefrLevel = 5; + cefrLevel = LanguageLevelTypeEnum.c1; break; case 'C2': - cefrLevel = 6; + cefrLevel = LanguageLevelTypeEnum.c2; break; } return ActivityPlanRequest( @@ -77,25 +78,4 @@ class ActivityPlanRequest { String get storageKey => '$topic-$mode-$objective-${media.string}-$cefrLevel-$languageOfInstructions-$targetLanguage-$numberOfParticipants'; - - String get cefrLanguageLevel { - switch (cefrLevel) { - case 0: - return 'Pre-A1'; - case 1: - return 'A1'; - case 2: - return 'A2'; - case 3: - return 'B1'; - case 4: - return 'B2'; - case 5: - return 'C1'; - case 6: - return 'C2'; - default: - return 'Pre-A1'; - } - } } diff --git a/lib/pangea/activity_planner/activity_planner_page.dart b/lib/pangea/activity_planner/activity_planner_page.dart index 5003df285..4b8ca0988 100644 --- a/lib/pangea/activity_planner/activity_planner_page.dart +++ b/lib/pangea/activity_planner/activity_planner_page.dart @@ -18,6 +18,7 @@ import 'package:fluffychat/pangea/chat_settings/widgets/language_level_dropdown. import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; import 'package:fluffychat/pangea/learning_settings/widgets/p_language_dropdown.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -48,7 +49,7 @@ class ActivityPlannerPageState extends State { MediaEnum _selectedMedia = MediaEnum.nan; String? _selectedLanguageOfInstructions; String? _selectedTargetLanguage; - int? _selectedCefrLevel; + LanguageLevelTypeEnum? _selectedCefrLevel; int? _selectedNumberOfParticipants; List activities = []; @@ -67,7 +68,7 @@ class ActivityPlannerPageState extends State { MatrixState.pangeaController.languageController.userL1?.langCode; _selectedTargetLanguage = MatrixState.pangeaController.languageController.userL2?.langCode; - _selectedCefrLevel = 0; + _selectedCefrLevel = LanguageLevelTypeEnum.a1; _selectedNumberOfParticipants = max(room?.getParticipants().length ?? 1, 1); } @@ -278,7 +279,7 @@ class ActivityPlannerPageState extends State { ), const SizedBox(height: 24), LanguageLevelDropdown( - initialLevel: 0, + initialLevel: _selectedCefrLevel, onChanged: (val) => _selectedCefrLevel = val, ), const SizedBox(height: 24), diff --git a/lib/pangea/chat_settings/models/bot_options_model.dart b/lib/pangea/chat_settings/models/bot_options_model.dart index 340dfc985..b5f490957 100644 --- a/lib/pangea/chat_settings/models/bot_options_model.dart +++ b/lib/pangea/chat_settings/models/bot_options_model.dart @@ -8,9 +8,10 @@ import 'package:fluffychat/pangea/chat_settings/constants/bot_mode.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; class BotOptionsModel { - int? languageLevel; + LanguageLevelTypeEnum languageLevel; String topic; List keywords; bool safetyModeration; @@ -30,7 +31,7 @@ class BotOptionsModel { //////////////////////////////////////////////////////////////////////////// // General Bot Options //////////////////////////////////////////////////////////////////////////// - this.languageLevel, + this.languageLevel = LanguageLevelTypeEnum.a1, this.topic = "General Conversation", this.keywords = const [], this.safetyModeration = true, @@ -65,10 +66,12 @@ class BotOptionsModel { // General Bot Options ////////////////////////////////////////////////////////////////////////// languageLevel: json[ModelKey.languageLevel] is int - ? json[ModelKey.languageLevel] - : json[ModelKey] == "PREA1" - ? 0 - : null, + ? LanguageLevelTypeEnumExtension.fromInt(json[ModelKey.languageLevel]) + : json[ModelKey.languageLevel] is String + ? LanguageLevelTypeEnumExtension.fromString( + json[ModelKey.languageLevel], + ) + : LanguageLevelTypeEnum.a1, safetyModeration: json[ModelKey.safetyModeration] ?? true, mode: json[ModelKey.mode] ?? BotMode.discussion, targetLanguage: json[ModelKey.targetLanguage], @@ -104,7 +107,7 @@ class BotOptionsModel { final data = {}; try { // data[ModelKey.isConversationBotChat] = isConversationBotChat; - data[ModelKey.languageLevel] = languageLevel; + data[ModelKey.languageLevel] = languageLevel.storageInt; data[ModelKey.safetyModeration] = safetyModeration; data[ModelKey.mode] = mode; data[ModelKey.targetLanguage] = targetLanguage; diff --git a/lib/pangea/chat_settings/utils/language_level_copy.dart b/lib/pangea/chat_settings/utils/language_level_copy.dart index 2d91517c8..6239474fa 100644 --- a/lib/pangea/chat_settings/utils/language_level_copy.dart +++ b/lib/pangea/chat_settings/utils/language_level_copy.dart @@ -2,26 +2,29 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; + class LanguageLevelTextPicker { - static String languageLevelText(BuildContext context, int languageLevel) { + static String languageLevelText( + BuildContext context, + LanguageLevelTypeEnum languageLevel, + ) { final L10n copy = L10n.of(context); switch (languageLevel) { - case 0: + case LanguageLevelTypeEnum.preA1: return copy.languageLevelPreA1; - case 1: + case LanguageLevelTypeEnum.a1: return copy.languageLevelA1; - case 2: + case LanguageLevelTypeEnum.a2: return copy.languageLevelA2; - case 3: + case LanguageLevelTypeEnum.b1: return copy.languageLevelB1; - case 4: + case LanguageLevelTypeEnum.b2: return copy.languageLevelB2; - case 5: + case LanguageLevelTypeEnum.c1: return copy.languageLevelC1; - case 6: + case LanguageLevelTypeEnum.c2: return copy.languageLevelC2; - default: - return "undefined level"; } } } diff --git a/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings.dart b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings.dart index 1cfe32abd..d13df377f 100644 --- a/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings.dart +++ b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings.dart @@ -17,6 +17,7 @@ import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/common/widgets/full_width_dialog.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; import 'package:fluffychat/widgets/matrix.dart'; class ConversationBotSettings extends StatefulWidget { @@ -168,8 +169,8 @@ class ConversationBotSettingsDialogState setState(() => botOptions.targetVoice = voice); } - void onUpdateBotLanguageLevel(int? level) { - setState(() => botOptions.languageLevel = level); + void onUpdateBotLanguageLevel(LanguageLevelTypeEnum? level) { + setState(() => botOptions.languageLevel = level!); } @override diff --git a/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings_form.dart b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings_form.dart index d709dba07..441504b67 100644 --- a/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings_form.dart +++ b/lib/pangea/chat_settings/widgets/conversation_bot/conversation_bot_settings_form.dart @@ -8,6 +8,7 @@ import 'package:fluffychat/pangea/chat_settings/widgets/conversation_bot/convers import 'package:fluffychat/pangea/chat_settings/widgets/conversation_bot/conversation_bot_mode_select.dart'; import 'package:fluffychat/pangea/chat_settings/widgets/conversation_bot/conversation_bot_no_permission_dialog.dart'; import 'package:fluffychat/pangea/chat_settings/widgets/language_level_dropdown.dart'; +import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; import 'package:fluffychat/widgets/matrix.dart'; class ConversationBotSettingsForm extends StatelessWidget { @@ -24,7 +25,7 @@ class ConversationBotSettingsForm extends StatelessWidget { final void Function(String?) onUpdateBotMode; final void Function(String?) onUpdateBotLanguage; final void Function(String?) onUpdateBotVoice; - final void Function(int?) onUpdateBotLanguageLevel; + final void Function(LanguageLevelTypeEnum?) onUpdateBotLanguageLevel; const ConversationBotSettingsForm({ super.key, @@ -92,8 +93,10 @@ class ConversationBotSettingsForm extends StatelessWidget { onTap: hasPermission ? null : () => showNoPermissionDialog(context), child: LanguageLevelDropdown( initialLevel: botOptions.languageLevel, - onChanged: - hasPermission && enabled ? onUpdateBotLanguageLevel : null, + onChanged: hasPermission && enabled + ? (value) => + onUpdateBotLanguageLevel(value as LanguageLevelTypeEnum?) + : null, validator: (value) => enabled && value == null ? L10n.of(context).enterLanguageLevel : null, diff --git a/lib/pangea/chat_settings/widgets/language_level_dropdown.dart b/lib/pangea/chat_settings/widgets/language_level_dropdown.dart index 3b30303ea..d6fe094f7 100644 --- a/lib/pangea/chat_settings/widgets/language_level_dropdown.dart +++ b/lib/pangea/chat_settings/widgets/language_level_dropdown.dart @@ -4,17 +4,17 @@ import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:fluffychat/pangea/chat_settings/utils/language_level_copy.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; class LanguageLevelDropdown extends StatelessWidget { - final int? initialLevel; - final void Function(int?)? onChanged; - final String? Function(int?)? validator; + final LanguageLevelTypeEnum? initialLevel; + final Function(LanguageLevelTypeEnum)? onChanged; + final FormFieldValidator? validator; final bool enabled; const LanguageLevelDropdown({ super.key, - this.initialLevel, + this.initialLevel = LanguageLevelTypeEnum.a1, this.onChanged, this.validator, this.enabled = true, @@ -22,7 +22,7 @@ class LanguageLevelDropdown extends StatelessWidget { @override Widget build(BuildContext context) { - return DropdownButtonFormField2( + return DropdownButtonFormField2( decoration: InputDecoration(labelText: L10n.of(context).cefrLevelLabel), hint: Text( L10n.of(context).selectLanguageLevel, @@ -30,7 +30,8 @@ class LanguageLevelDropdown extends StatelessWidget { textAlign: TextAlign.center, ), value: initialLevel, - items: LanguageLevelType.allInts.map((int levelOption) { + items: + LanguageLevelTypeEnum.values.map((LanguageLevelTypeEnum levelOption) { return DropdownMenuItem( value: levelOption, child: Text( @@ -43,7 +44,9 @@ class LanguageLevelDropdown extends StatelessWidget { ), ); }).toList(), - onChanged: enabled ? onChanged : null, + onChanged: enabled + ? (value) => onChanged?.call(value as LanguageLevelTypeEnum) + : null, validator: validator, ); } diff --git a/lib/pangea/common/network/requests.dart b/lib/pangea/common/network/requests.dart index 06a5828f8..d4f5fb6f9 100644 --- a/lib/pangea/common/network/requests.dart +++ b/lib/pangea/common/network/requests.dart @@ -6,6 +6,7 @@ import 'package:http/http.dart' as http; import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; import 'package:fluffychat/widgets/matrix.dart'; class Requests { @@ -25,7 +26,7 @@ class Requests { required Map body, }) async { body[ModelKey.cefrLevel] = MatrixState - .pangeaController.userController.profile.userSettings.cefrLevel; + .pangeaController.userController.profile.userSettings.cefrLevel.string; dynamic encoded; encoded = jsonEncode(body); @@ -47,7 +48,7 @@ class Requests { required Map body, }) async { body[ModelKey.cefrLevel] = MatrixState - .pangeaController.userController.profile.userSettings.cefrLevel; + .pangeaController.userController.profile.userSettings.cefrLevel.string; dynamic encoded; encoded = jsonEncode(body); diff --git a/lib/pangea/learning_settings/constants/language_constants.dart b/lib/pangea/learning_settings/constants/language_constants.dart index ad8d18d00..552ce46d5 100644 --- a/lib/pangea/learning_settings/constants/language_constants.dart +++ b/lib/pangea/learning_settings/constants/language_constants.dart @@ -7,10 +7,6 @@ class LanguageKeys { static const multiLanguage = "multi"; } -class LanguageLevelType { - static List get allInts => [0, 1, 2, 3, 4, 5, 6]; -} - class PrefKey { static const lastFetched = 'p_lang_lastfetched'; static const flags = 'p_lang_flag'; diff --git a/lib/pangea/learning_settings/enums/language_level_type_enum.dart b/lib/pangea/learning_settings/enums/language_level_type_enum.dart new file mode 100644 index 000000000..505e05ada --- /dev/null +++ b/lib/pangea/learning_settings/enums/language_level_type_enum.dart @@ -0,0 +1,86 @@ +enum LanguageLevelTypeEnum { preA1, a1, a2, b1, b2, c1, c2 } + +extension LanguageLevelTypeEnumExtension on LanguageLevelTypeEnum { + // Makes enum a string + String get string { + switch (this) { + case LanguageLevelTypeEnum.preA1: + return 'Pre-A1'; + case LanguageLevelTypeEnum.a1: + return 'A1'; + case LanguageLevelTypeEnum.a2: + return 'A2'; + case LanguageLevelTypeEnum.b1: + return 'B1'; + case LanguageLevelTypeEnum.b2: + return 'B2'; + case LanguageLevelTypeEnum.c1: + return 'C1'; + case LanguageLevelTypeEnum.c2: + return 'C2'; + } + } + + // Makes enum an int + int get storageInt { + switch (this) { + case LanguageLevelTypeEnum.preA1: + return 0; + case LanguageLevelTypeEnum.a1: + return 1; + case LanguageLevelTypeEnum.a2: + return 2; + case LanguageLevelTypeEnum.b1: + return 3; + case LanguageLevelTypeEnum.b2: + return 4; + case LanguageLevelTypeEnum.c1: + return 5; + case LanguageLevelTypeEnum.c2: + return 6; + } + } + + static LanguageLevelTypeEnum fromInt(int? value) { + switch (value) { + case 0: + return LanguageLevelTypeEnum.preA1; + case 1: + return LanguageLevelTypeEnum.a1; + case 2: + return LanguageLevelTypeEnum.a2; + case 3: + return LanguageLevelTypeEnum.b1; + case 4: + return LanguageLevelTypeEnum.b2; + case 5: + return LanguageLevelTypeEnum.c1; + case 6: + return LanguageLevelTypeEnum.c2; + default: + return LanguageLevelTypeEnum.a1; + } + } + + static LanguageLevelTypeEnum fromString(String? value) { + switch (value) { + case 'PREA1': + case 'Pre-A1': + return LanguageLevelTypeEnum.preA1; + case 'A1': + return LanguageLevelTypeEnum.a1; + case 'A2': + return LanguageLevelTypeEnum.a2; + case 'B1': + return LanguageLevelTypeEnum.b1; + case 'B2': + return LanguageLevelTypeEnum.b2; + case 'C1': + return LanguageLevelTypeEnum.c1; + case 'C2': + return LanguageLevelTypeEnum.c2; + default: + return LanguageLevelTypeEnum.a1; + } + } +} diff --git a/lib/pangea/learning_settings/pages/settings_learning.dart b/lib/pangea/learning_settings/pages/settings_learning.dart index b2b8011f4..9deab5590 100644 --- a/lib/pangea/learning_settings/pages/settings_learning.dart +++ b/lib/pangea/learning_settings/pages/settings_learning.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:country_picker/country_picker.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; import 'package:fluffychat/pangea/learning_settings/pages/settings_learning_view.dart'; import 'package:fluffychat/pangea/learning_settings/widgets/p_language_dialog.dart'; import 'package:fluffychat/pangea/spaces/models/space_model.dart'; @@ -44,10 +45,10 @@ class SettingsLearningController extends State { setState(() {}); } - void setCefrLevel(int? cefrLevel) { + void setCefrLevel(LanguageLevelTypeEnum? cefrLevel) { pangeaController.userController.updateProfile( (profile) { - profile.userSettings.cefrLevel = cefrLevel; + profile.userSettings.cefrLevel = cefrLevel ?? LanguageLevelTypeEnum.a1; return profile; }, ); @@ -106,7 +107,7 @@ class SettingsLearningController extends State { bool get publicProfile => pangeaController.userController.profile.userSettings.publicProfile; - int? get cefrLevel => + LanguageLevelTypeEnum get cefrLevel => pangeaController.userController.profile.userSettings.cefrLevel; @override diff --git a/lib/pangea/login/pages/user_settings.dart b/lib/pangea/login/pages/user_settings.dart index 2b833f477..9963dc984 100644 --- a/lib/pangea/login/pages/user_settings.dart +++ b/lib/pangea/login/pages/user_settings.dart @@ -10,6 +10,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/pangea/common/constants/local.key.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; import 'package:fluffychat/pangea/learning_settings/utils/language_list_util.dart'; import 'package:fluffychat/pangea/login/pages/user_settings_view.dart'; @@ -28,7 +29,7 @@ class UserSettingsState extends State { PangeaController get _pangeaController => MatrixState.pangeaController; LanguageModel? selectedTargetLanguage; - int selectedCefrLevel = 0; + LanguageLevelTypeEnum selectedCefrLevel = LanguageLevelTypeEnum.a1; String? selectedLanguageError; String? profileCreationError; @@ -98,9 +99,9 @@ class UserSettingsState extends State { }); } - void setSelectedCefrLevel(int? cefrLevel) { + void setSelectedCefrLevel(LanguageLevelTypeEnum? cefrLevel) { setState(() { - selectedCefrLevel = cefrLevel ?? 0; + selectedCefrLevel = cefrLevel ?? LanguageLevelTypeEnum.a1; }); } diff --git a/lib/pangea/login/pages/user_settings_view.dart b/lib/pangea/login/pages/user_settings_view.dart index b8d88d0fc..46d58d1bc 100644 --- a/lib/pangea/login/pages/user_settings_view.dart +++ b/lib/pangea/login/pages/user_settings_view.dart @@ -102,7 +102,7 @@ class UserSettingsView extends StatelessWidget { padding: const EdgeInsets.all(8), child: LanguageLevelDropdown( onChanged: controller.setSelectedCefrLevel, - initialLevel: controller.selectedCefrLevel ?? 0, + initialLevel: controller.selectedCefrLevel, ), ), if (controller.isSSOSignup) diff --git a/lib/pangea/spaces/models/space_model.dart b/lib/pangea/spaces/models/space_model.dart index dbd5d1992..45f1d4565 100644 --- a/lib/pangea/spaces/models/space_model.dart +++ b/lib/pangea/spaces/models/space_model.dart @@ -16,14 +16,12 @@ class LanguageSettingsModel { String? city; String? country; String? schoolName; - int? languageLevel; String dominantLanguage; String targetLanguage; LanguageSettingsModel({ this.dominantLanguage = SpaceConstants.defaultDominantLanguage, this.targetLanguage = SpaceConstants.defaultTargetLanguage, - this.languageLevel, this.city, this.country, this.schoolName, @@ -39,7 +37,6 @@ class LanguageSettingsModel { targetLanguage: LanguageModel.codeFromNameOrCode( json['target_language'] ?? LanguageKeys.unknownLanguage, ), - languageLevel: json['language_level'], schoolName: json['school_name'], ); } @@ -53,7 +50,6 @@ class LanguageSettingsModel { data['dominant_language'] = dominantLanguage; //check for and do "english" => en and "spanish" => es data['target_language'] = targetLanguage; - data['language_level'] = languageLevel; data['school_name'] = schoolName; return data; } catch (e, s) { diff --git a/lib/pangea/user/models/user_model.dart b/lib/pangea/user/models/user_model.dart index 5a0172ec2..9aac617a4 100644 --- a/lib/pangea/user/models/user_model.dart +++ b/lib/pangea/user/models/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/enums/language_level_type_enum.dart'; import 'package:fluffychat/pangea/spaces/models/space_model.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../../learning_settings/models/language_model.dart'; @@ -19,7 +20,7 @@ class UserSettings { String? sourceLanguage; String? country; bool? hasJoinedHelpSpace; - int? cefrLevel; + LanguageLevelTypeEnum cefrLevel; UserSettings({ this.dateOfBirth, @@ -32,7 +33,7 @@ class UserSettings { this.sourceLanguage, this.country, this.hasJoinedHelpSpace, - this.cefrLevel, + this.cefrLevel = LanguageLevelTypeEnum.a1, }); factory UserSettings.fromJson(Map json) => UserSettings( @@ -50,7 +51,11 @@ class UserSettings { sourceLanguage: json[ModelKey.l1LanguageKey], country: json[ModelKey.userCountry], hasJoinedHelpSpace: json[ModelKey.hasJoinedHelpSpace], - cefrLevel: json[ModelKey.cefrLevel], + cefrLevel: json[ModelKey.cefrLevel] is String + ? LanguageLevelTypeEnumExtension.fromString( + json[ModelKey.cefrLevel], + ) + : LanguageLevelTypeEnum.a1, ); Map toJson() { @@ -65,7 +70,7 @@ class UserSettings { data[ModelKey.l1LanguageKey] = sourceLanguage; data[ModelKey.userCountry] = country; data[ModelKey.hasJoinedHelpSpace] = hasJoinedHelpSpace; - data[ModelKey.cefrLevel] = cefrLevel; + data[ModelKey.cefrLevel] = cefrLevel.string; return data; }