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