TextInputClient currentTextEditingValue
摘要
#在 TextInputClient
介面中新增一個欄位 currentTextEditingValue
,以從平台客戶端取得可編輯文字欄位的目前值。
背景
#Flutter 框架使用 TextInputClient
類別與平台程式碼溝通關於文字輸入小工具(如 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
除非另有說明,否則本網站上的文件反映了 Flutter 的最新穩定版本。頁面最後更新於 2024-04-04。 查看原始碼 或 回報問題。