TextInputClient currentTextEditingValue
概述
#向 TextInputClient 介面新增一個 currentTextEditingValue 欄位,以從平臺客戶端獲取可編輯文字欄位的當前值。
背景
#TextInputClient 類由 Flutter 框架用來與平臺程式碼就 EditableText 等文字輸入小部件的當前狀態進行通訊。
當 Android 應用進入後臺時,平臺端可能會丟失其狀態。在此更改後,應用可以向框架請求最後已知狀態。為了獲取此資訊,TextEditingValue 已被暴露給 TextInputClient。
變更說明
#在某些支援的平臺上,應用程式可以進入後臺,預期會消耗更少的資源。例如,後臺執行的 Android 應用程式應避免消耗不必要的記憶體,並且不需要保留對檢視的引用。在此更改之前,當應用重新回到前臺時,特定於 Android 的平臺程式碼可能會丟失可編輯文字欄位的狀態資訊。例如,這會發生在 TextField 小部件中輸入的文字丟失於 Java 程式碼,但仍被 Dart 程式碼記住的情況。
在此更改後,平臺端現在會發送一個名為 TextInput.requestExistingState 的 textInput 通道訊息。這會通知 Dart 程式碼,當應用喚醒時,它應該重新建立任何文字輸入連線,並將其最近已知編輯狀態通知平臺。
TextInput 類使用 TextInputClient 介面與客戶端小部件進行互動。該介面以前沒有提供對客戶端當前值的任何洞察。為了允許 TextInput 類適當地響應 TextInput.requestExistingState,在 TextInputClient 中添加了一個名為 currentTextEditingValue 的新 getter。您不能安全地使用傳遞給 TextInputConnection.setEditingState 的最後一個值,因為客戶端僅在特定情況下呼叫該方法,例如當 Dart 程式碼直接修改 TextEditingController 的值,並且該修改不直接反映平臺對按鍵輸入事件的響應的原生處理方式。例如,TextInputFormatter 通常就是這樣工作的,或者當 Dart 程式碼直接設定 TextEditingController.value 時也會發生這種情況。
遷移指南
#如果您之前實現了 TextEditingClient 或擴充套件了它,您現在必須新增對 currentTextEditingValue 的相應覆蓋。
此值可能為 null。
如果您想在更改合併到程式碼庫之前進行遷移,可以在您的類中新增一個類似以下的類:
abstract class _TemporaryTextEditingClient {
TextEditingValue get currentTextEditingValue;
}這允許您在更改合併到框架之前,使用 @override 註釋新增新成員。之後,您可以刪除臨時介面定義。
遷移前的程式碼
class _MyCustomTextWidgetState extends State<MyCustomWidget> implements TextEditingClient {
...
@override
void updateEditingValue(TextEditingValue value) {
...
}
@override
void performAction(TextInputAction action) {
...
}
@override
void updateFloatingCursor(RawFloatingCursorPoint point) {
...
}
}遷移後的程式碼
class _MyCustomTextWidgetState extends State<MyCustomWidget> implements TextEditingClient {
...
@override
TextEditingValue get currentTextEditingValue => widget.textEditingController.value;
@override
void updateEditingValue(TextEditingValue value) {
...
}
@override
void performAction(TextInputAction action) {
...
}
@override
void updateFloatingCursor(RawFloatingCursorPoint point) {
...
}
}時間線
#釋出版本: 1.16.3
穩定版本: 1.17
參考資料
#API 文件
相關議題
相關 PR