變更 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)
。例如,您可能會看到在呼叫enterText
後,expect(controller.value.selection.baseOffset, -1);
失敗。
如果您的測試必須依賴將選取範圍設定為無效,則可以使用 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。 檢視原始碼 或 回報問題。