将 WidgetSpan 添加到 TextField 会导致 'dimensions != null': is not true'

Posted

技术标签:

【中文标题】将 WidgetSpan 添加到 TextField 会导致 \'dimensions != null\': is not true\'【英文标题】:Adding WidgetSpan to TextField results in 'dimensions != null': is not true'将 WidgetSpan 添加到 TextField 会导致 'dimensions != null': is not true' 【发布时间】:2021-10-23 05:12:18 【问题描述】:

我一直在尝试将 WidgetSpan 添加到 TextField(通过 TextEditingController 中的 buildTextSpan())并遇到崩溃:“断言失败:[..]:'dimensions != null': is not true”。 在尝试找到解决方案时,我只遇到过有类似问题的人,但无法找到解决方案。 我的代码(和问题)类似于在问题 https://github.com/flutter/flutter/issues/30688#issuecomment-870034058 上发布的评论。

  @override
  TextSpan buildTextSpan(required BuildContext context, TextStyle? style, required bool withComposing) 
    final atIndex = text.indexOf('@');
    var spans = <InlineSpan>[];

    if (atIndex != -1) 
      spans.add(TextSpan(text: text.substring(0, atIndex)));
      spans.add(
        WidgetSpan(
          alignment: PlaceholderAlignment.middle,
          child: Card(
            child: Padding(
              padding: const EdgeInsets.all(4.0),
              child: Text('@'),
            ),
          ),
        ),
      );
      spans.add(TextSpan(text: text.substring(1 + atIndex)));
     else 
      spans.add(TextSpan(text: text));
    

    return TextSpan(
      children: spans,
    );
  

对于这个失败的断言是否有任何修复/解决方法?

【问题讨论】:

这有帮助吗? github.com/flutter/flutter/issues/49883 我也看到了这个问题,但类似于该问题的最后两个 cmets,我不知道如何从 TextEditingController 设置 PlaceholderDimensions 【参考方案1】:

原来这个功能还没有进入稳定频道。使用主通道“修复”了这个问题,使提供代码 sn-p 无需修改即可运行。

有关更改频道的信息,请参阅:https://***.com/a/61157330/10832540

【讨论】:

请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。

以上是关于将 WidgetSpan 添加到 TextField 会导致 'dimensions != null': is not true'的主要内容,如果未能解决你的问题,请参考以下文章

将文本移动到 UITableViewCell 中的下一个文本字段

给键盘添加一个工具条

将变量传递给下一个视图控制器

在文本字段中键入时在文本字段字符之间添加连字符

如何使用 post 方法将 JSON 数据从登录功能传递到另一个视图控制器?

如何在 Flutter 中根据屏幕大小对长文本进行分页