android - Flutter TextField 和 TextFormField 在使用初始值或 Controller 设置初始文本时重复文本

标签 android flutter

在具有 TextField 或 TextFormField 的 flutter 应用程序中,文本可以在第一次数据输入时重复。

首次输入按键时,在已预先填充文本的字段中,文本重复,然后您的按键被附加。

我在我的三星 Galaxy S7、S8 和 S9(仅限我必须测试的设备)上遇到了这种情况。这不会发生在模拟器(Galaxy Nexus9 和 Pixel 2)中。

如果我在字段末尾放置一个空格,则不会发生此问题,但是,如果我在预填充字段的中间点击(使用 Controller 或 initialValue)并按下某个键,它确实会发生。

这是一个准系统源示例:

class SampleTextFormPage extends StatefulWidget {
    @override
    State<StatefulWidget> createState() => new _SampleTextFormPage();
}

class _SampleTextFormPage extends State<SampleTextFormPage> {
    final _scaffoldKey = new GlobalKey<ScaffoldState>();

    TextEditingController _txtController;

    @override
    void initState() {
        super.initState();

        _txtController = TextEditingController(text:'Using Controller');
    }

    @override
    Widget build(BuildContext context) { Scaffold scaffold = new Scaffold(
        key: _scaffoldKey,
        appBar: new AppBar(
            title: new Text('Text Entry',
                style: const TextStyle(
                    color: Colors.white)
            ),
            backgroundColor: Colors.indigo
        ),
        body:  Column(children: [
            //field 1
            TextField(
                 autocorrect: false,
                 autofocus: true,
                 controller: _txtController,
            ),

           //field 2
           TextFormField(
               autocorrect: false,
               autofocus: true,
               initialValue: 'Using initialValue',
           )
        ])
    );

    return scaffold;
    }
}

注意:我使用的是最新版本的 Flutter,并且我已经恢复到多个版本的 Flutter(一直到支持 Dart 2 的第一个版本),这个问题仍然存在。

最佳答案

作为@ DarkNeuron提到,这是三星设备上已知的 Flutter 问题。目前还没有完全治愈的方法。

截至 2020 年 2 月,已确定该问题与三星键盘缓存过程和自动更正有关。在 Flutter github 中提出了可能的临时解决方法:使用 keyboardType: TextInputType.visiblePassword对于您所有的文本输入。但有报道称它至少对韩语无效。另一个建议是检查三星设备并相应地构建:

keyboardType: samsungKeyboard ? TextInputType.visiblePassword : TextInputType.emailAddress,
autoFocus: false,

两周前修复的部分问题(标点符号重复)。但问题的主要部分仍然存在。

您可以在这里找到更多详细信息:Flutter github .

关于android - Flutter TextField 和 TextFormField 在使用初始值或 Controller 设置初始文本时重复文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52894507/

相关文章:

java - 创建一个在 editText 更改时运行的方法

firebase - FirabaseAuth无法在Flutter中捕获异常

android - 在 Flutter 应用的 ListView.builder 中添加滚动

flutter - Flutter无法加载 Assets :但目录不存在

java - 如何创建接受值数组的类构造函数?

android - 与 TextWatcher 一起使用时如何从 EditText 中清除文本

android - 如何使结束省略号到中间的 TextView

php - 如何在 android 中将 json 从 php 解析为 listview?

javascript - 用 Dart 将单词单数化

flutter - 找不到用于签名配置 'C:\...\android\app\<keystore.jks>' 的 keystore 文件 'release'