概述

#

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