Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-06-26 10:57:31 +08:00
parent 2eb86658b7
commit 0264a4c01f
2 changed files with 23 additions and 26 deletions

View File

@@ -78,7 +78,10 @@ class RenderParagraph extends RenderBox
SelectionRegistrar? registrar,
required Color primary,
}) : assert(text.debugAssertIsValid()),
assert(maxLines == null || maxLines > 0),
assert(maxLines == null ||
(maxLines > 0 &&
overflow != TextOverflow.ellipsis &&
overflow != TextOverflow.fade)),
assert(
identical(textScaler, TextScaler.noScaling) || textScaleFactor == 1.0,
'textScaleFactor is deprecated and cannot be specified when textScaler is specified.',
@@ -673,6 +676,8 @@ class RenderParagraph extends RenderBox
);
TextPainter? _morePainter;
bool didOverflowHeight = false;
@override
void performLayout() {
_lastSelectableFragments?.forEach(
@@ -690,7 +695,7 @@ class RenderParagraph extends RenderBox
final Size textSize = _textPainter.size;
size = constraints.constrain(textSize);
final bool didOverflowHeight =
didOverflowHeight =
size.height < textSize.height || _textPainter.didExceedMaxLines;
if (didOverflowHeight) {
@@ -700,7 +705,10 @@ class RenderParagraph extends RenderBox
textScaler: textScaler,
locale: locale,
)..layout(maxWidth: constraints.maxWidth);
size = Size(size.width, size.height + _morePainter!.height);
size = Size(
size.width,
constraints.constrainHeight(size.height + _morePainter!.height),
);
}
final bool didOverflowWidth = size.width < textSize.width;
@@ -764,10 +772,6 @@ class RenderParagraph extends RenderBox
@override
void paint(PaintingContext context, Offset offset) {
if (_needsClipping) {
_morePainter?.paint(
context.canvas, offset + Offset(0, _textPainter.height));
}
// Text alignment only triggers repaint so it's possible the text layout has
// been invalidated but performLayout wasn't called at this point. Make sure
// the TextPainter has a valid layout.
@@ -812,6 +816,13 @@ class RenderParagraph extends RenderBox
}
context.canvas.restore();
}
if (didOverflowHeight) {
_morePainter?.paint(
context.canvas,
offset + Offset(0, _textPainter.height),
);
}
}
/// Returns the offset at which to paint the caret.

View File

@@ -283,12 +283,7 @@ class ReplyItemGrpc extends StatelessWidget {
),
const TextSpan(text: ' '),
],
buildContent(
context,
theme,
replyItem,
null,
),
buildContent(context, theme, replyItem),
],
),
),
@@ -519,12 +514,7 @@ class ReplyItemGrpc extends StatelessWidget {
? ''
: ' ',
),
buildContent(
context,
theme,
childReply,
replyItem,
),
buildContent(context, theme, childReply),
],
),
),
@@ -575,11 +565,7 @@ class ReplyItemGrpc extends StatelessWidget {
BuildContext context,
ThemeData theme,
ReplyInfo replyItem,
ReplyInfo? fReplyItem,
) {
// replyItem 当前回复内容
// replyReply 查看二楼回复(回复详情)回调
// fReplyItem 父级回复内容,用作二楼回复(回复详情)展示
final Content content = replyItem.content;
final List<InlineSpan> spanChildren = <InlineSpan>[];
@@ -625,7 +611,7 @@ class ReplyItemGrpc extends StatelessWidget {
String matchStr = match[0]!;
if (content.emotes.containsKey(matchStr)) {
// 处理表情
final int size = content.emotes[matchStr]!.size.toInt();
final size = content.emotes[matchStr]!.size.toInt() * 20.0;
spanChildren.add(
WidgetSpan(
child: NetworkImgLayer(
@@ -633,8 +619,8 @@ class ReplyItemGrpc extends StatelessWidget {
? content.emotes[matchStr]?.gifUrl
: content.emotes[matchStr]?.url,
type: ImageType.emote,
width: size * 20,
height: size * 20,
width: size,
height: size,
),
),
);