在具有TextField或TextFormField的flutter应用程序中,首次输入数据时可以复制文本。
第一次输入按键时,在已经预先填充文本的字段中,文本会重复,然后附加您的按键。
我在我的Samsung Galaxy S7,S8和S9(仅需要测试的设备)上遇到了表现出此行为的东西。在模拟器(Galaxy Nexus9和Pixel 2)中不会发生这种情况。
如果我在该字段的末尾放置一个空格,则不会发生此问题,但是,如果我在一个预填充字段的中间轻按(使用控制器或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的第一个版本),这个问题仍然存在。
答案 0 :(得分:4)
如@ {DarkNeuron所述,这是三星设备上已知的Flutter问题。暂时还没有完全治愈的方法。
截至2020年2月,已确定问题与三星键盘缓存过程有关并且已自动更正。在Flutter github中,提出了可能的临时解决方法:将keyboardType: TextInputType.visiblePassword
用于所有文本输入。但是有报告说,至少对于朝鲜语是无效的。另一个建议是检查三星设备并相应地构建:
keyboardType: samsungKeyboard ? TextInputType.visiblePassword : TextInputType.emailAddress,
autoFocus: false,
问题的一部分(标点重复)在两周前修复。但是问题的主要部分仍然被观察到。
您可以在这里找到更多详细信息:Flutter github。
答案 1 :(得分:0)
我遇到了同样的问题并用这个简单的临时解决方案修复了它:只需在 initialValue 的末尾添加一个空格。示例:
initialValue: controller.text + ' ',