在Text小部件中使用\u00ad的连字符Flutter,并且仅在应用时才替换为软连字符(-)



是否有一种方法可以在Text小部件中使用\u00ad进行连字符,并且只有在应用了连字符的情况下,它才应该替换单词break上的软连字符符号(-(?

例如:

Hyphenu00adation text

如果文本没有破坏

Hyphenation text

或者像这样,如果文本用(-(符号分成两行

Hyphen-
ation text

我刚刚为此目的编写了这个StatelessWidget:

import 'dart:ui' as ui;
import 'package:flutter/material.dart';
class TextWithHyphenation extends StatelessWidget {
const TextWithHyphenation(
this.data, {
Key? key,
this.style,
}) : super(key: key);
final String data;
final TextStyle? style;
@override
Widget build(BuildContext context) {
return LayoutBuilder(builder: (context, size) {
final String text = data;
final span = TextSpan(text: text, style: style);
final textPainter = TextPainter(
text: span, maxLines: 2, textDirection: ui.TextDirection.ltr)
..layout(maxWidth: size.maxWidth);
final TextSelection selection =
TextSelection(baseOffset: 0, extentOffset: text.length);
final List<TextBox> boxes = textPainter.getBoxesForSelection(selection);
final int lines = boxes.length;
if (lines > 1) {
// The text has more than a line
return Text(text.replaceFirst('u00ad', 'u00ad-'), style: style);
} else {
return Text(text, style: style);
}
});
}
}

请注意,这只适用于String资源中的一个u00ad字符。

最新更新