TextInputClient currentTextEditingValue
摘要
#向 TextInputClient
接口添加一个字段 currentTextEditingValue
,以便从平台客户端获取可编辑文本字段的当前值。
上下文
#TextInputClient
类由 Flutter 框架用于与平台代码通信,以了解文本输入 Widget(如 EditableText
)的当前状态。
当 Android 应用切换到后台时,平台端可能会丢失其状态。自此更改起,应用可以向框架请求最后已知的状态。为了获取此信息,TextEditingValue
已暴露给 TextInputClient
。
更改说明
#在某些支持的平台上,应用程序可以被移到后台,预计它将消耗更少的资源。例如,Android 上的后台应用程序应避免消耗不必要的内存,并且无需保留对视图的引用。在此更改之前,当应用切换回前台时,Android 特定的平台代码可能会丢失关于可编辑文本字段的状态信息。例如,在 TextField
组件中输入的文本丢失到 Java 代码中,但在 Dart 代码中仍然被记住,就会出现这种情况。
自此更改起,平台端现在发送一个名为 TextInput.requestExistingState
的 textInput
通道消息。这会通知 Dart 代码,当应用唤醒时,它应该重新建立任何文本输入连接,并通知平台其最近已知的编辑状态。
TextInput
类使用 TextInputClient
接口与客户端组件进行交互。此接口以前没有提供关于客户端当前值的任何信息。为了允许 TextInput
类适当地响应 TextInput.requestExistingState
,一个新的 getter 被添加到 TextInputClient
中,名为 currentTextEditingValue
。您不能安全地使用传递给 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。 查看源代码 或 报告问题.