我一直在尝试将WidgetSpans添加到TextField(通过TextEditingController中的buildTextSpan())并遇到崩溃:“Assert失败:[..]:‘维度!= null ':不为真”。在试图找到一个解决方案时,我只遇到了有类似问题的人,但没能找到解决方案。我的代码(和问题)类似于问题www.example.com上发布的评论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,
);
}
对于此失败的Assert是否有任何修复/解决方法?
2条答案
按热度按时间kpbpu0081#
事实证明,这一功能目前还不在稳定通道中。使用主通道“修复”了这个问题,使提供的代码片段无需修改即可运行。
有关更改频道的信息,请参阅:https://stackoverflow.com/a/61157330/10832540
zvms9eto2#
如果您可以通过设置PlaceholderDimensions来解决问题,请尝试以下操作。“dimensions”的长度和顺序必须与“PlaceholderSpan”的编号相同。您的'buildTextSpan'方法中只有一个'WidgetSpan'。因此,“dimensions”中只包含一个“PlaceholderDimension”