跳到主要內容

變更 enterText 方法,將游標移動到輸入文字的末尾

摘要

#

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 變更。

此變更可能引入的常見測試失敗包括

  • 黃金測試失敗

    游標會出現在文字的末尾,而不是變更之前文字的前面。

  • 呼叫 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