跳至主要内容

向 TextInputClient 添加 showAutocorrectionPromptRect 方法

摘要

#

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

上下文

#

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

更改说明

#

TextInputClient 接口中添加了一个新方法 void showAutocorrectionPromptRect(int start, int end)。当 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
// Assume your `TextInputClient` is a `State` subclass, and it has a variable 
// `_currentPromptRectRange` that controls the autocorrection highlight.
class CustomTextInputClient extends State<...> implements TextInputClient {
  @override
  void updateEditingValue(TextEditingValue value) {
    // When the text changes, the highlight needs to be dismissed.
    if (value.text != _value.text) {
      setState(() {
        _currentPromptRectRange = null;
      });
    }
  }

  void _handleFocusChanged() {
    // When this text input loses focus, the autocorrection highlight needs
    // to be dismissed.
    if (!_hasFocus) {
      setState(() {
        _currentPromptRectRange = null;
      });
    }
  }

  @override
  void showAutocorrectionPromptRect(int start, int end) {
    // Updates the range of the highlight, as iOS requested.
    // This method isn't called when iOS decides to
    // dismiss the highlight.
    setState(() {
      _currentPromptRectRange = TextRange(start: start, end: end);
    });
  }
}

时间线

#

稳定版发布:1.20

参考

#

API 文档

相关问题

相关 PR