From 3ed92b3411d5efc9cea48f21d79a10c0bc8dc9d6 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Wed, 29 Jan 2025 16:15:40 -0500 Subject: [PATCH] fix: update text controller value when text field value changes (#1637) --- lib/main.dart | 15 +++++----- lib/pages/chat/chat.dart | 25 +++++++++-------- .../activity_planner_page.dart | 28 ++++++------------- .../suggestion_form_field.dart | 11 ++------ .../morph_categories_and_labels.dart | 1 + lib/pangea/common/widgets/customized_svg.dart | 4 ++- 6 files changed, 37 insertions(+), 47 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index dc819eaf8..3e11711be 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,12 @@ +import 'package:flutter/material.dart'; + import 'package:collection/collection.dart'; +import 'package:flutter_dotenv/flutter_dotenv.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:get_storage/get_storage.dart'; +import 'package:matrix/matrix.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; @@ -7,13 +15,6 @@ import 'package:fluffychat/pangea/learning_settings/utils/language_list_util.dar import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/error_widget.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_dotenv/flutter_dotenv.dart'; -import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -import 'package:get_storage/get_storage.dart'; -import 'package:matrix/matrix.dart'; -import 'package:shared_preferences/shared_preferences.dart'; - import 'config/setting_keys.dart'; import 'utils/background_push.dart'; import 'widgets/fluffy_chat_app.dart'; diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 1d3898ba3..0bf8ede4d 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -5,10 +5,23 @@ import 'dart:core'; import 'dart:developer'; import 'dart:io'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:collection/collection.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:go_router/go_router.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:matrix/matrix.dart'; +import 'package:scroll_to_index/scroll_to_index.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:universal_html/html.dart' as html; + import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; @@ -43,18 +56,6 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:go_router/go_router.dart'; -import 'package:image_picker/image_picker.dart'; -import 'package:matrix/matrix.dart'; -import 'package:scroll_to_index/scroll_to_index.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:universal_html/html.dart' as html; - import '../../utils/account_bundles.dart'; import '../../utils/localized_exception_extension.dart'; import 'send_file_dialog.dart'; diff --git a/lib/pangea/activity_planner/activity_planner_page.dart b/lib/pangea/activity_planner/activity_planner_page.dart index d45bd5470..098cc31bc 100644 --- a/lib/pangea/activity_planner/activity_planner_page.dart +++ b/lib/pangea/activity_planner/activity_planner_page.dart @@ -42,10 +42,6 @@ class ActivityPlannerPageState extends State { /// Index of the content to display _PageMode _pageMode = _PageMode.settings; - /// Selected values from the form - String? _selectedTopic; - String? _selectedMode; - String? _selectedObjective; MediaEnum _selectedMedia = MediaEnum.nan; String? _selectedLanguageOfInstructions; String? _selectedTargetLanguage; @@ -120,14 +116,14 @@ class ActivityPlannerPageState extends State { } void _randomizeSelections() async { - _selectedTopic = await _randomTopic(); - _selectedObjective = await _randomObjective(); - _selectedMode = await _randomMode(); + final selectedTopic = await _randomTopic(); + final selectedObjective = await _randomObjective(); + final selectedMode = await _randomMode(); setState(() { - _topicController.text = _selectedTopic!; - _objectiveController.text = _selectedObjective!; - _modeController.text = _selectedMode!; + _topicController.text = selectedTopic; + _objectiveController.text = selectedObjective; + _modeController.text = selectedMode; }); } @@ -191,9 +187,9 @@ class ActivityPlannerPageState extends State { activityPlanRequest: _PageMode.savedActivities == _pageMode ? null : ActivityPlanRequest( - topic: _selectedTopic!, - mode: _selectedMode!, - objective: _selectedObjective!, + topic: _topicController.text, + mode: _modeController.text, + objective: _objectiveController.text, media: _selectedMedia, languageOfInstructions: _selectedLanguageOfInstructions!, targetLanguage: _selectedTargetLanguage!, @@ -223,8 +219,6 @@ class ActivityPlannerPageState extends State { validator: _validateNotNull, label: l10n.topicLabel, placeholder: l10n.topicPlaceholder, - onSelected: (val) => _selectedTopic = val, - initialValue: _selectedTopic, controller: _topicController, ), const SizedBox(height: 24), @@ -234,8 +228,6 @@ class ActivityPlannerPageState extends State { label: l10n.learningObjectiveLabel, placeholder: l10n.learningObjectivePlaceholder, - onSelected: (val) => _selectedObjective = val, - initialValue: _selectedObjective, controller: _objectiveController, ), const SizedBox(height: 24), @@ -244,8 +236,6 @@ class ActivityPlannerPageState extends State { validator: _validateNotNull, label: l10n.modeLabel, placeholder: l10n.modePlaceholder, - onSelected: (val) => _selectedMode = val, - initialValue: _selectedMode, controller: _modeController, ), ], diff --git a/lib/pangea/activity_planner/suggestion_form_field.dart b/lib/pangea/activity_planner/suggestion_form_field.dart index 96513d94f..23f5cacf2 100644 --- a/lib/pangea/activity_planner/suggestion_form_field.dart +++ b/lib/pangea/activity_planner/suggestion_form_field.dart @@ -7,8 +7,6 @@ class SuggestionFormField extends StatelessWidget { final String? Function(String?)? validator; final String label; final String placeholder; - final void Function(String) onSelected; - final String? initialValue; final TextEditingController controller; const SuggestionFormField({ @@ -17,16 +15,13 @@ class SuggestionFormField extends StatelessWidget { required this.placeholder, this.validator, required this.label, - required this.onSelected, - required this.initialValue, required this.controller, }); @override Widget build(BuildContext context) { return Autocomplete( - initialValue: - initialValue != null ? TextEditingValue(text: initialValue!) : null, + initialValue: TextEditingValue(text: controller.text), optionsBuilder: (TextEditingValue textEditingValue) async { return (await suggestions) .where((ActivitySettingResponseSchema option) { @@ -35,7 +30,7 @@ class SuggestionFormField extends StatelessWidget { .contains(textEditingValue.text.toLowerCase()); }).map((ActivitySettingResponseSchema e) => e.name); }, - onSelected: onSelected, + onSelected: (val) => controller.text = val, fieldViewBuilder: ( BuildContext context, TextEditingController textEditingController, @@ -44,7 +39,7 @@ class SuggestionFormField extends StatelessWidget { ) { textEditingController.value = controller.value; textEditingController.addListener(() { - onSelected(textEditingController.text); + controller.value = textEditingController.value; }); return TextFormField( controller: textEditingController, diff --git a/lib/pangea/analytics/constants/morph_categories_and_labels.dart b/lib/pangea/analytics/constants/morph_categories_and_labels.dart index 3aad878ce..3d896c17e 100644 --- a/lib/pangea/analytics/constants/morph_categories_and_labels.dart +++ b/lib/pangea/analytics/constants/morph_categories_and_labels.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; + import 'package:material_symbols_icons/symbols.dart'; const Map> morphCategoriesAndLabels = { diff --git a/lib/pangea/common/widgets/customized_svg.dart b/lib/pangea/common/widgets/customized_svg.dart index 68a88e5d9..11042392e 100644 --- a/lib/pangea/common/widgets/customized_svg.dart +++ b/lib/pangea/common/widgets/customized_svg.dart @@ -1,9 +1,11 @@ -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:flutter/material.dart'; + import 'package:flutter_svg/flutter_svg.dart'; import 'package:get_storage/get_storage.dart'; import 'package:http/http.dart' as http; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; + class CustomizedSvg extends StatelessWidget { /// URL of the SVG file final String svgUrl;