将 enterText 方法修改为将光标移动到输入文本的末尾
摘要
#WidgetTester.enterText
和 TestTextInput.enterText
方法现在会将光标移动到输入文本的末尾。
上下文
#光标指示活动输入字段中当前文本内的插入点。通常,当输入新字符时,光标会停留在其后。在 Flutter 中,光标位置由一个折叠的选择表示。当选择无效时,通常用户将无法修改或添加文本,直到他们将选择更改为有效值。
WidgetTester.enterText
和 TestTextInput.enterText
是在测试中用于替换目标文本字段内容的两种方法。在此更改之前,WidgetTester.enterText
和 TestTextInput.enterText
将选择范围设置为无效范围 (-1, -1),表示没有选择或光标。这与输入字段的典型行为相矛盾。
更改说明
#除了用提供的文本替换文本之外,WidgetTester.enterText
和 TestTextInput.enterText
现在将选择范围设置为 TextSelection.collapsed(offset: text.length)
,而不是 TextSelection.collapsed(offset: -1)
。
迁移指南
#测试需要依赖于 enterText
的先前行为的情况应该非常少见,因为通常选择不应该无效。**请考虑更改测试的预期值以采用 enterText
的更改。**
此更改可能引入的常见测试失败包括
黄金测试失败
光标出现在文本末尾,而不是在更改之前出现在文本之前。
调用
enterText
后不同的TextEditingValue.selection
文本字段的
TextEditingValue
现在具有一个带有非负偏移量的折叠选择,而不是更改之前的TextSelection.collapsed(offset: -1)
。例如,您可能会看到expect(controller.value.selection.baseOffset, -1);
在enterText
调用后失败。
如果您的测试必须依赖于将选择设置为无效,则可以使用 updateEditingValue
实现之前的行为。
TestTextInput.enterText
#迁移前的代码
await testTextInput.enterText(text);
迁移后的代码
await testTextInput.updateEditingValue(TextEditingValue(
text: text,
));
WidgetTester.enterText
#迁移前的代码
await tester.enterText(finder, text);
迁移后的代码
await tester.showKeyboard(finder);
await tester.updateEditingValue(TextEditingValue(
text: text,
));
await tester.idle();
时间轴
#包含在版本中:2.1.0-13.0.pre
稳定版本:2.5
参考
#API 文档
相关问题
相关 PR
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面最后更新于 2024-04-04。 查看源代码 或 报告问题.