Flutter-剪切文本时忽略断字

时间:2019-10-13 09:42:29

标签: flutter

当您使用TextOverflow.clipTextOverflow.ellipses时,当文本中有多个单词时,会在文本边界处将文本剪裁。

但是,当Text()的文本数据只是一个长字时,它只会将其剪切到最后一个可能的位置。

示例:在带字幕的图像上,我不希望标签“ Mr Ihaveanunusuallylongsurname”仅在图像下方显示“ Mr”,而除最后几个字符以外的所有字符都可以容纳。

enter image description here

在中间的照片上,您可以看到在“先生...:...”之后有很多可用空间。我希望在可用空间中尽可能多地显示Mr Ihaveanunusuallylongsurname帮助用户识别哪个。

如何使Text()能够在忽略单词中断的情况下进行裁剪,例如当文本中只有一个单词时?

class ClippedText extends StatelessWidget {
  final String text;
  final TextAlign textAlign;
  final TextStyle style;
  final int maxLines;

  const ClippedText(this.text,
      {Key key, this.textAlign, this.style, this.maxLines})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Text(
      text,
      style: style,
      textAlign: textAlign,
      maxLines: maxLines ?? 10,
      overflow: TextOverflow.ellipsis,
    );
  }
}

注意:我使用上面的ClippedText代替Text()。通常,未设置maxLines时,文字会自动换行。但是,为了在使用ClippedText时达到这种效果,我需要为封装的Text小部件提供maxLines的默认值,该默认值不为null。我无法弄清楚未提供maxLines时传递给Text的真正默认值是什么。

1 个答案:

答案 0 :(得分:0)

使用https://en.wikipedia.org/wiki/Non-breaking_space

>>> df['C'].apply(lambda x: re.sub(r'[^a-zA-Z ]+', ' ', str(x)))
0         Empty
1          Yes 
2    Male female
3          Yes 
4              
Name: C, dtype: object

enter image description here