概述

#

WidgetTester.enterTextTestTextInput.enterText 方法现在会将插入符号移动到输入文本的末尾。

背景

#

插入符号指示活动输入字段中当前文本内的插入点。通常,当输入新字符时,插入符号会紧跟在其后面。在 Flutter 中,插入符号位置由折叠的选择表示。当选择无效时,用户通常无法修改或添加文本,直到他们将选择更改为有效值。

WidgetTester.enterTextTestTextInput.enterText 是在测试中用于替换目标文本字段内容的两个方法。在此更改之前,WidgetTester.enterTextTestTextInput.enterText 将选择设置为无效范围 (-1, -1),表示没有选择或插入符号。这与输入字段的典型行为相悖。

变更说明

#

除了用提供的文本替换文本之外,WidgetTester.enterTextTestTextInput.enterText 现在将选择设置为 TextSelection.collapsed(offset: text.length),而不是 TextSelection.collapsed(offset: -1)

迁移指南

#

测试极少需要依赖 enterText 的先前行为,因为通常选择不应无效。请考虑更改测试的预期值以适应 enterText 的更改。

此更改可能导致的常见测试失败包括

  • Golden 测试失败

    插入符号出现在文本末尾,而不是在此更改之前的文本开头。

  • 调用 enterText 后不同的 TextEditingValue.selection

    文本字段的 TextEditingValue 现在具有折叠的选择,其偏移量为非负值,而不是在此更改之前的 TextSelection.collapsed(offset: -1)。例如,在调用 enterText 后,您可能会看到 expect(controller.value.selection.baseOffset, -1); 失败。

如果您的测试必须依赖于将选择设置为无效,则可以使用 updateEditingValue 实现之前的行为。

TestTextInput.enterText

#

迁移前的代码

dart
await testTextInput.enterText(text);

迁移后的代码

dart
await testTextInput.updateEditingValue(TextEditingValue(
  text: text,
));

WidgetTester.enterText

#

迁移前的代码

dart
await tester.enterText(finder, text);

迁移后的代码

dart
await tester.showKeyboard(finder);
await tester.updateEditingValue(TextEditingValue(
  text: text,
));
await tester.idle();

时间线

#

已集成到版本:2.1.0-13.0.pre
稳定版本:2.5

参考资料

#

API 文档

相关问题

相关 PR