Flutter TextField TextEditingController 在单击表情符号按钮后将文本恢复为原始值

问题描述 投票:0回答:2

我正在编写一个移动 Flutter 应用程序(使用 GetX),并且有一个文本字段小部件,通过设置

controller.myTextEditingController.text = controller.initialValue;
为其赋予初始值。我希望用户能够输入他们想要的任何文本。当我开始编辑文本字段时,一切都按预期进行。但是,一旦我单击键盘上的表情符号按钮开始输入表情符号(正如我预计许多用户会这样做),textEditingController.text 就会恢复为其给出的原始值。

以下是一些代码片段:

class MyClassController extends GetxController {
    ...
    late Map<String, String?> getParams;
    late String initalValue;
    TextEditingController myTextEditingController = TextEditingController();
    ...
}

class MyClass extends GetView<MyClassController> {
    ...
    @override
    Widget build(BuildContext context) {
        controller.getParams = Get.parameters;
        controller.initialValue = controller.getParams['key'] ?? '';
        ...
        return Scaffold(
            body: Column(
                ...
                _myTextFieldWidget(),
                ...
            )
        );
    }

    Widget _myTextFieldWidget() {
        controller.myTextEditingController.text = controller.initialValue;
        return TextField(
            ...
            controller: controller.myTextEditingController,
            onChanged: (value) {...},
            onEditingComplete: () {}, // left this empty so that the 'done' button on keyboard does nothing
            ...
        );
    }
}

我尝试重写小部件,将其直接移动到脚手架中,并更改 textEditingController 的范围及其文本的定义位置。什么都不起作用。

任何帮助将不胜感激!

flutter textfield emoji
2个回答
0
投票

要解决这个问题,你应该只设置一次TextEditingController的初始值。 看来您面临这个问题是因为在 MyClass 中处理 TextEditingController 的方式。 因此,每次调用 _myTextFieldWidget() 时,controller.myTextEditingController.text 都会被重置为controller.initialValue


0
投票

因为你打电话

control.myTextEditingController.text = control.initialValue;

在 build() 函数中。 每次您单击软键盘上的表情符号按钮时,页面都会重建,导致您的文本字段控制器将文本重置为初始值。

将此行移至 onInit 以确保在页面重建期间不会调用它。

© www.soinside.com 2019 - 2024. All rights reserved.