【发布时间】:2020-08-23 10:40:10
【问题描述】:
我想创建一个罗马字到假名的转换器 EditableText。也就是说,在 EditableText 中写“saikou”,显示的文本例如应该是“さいこう”。
目前,如果用户继续写作而不想编辑他的 文本(但由于偏移错误,光标位于文本的开头而不是末尾)。
但是一旦用户手动移动 TextSelection(通过在 EditableText 上的某处点击),光标最终定位良好,但是当他尝试编辑文本(添加或删除字符)时,错误的偏移量会导致混乱.
例子:
用户想去掉“こ”。他将光标移到这里(用竖线表示):“さいこ|う”。但是当他按下删除键时,“い”字符反而会消失。这是因为原文(saikou)和日文翻译(“さいこう”)的长度不同。原文的长度是6,而日文的长度只有4。通过这样放置我们的光标并点击“删除键”,我们将尝试删除原文中字母“i”而不是第3个字符“こ”在日文翻译中。
想法
我可以编写一个函数,将原始偏移量与相应的日本偏移量相匹配。但这只有在我可以防止发生默认文本删除并因此以编程方式更新文本时才有用。但是,我找不到阻止删除的方法。 我已经尝试在 EditableText 上使用 onChange 方法,但尽管尝试在函数中返回,修改仍然发生。我还查看了 EditableText 的控制器并尝试在触发侦听器时更改文本,但由于此侦听器中的状态更改而导致无限循环。
任何帮助将不胜感激!
【问题讨论】:
标签: flutter text-editor