將 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 的更改。
此更改可能導致的常見測試失敗包括
Golden 測試失敗
插入符號出現在文字末尾,而不是在此更改之前的文字開頭。
呼叫
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