如何从手势回调中获取 RichTex 中的 TextPosition

问题描述 投票:0回答:1

我想在 Flutter 中实现一个弹出字典。更准确地说,我有一个 RichText 小部件,我希望当用户点击它时,获取文本索引,TextPosition,对应于用户点击的位置,以便能够获取周围的文本并处理它,然后显示一个弹出窗口,显示找到的单词的定义。

但我不知道如何从点击位置获取 TextPosition。

从这个问题的评论中,我明白首先我需要有一个 GestureDetector 来定义点击回调。然后根据事件参数计算相应 RenderParagraph 坐标的偏移量并调用

RenderParagraph.getPositionForOffset()
来获取文本位置。

但是我是 Flutter 的初学者,我不知道如何访问相应的 RenderParagraph 或任何具有来自 Tap Callack 的所需信息的对象。除了这个单词检测部分之外,我的所有词典弹出系统都正常工作。
谁能帮我完成这部分吗?

flutter richtext hittest
1个回答
0
投票

请使用以下代码获取文本位置

GestureDetector(
  onTapUp: (TapUpDetails details) {
    // Get the RenderBox of the RichText widget
    RenderBox renderBox = context.findRenderObject() as RenderBox;

    // Compute the tap position relative to the RichText widget
    Offset localOffset = renderBox.globalToLocal(details.globalPosition);

    // Get the RenderObject of the RichText widget and cast it to RenderParagraph
    RenderParagraph renderParagraph = renderBox as RenderParagraph;

    // Get the TextPosition corresponding to the tap position
    TextPosition textPosition =
        renderParagraph.getPositionForOffset(localOffset);

    // Use textPosition to get the surrounding text and process it
    String tappedWord = getTappedWord(renderParagraph.text, textPosition);

    // Display popup dictionary with definitions of tappedWord

  },
  // Your Child Widget
);
© www.soinside.com 2019 - 2024. All rights reserved.