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