chore: add CEFR level to activities

This commit is contained in:
ggurdin 2025-06-11 16:52:02 -04:00
parent 261dfafc6a
commit 47e03d5a02
No known key found for this signature in database
GPG key ID: A01CB41737CBB478
5 changed files with 67 additions and 1 deletions

View file

@ -10,6 +10,7 @@ import 'package:fluffychat/pangea/activity_planner/activity_plan_card.dart';
import 'package:fluffychat/pangea/activity_planner/activity_planner_builder.dart';
import 'package:fluffychat/pangea/activity_planner/suggestion_form_field.dart';
import 'package:fluffychat/pangea/activity_suggestions/activity_suggestions_constants.dart';
import 'package:fluffychat/pangea/chat_settings/widgets/language_level_dropdown.dart';
import 'package:fluffychat/pangea/instructions/instructions_enum.dart';
import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart';
import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart';
@ -195,6 +196,11 @@ class ActivityGeneratorView extends StatelessWidget {
},
),
const SizedBox(height: 16.0),
LanguageLevelDropdown(
onChanged: controller.setSelectedCefrLevel,
initialLevel: controller.selectedCefrLevel,
),
const SizedBox(height: 16.0),
Row(
children: [
Expanded(

View file

@ -13,8 +13,10 @@ import 'package:fluffychat/pangea/activity_planner/activity_plan_model.dart';
import 'package:fluffychat/pangea/activity_planner/activity_planner_builder.dart';
import 'package:fluffychat/pangea/activity_planner/bookmarked_activities_repo.dart';
import 'package:fluffychat/pangea/activity_suggestions/activity_room_selection.dart';
import 'package:fluffychat/pangea/chat_settings/widgets/language_level_dropdown.dart';
import 'package:fluffychat/pangea/common/utils/error_handler.dart';
import 'package:fluffychat/pangea/common/widgets/full_width_dialog.dart';
import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
class ActivityPlanCard extends StatefulWidget {
@ -264,6 +266,32 @@ class ActivityPlanCardState extends State<ActivityPlanCard> {
],
),
const SizedBox(height: itemPadding),
Row(
children: [
Icon(
Icons.school_outlined,
color: Theme.of(context).colorScheme.secondary,
),
const SizedBox(width: itemPadding),
Expanded(
child: widget.controller.isEditing
? LanguageLevelDropdown(
initialLevel:
widget.controller.languageLevel,
onChanged:
widget.controller.setLanguageLevel,
)
: Text(
widget.controller.updatedActivity.req
.cefrLevel
.title(context),
style:
Theme.of(context).textTheme.bodyMedium,
),
),
],
),
const SizedBox(height: itemPadding),
if (widget.controller.vocab.isNotEmpty) ...[
Row(
children: [

View file

@ -7,7 +7,7 @@ class ActivityPlanRequest {
final String mode;
final String objective;
final MediaEnum media;
final LanguageLevelTypeEnum cefrLevel;
LanguageLevelTypeEnum cefrLevel;
final String languageOfInstructions;
final String targetLanguage;
final int count;

View file

@ -9,6 +9,7 @@ import 'package:matrix/matrix.dart';
import 'package:fluffychat/pangea/activity_planner/activity_plan_model.dart';
import 'package:fluffychat/pangea/common/utils/error_handler.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/utils/client_download_content_extension.dart';
import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/widgets/matrix.dart';
@ -52,6 +53,7 @@ class ActivityPlannerBuilderState extends State<ActivityPlannerBuilder> {
TextEditingController();
final List<Vocab> vocab = [];
late LanguageLevelTypeEnum languageLevel;
final GlobalKey<FormState> formKey = GlobalKey<FormState>();
@ -79,6 +81,7 @@ class ActivityPlannerBuilderState extends State<ActivityPlannerBuilder> {
final updatedReq = widget.initialActivity.req;
updatedReq.numberOfParticipants = participants;
updatedReq.cefrLevel = languageLevel;
return ActivityPlanModel(
req: updatedReq,
@ -105,6 +108,8 @@ class ActivityPlannerBuilderState extends State<ActivityPlannerBuilder> {
vocab.clear();
vocab.addAll(widget.initialActivity.vocab);
languageLevel = widget.initialActivity.req.cefrLevel;
imageURL = widget.initialActivity.imageURL;
filename = widget.initialFilename;
await _setAvatarByURL();
@ -133,6 +138,11 @@ class ActivityPlannerBuilderState extends State<ActivityPlannerBuilder> {
if (mounted) setState(() {});
}
void setLanguageLevel(LanguageLevelTypeEnum level) {
languageLevel = level;
if (mounted) setState(() {});
}
void selectAvatar() async {
final photo = await selectFiles(
context,

View file

@ -10,7 +10,9 @@ import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pangea/activity_planner/activity_planner_builder.dart';
import 'package:fluffychat/pangea/activity_suggestions/activity_room_selection.dart';
import 'package:fluffychat/pangea/activity_suggestions/activity_suggestion_card_row.dart';
import 'package:fluffychat/pangea/chat_settings/widgets/language_level_dropdown.dart';
import 'package:fluffychat/pangea/common/widgets/full_width_dialog.dart';
import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/mxc_image.dart';
@ -294,6 +296,26 @@ class ActivitySuggestionDialogState extends State<ActivitySuggestionDialog> {
style: theme.textTheme.bodyLarge,
),
),
if (widget.controller.isEditing)
ActivitySuggestionCardRow(
icon: Icons.school_outlined,
child: LanguageLevelDropdown(
initialLevel:
widget.controller.languageLevel,
onChanged: widget
.controller.setLanguageLevel,
),
)
else
ActivitySuggestionCardRow(
icon: Icons.school_outlined,
child: Text(
widget.controller.updatedActivity.req
.cefrLevel
.title(context),
style: theme.textTheme.bodyLarge,
),
),
if (widget.controller.isEditing)
ActivitySuggestionCardRow(
icon: Symbols.dictionary,