fix: update text controller value when text field value changes (#1637)

pull/1593/head
ggurdin 9 months ago committed by GitHub
parent 4f2475bc5e
commit 3ed92b3411
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1,4 +1,12 @@
import 'package:flutter/material.dart';
import 'package:collection/collection.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/config/app_config.dart';
import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/pangea/common/config/environment.dart';
import 'package:fluffychat/pangea/common/utils/error_handler.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/client_manager.dart';
import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/error_widget.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 'config/setting_keys.dart';
import 'utils/background_push.dart'; import 'utils/background_push.dart';
import 'widgets/fluffy_chat_app.dart'; import 'widgets/fluffy_chat_app.dart';

@ -5,10 +5,23 @@ import 'dart:core';
import 'dart:developer'; import 'dart:developer';
import 'dart:io'; 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:adaptive_dialog/adaptive_dialog.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:device_info_plus/device_info_plus.dart'; import 'package:device_info_plus/device_info_plus.dart';
import 'package:emoji_picker_flutter/emoji_picker_flutter.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/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.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/utils/platform_infos.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.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/account_bundles.dart';
import '../../utils/localized_exception_extension.dart'; import '../../utils/localized_exception_extension.dart';
import 'send_file_dialog.dart'; import 'send_file_dialog.dart';

@ -42,10 +42,6 @@ class ActivityPlannerPageState extends State<ActivityPlannerPage> {
/// Index of the content to display /// Index of the content to display
_PageMode _pageMode = _PageMode.settings; _PageMode _pageMode = _PageMode.settings;
/// Selected values from the form
String? _selectedTopic;
String? _selectedMode;
String? _selectedObjective;
MediaEnum _selectedMedia = MediaEnum.nan; MediaEnum _selectedMedia = MediaEnum.nan;
String? _selectedLanguageOfInstructions; String? _selectedLanguageOfInstructions;
String? _selectedTargetLanguage; String? _selectedTargetLanguage;
@ -120,14 +116,14 @@ class ActivityPlannerPageState extends State<ActivityPlannerPage> {
} }
void _randomizeSelections() async { void _randomizeSelections() async {
_selectedTopic = await _randomTopic(); final selectedTopic = await _randomTopic();
_selectedObjective = await _randomObjective(); final selectedObjective = await _randomObjective();
_selectedMode = await _randomMode(); final selectedMode = await _randomMode();
setState(() { setState(() {
_topicController.text = _selectedTopic!; _topicController.text = selectedTopic;
_objectiveController.text = _selectedObjective!; _objectiveController.text = selectedObjective;
_modeController.text = _selectedMode!; _modeController.text = selectedMode;
}); });
} }
@ -191,9 +187,9 @@ class ActivityPlannerPageState extends State<ActivityPlannerPage> {
activityPlanRequest: _PageMode.savedActivities == _pageMode activityPlanRequest: _PageMode.savedActivities == _pageMode
? null ? null
: ActivityPlanRequest( : ActivityPlanRequest(
topic: _selectedTopic!, topic: _topicController.text,
mode: _selectedMode!, mode: _modeController.text,
objective: _selectedObjective!, objective: _objectiveController.text,
media: _selectedMedia, media: _selectedMedia,
languageOfInstructions: _selectedLanguageOfInstructions!, languageOfInstructions: _selectedLanguageOfInstructions!,
targetLanguage: _selectedTargetLanguage!, targetLanguage: _selectedTargetLanguage!,
@ -223,8 +219,6 @@ class ActivityPlannerPageState extends State<ActivityPlannerPage> {
validator: _validateNotNull, validator: _validateNotNull,
label: l10n.topicLabel, label: l10n.topicLabel,
placeholder: l10n.topicPlaceholder, placeholder: l10n.topicPlaceholder,
onSelected: (val) => _selectedTopic = val,
initialValue: _selectedTopic,
controller: _topicController, controller: _topicController,
), ),
const SizedBox(height: 24), const SizedBox(height: 24),
@ -234,8 +228,6 @@ class ActivityPlannerPageState extends State<ActivityPlannerPage> {
label: l10n.learningObjectiveLabel, label: l10n.learningObjectiveLabel,
placeholder: placeholder:
l10n.learningObjectivePlaceholder, l10n.learningObjectivePlaceholder,
onSelected: (val) => _selectedObjective = val,
initialValue: _selectedObjective,
controller: _objectiveController, controller: _objectiveController,
), ),
const SizedBox(height: 24), const SizedBox(height: 24),
@ -244,8 +236,6 @@ class ActivityPlannerPageState extends State<ActivityPlannerPage> {
validator: _validateNotNull, validator: _validateNotNull,
label: l10n.modeLabel, label: l10n.modeLabel,
placeholder: l10n.modePlaceholder, placeholder: l10n.modePlaceholder,
onSelected: (val) => _selectedMode = val,
initialValue: _selectedMode,
controller: _modeController, controller: _modeController,
), ),
], ],

@ -7,8 +7,6 @@ class SuggestionFormField extends StatelessWidget {
final String? Function(String?)? validator; final String? Function(String?)? validator;
final String label; final String label;
final String placeholder; final String placeholder;
final void Function(String) onSelected;
final String? initialValue;
final TextEditingController controller; final TextEditingController controller;
const SuggestionFormField({ const SuggestionFormField({
@ -17,16 +15,13 @@ class SuggestionFormField extends StatelessWidget {
required this.placeholder, required this.placeholder,
this.validator, this.validator,
required this.label, required this.label,
required this.onSelected,
required this.initialValue,
required this.controller, required this.controller,
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Autocomplete<String>( return Autocomplete<String>(
initialValue: initialValue: TextEditingValue(text: controller.text),
initialValue != null ? TextEditingValue(text: initialValue!) : null,
optionsBuilder: (TextEditingValue textEditingValue) async { optionsBuilder: (TextEditingValue textEditingValue) async {
return (await suggestions) return (await suggestions)
.where((ActivitySettingResponseSchema option) { .where((ActivitySettingResponseSchema option) {
@ -35,7 +30,7 @@ class SuggestionFormField extends StatelessWidget {
.contains(textEditingValue.text.toLowerCase()); .contains(textEditingValue.text.toLowerCase());
}).map((ActivitySettingResponseSchema e) => e.name); }).map((ActivitySettingResponseSchema e) => e.name);
}, },
onSelected: onSelected, onSelected: (val) => controller.text = val,
fieldViewBuilder: ( fieldViewBuilder: (
BuildContext context, BuildContext context,
TextEditingController textEditingController, TextEditingController textEditingController,
@ -44,7 +39,7 @@ class SuggestionFormField extends StatelessWidget {
) { ) {
textEditingController.value = controller.value; textEditingController.value = controller.value;
textEditingController.addListener(() { textEditingController.addListener(() {
onSelected(textEditingController.text); controller.value = textEditingController.value;
}); });
return TextFormField( return TextFormField(
controller: textEditingController, controller: textEditingController,

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:material_symbols_icons/symbols.dart'; import 'package:material_symbols_icons/symbols.dart';
const Map<String, List<String>> morphCategoriesAndLabels = { const Map<String, List<String>> morphCategoriesAndLabels = {

@ -1,9 +1,11 @@
import 'package:fluffychat/pangea/common/utils/error_handler.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:get_storage/get_storage.dart'; import 'package:get_storage/get_storage.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:fluffychat/pangea/common/utils/error_handler.dart';
class CustomizedSvg extends StatelessWidget { class CustomizedSvg extends StatelessWidget {
/// URL of the SVG file /// URL of the SVG file
final String svgUrl; final String svgUrl;

Loading…
Cancel
Save