问题描述
让我们说一个空的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 (将#修改为@)