From 535b3c0b029be1cf14da624e8ae111db4489de93 Mon Sep 17 00:00:00 2001 From: Whiterzi Date: Fri, 17 Oct 2025 10:16:13 +0800 Subject: [PATCH] #20591: add `shrinkWrapHorizontal` for markdown body layout --- packages/flutter_markdown/lib/src/builder.dart | 7 +++++-- packages/flutter_markdown/lib/src/widget.dart | 10 ++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/flutter_markdown/lib/src/builder.dart b/packages/flutter_markdown/lib/src/builder.dart index d67da1dc06e7..bc58504af1f8 100644 --- a/packages/flutter_markdown/lib/src/builder.dart +++ b/packages/flutter_markdown/lib/src/builder.dart @@ -158,12 +158,15 @@ class MarkdownBuilder implements md.NodeVisitor { this.onTapText, this.softLineBreak = false, this.customizedMarkdownHandler, + this.shrinkWrapHorizontal = false, }) : assert(imageBuilder == null || sizedImageBuilder == null, 'Only one of imageBuilder or sizedImageBuilder may be specified.'); /// A delegate that controls how link and `pre` elements behave. final MarkdownBuilderDelegate delegate; + final bool shrinkWrapHorizontal; + /// If true, the text is selectable. /// /// Defaults to false. @@ -493,9 +496,9 @@ class MarkdownBuilder implements md.NodeVisitor { final Wrap wrap = Wrap(children: mergedTexts.map((w) { return w is SelectableText ? Row( - mainAxisSize: MainAxisSize.max, + mainAxisSize: shrinkWrapHorizontal ? MainAxisSize.min : MainAxisSize.max, children: [ - Expanded(child: w) + Flexible(child: w) ] ) : w; }).toList()); diff --git a/packages/flutter_markdown/lib/src/widget.dart b/packages/flutter_markdown/lib/src/widget.dart index f20b549bfa56..d341ee526f8c 100644 --- a/packages/flutter_markdown/lib/src/widget.dart +++ b/packages/flutter_markdown/lib/src/widget.dart @@ -301,9 +301,13 @@ abstract class MarkdownWidget extends StatefulWidget { this.listItemCrossAxisAlignment = MarkdownListItemCrossAxisAlignment.baseline, this.softLineBreak = false, - this.customizedMarkdownHandler + this.customizedMarkdownHandler, + this.shrinkWrapHorizontal = false, }); + /// Shrink wrap in vertical axis if true. + final bool shrinkWrapHorizontal; + /// The Markdown to display. final String data; @@ -486,7 +490,8 @@ class _MarkdownWidgetState extends State onSelectionChanged: widget.onSelectionChanged, onTapText: widget.onTapText, softLineBreak: widget.softLineBreak, - customizedMarkdownHandler: widget.customizedMarkdownHandler + customizedMarkdownHandler: widget.customizedMarkdownHandler, + shrinkWrapHorizontal: widget.shrinkWrapHorizontal, ); _children = builder.build(astNodes); @@ -562,6 +567,7 @@ class MarkdownBody extends MarkdownWidget { super.paddingBuilders, super.listItemCrossAxisAlignment, this.shrinkWrap = true, + super.shrinkWrapHorizontal, super.fitContent = true, super.softLineBreak, super.customizedMarkdownHandler,