如何解决Flutter:如何在TextField / TextFormField中正确插入文本
让我们说一个空的TextFormField
。手动输入2个字符后,我想以编程方式插入一个新的字符。因此,如果长度等于2,则插入一个新的长度。听起来确实很简单,但是在我尝试实现此目标时出现了奇怪的行为。例如:光标连续跳回起点,并可能导致以下调试日志:
将文本选择索引限制为(-1-> 0)以保持界限。这可能不是您的错,因为某些键盘可能会选择超出范围。
或者,如果我尝试处理TextEditingController
的value或selection属性以将光标置于文本的末尾,则会引起更多奇怪的行为。
您能提供一个示例吗?如果文本长度等于2,则使用TextField
或TextFormField
和TextEditingController
并在onChanged()
上插入一个新字符最后将光标放回末尾。
我尝试了这些解决方案,但在这种情况下它们不起作用:
How do you change the value inside of a textfield flutter?
谢谢!
编辑:示例代码:
void main() => runApp(MyApp());
/// This Widget is the main application widget.
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'example',home: Scaffold(
body: Center(
child: MyWidget(),),);
}
}
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
final TextEditingController controller = TextEditingController(text: '');
@override
Widget build(BuildContext context) {
return TextFormField(
controller: controller,onChanged: (value) {
if (controller.text != null && controller.text.length == 2) {
controller.text = '$value/';
controller.selection = TextSelection.fromPosition(
TextPosition(offset: controller.text.length));
setState(() {});
}
},);
}
@override
void dispose() {
controller.dispose();
super.dispose();
}
}
问题:如果我将TextFormField替换为TextField,它将按预期工作。我猜这是应该修复的错误。
我还找到了一个链接,该链接在flutter版本1.20.1和更高版本中是TextFormFields的问题。
https://github.com/flutter/flutter/issues/62654
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。