Skip to main content

TextInputClient 中添加了 showAutocorrectionPromptRect 方法

摘要

#

TextInputClient 接口添加了一个新方法 void showAutocorrectionPromptRect(int start, int end)

背景

#

为了显示 iOS 自动更正高亮显示,iOS 文本输入插件需要一种方法来告知 Flutter 框架高亮显示的起始和结束位置。

变更描述

#

TextInputClient 接口添加了一个新方法 void showAutocorrectionPromptRect(int start, int end)。当 iOS 在当前用户输入中找到新的潜在自动更正候选对象,或先前高亮显示的候选对象的范围发生变化时,iOS 会调用此方法。

迁移指南

#

如果您的应用程序没有实现或子类化 TextInputClient,则不需要迁移。如果您的应用程序不针对 iOS,或者实现 textInputClient 接口的类不支持自动更正,您只需要为新方法添加一个空实现:

dart
class CustomTextInputClient implements TextInputClient {
  void showAutocorrectionPromptRect(int start, int end) {}
}

否则,如果您的应用程序针对 iOS 并支持 iOS 上的自动更正,我们建议您向您的 TextInputClient 子类添加 void showAutocorrectionPromptRect(int start, int end) 的合理实现。

迁移后的代码:

dart
// 假设您的 `TextInputClient` 是一个 `State` 子类,并且它有一个变量 `_currentPromptRectRange` 来控制自动更正高亮显示。
class CustomTextInputClient extends State<...> implements TextInputClient {
  @override
  void updateEditingValue(TextEditingValue value) {
    // 当文本更改时,需要取消高亮显示。
    if (value.text != _value.text) {
      setState(() {
        _currentPromptRectRange = null;
      });
    }
  }

  void _handleFocusChanged() {
    // 当此文本输入失去焦点时,需要取消自动更正高亮显示。
    if (!_hasFocus) {
      setState(() {
        _currentPromptRectRange = null;
      });
    }
  }

  @override
  void showAutocorrectionPromptRect(int start, int end) {
    // 根据 iOS 的请求更新高亮显示的范围。
    // 当 iOS 决定取消高亮显示时,不会调用此方法。
    setState(() {
      _currentPromptRectRange = TextRange(start: start, end: end);
    });
  }
}

时间线

#

稳定版发布:1.20

参考

#

API 文档:

相关问题:

相关 PR: