see_more 2.2.0
see_more: ^2.2.0 copied to clipboard
Expandable See More/Less text — char/line/word trim, rich spans, auto-linkify URLs, #hashtag / @mention annotations, selectable, controller, fade.
2.2.0 #
- Hashtag / mention / custom annotations. New
annotationsparameter takes a list ofSeeMoreAnnotations — auto-detect and style anyRegExppattern, each independently tappable. ShipsSeeMoreAnnotation.hashtag,.mention, and.urlfactories with sensible defaults. - Annotations compose with
linkify(detected URLs win ties), are preserved across truncation, and read the latestonTapat tap time (no recognizer churn on rebuild). Internally generalizes the URL linkify engine. - Added pubspec
topicsandrepository/issue_tracker, and shields badges in the README. - All additive and backward-compatible — existing
linkify/urlPattern/linkStyle/onLinkTapusage is unchanged.
2.1.1 #
- Shortened
pubspec.yamldescription to fit pub.dev's 60–180 character limit (was 230 characters in 2.1.0 — restored the 10/10 "valid pubspec" pana score). - Added 6 feature screenshots (character trim, fade, rich text, linkify,
selectable, custom button) and an animated demo GIF showing the expand /
collapse cycle. Embedded inline at the top of the README via raw GitHub
URLs. The image files are kept in the repo but excluded from the
published archive via
.pubignoreto keep the package size small.
2.1.0 #
New Features #
SeeMoreWidget.rich(InlineSpan)— new constructor for rich content. Styles, tap recognizers, semantics, andWidgetSpanicons are preserved when the text is truncated mid-span.WidgetSpancounts as one character.linkify: true— auto-detect URLs and render each as a tappable styled span. Customise viaurlPattern,linkStyle,onLinkTap. Works with both constructors. Default pattern matcheshttp(s)://...; trailing sentence punctuation is stripped from each match.selectable: true— wraps the rendered content in aSelectionAreafor long-press selection and platform copy. Inline expand/collapse and link taps continue to work inside the selection region.
Note #
SeeMoreWidget.textis nowString?(wasString) to accommodate the new.richconstructor. The default constructor still requires a non-nulltextargument — behaviour for existing callers is unchanged, but external code readingwidget.textmust now handle the nullable type.
Limitations #
linkifyscans eachTextSpan.textin isolation; URLs split across multiple child spans are not detected.
2.0.0 #
Breaking Changes #
TrimModeenum now has three values:character,line, andword. Any exhaustiveswitchonTrimModein consumer code must add awordcase.
New Features #
SeeMoreController— programmatic expand/collapse from outside the widget. Supportsexpand(),collapse(), andtoggle(). Keeps the widget in sync with tap-based interactions and firesonExpand/onCollapsecallbacks.final ctrl = SeeMoreController(); SeeMoreWidget("...", controller: ctrl) ctrl.expand();TrimMode.word— trim by word count instead of characters or lines. Controlled by the newmaxWordsparameter (default50).SeeMoreWidget("...", trimMode: TrimMode.word, maxWords: 30)expandButtonBuilder— replace the default "See More" span with any widget. The builder receives(BuildContext context, VoidCallback onTap).collapseButtonBuilder— same for the "See Less" affordance. Can be set independently ofexpandButtonBuilder.
Improvements #
- Line-mode TextPainter result is now cached on a
_LineTrimKeyrecord. Repeated builds that don't change text, style, or constraints skip the layout pass entirely. fadeColordefault changed fromscaffoldBackgroundColortocolorScheme.surface, matching the visible container background in Cards, Dialogs, and other surfaces.- Inline "See More" / "See Less"
TextSpans now carrysemanticsLabelso screen readers announce the label without the leading visual-spacing space. - Default expand button (fade mode) is now wrapped in
Semantics(button: true)so assistive technologies identify it as an interactive control. expandButtonSpacingis now validated to be>= 0.- Regex patterns used in trim helpers are compiled once as
static finalconstants instead of on every call. - Source split into focused
partfiles:see_more_state.dart,see_more_builders.dart,see_more_constants.dart. - Tests reorganised into focused files under
test/(74 tests total).
1.0.0 #
Breaking Changes #
- Complete rewrite with new API
- Renamed parameters for clarity:
trimLength→maxCharacterstrimLines→maxLinesseeMoreText→expandTextseeLessText→collapseTextseeMoreStyle→expandTextStyleseeLessStyle→collapseTextStyleenableFade→showFadeEffectfadeLength→fadeHeightseeMoreButtonSpacing→expandButtonSpacing
New Features #
- Fade effect - Gradient fade at text end like Instagram/Twitter (
showFadeEffect: true) - Line-based trimming - Trim by number of lines using
trimMode: TrimMode.line - Word boundary trimming - No more cutting words in half (
trimAtWordBoundary: true) - Ellipsis support - Customizable ellipsis before expand button (
ellipsis: "...") - Callbacks -
onExpandandonCollapsecallbacks for state tracking - Initial state -
initiallyExpandedparameter - Theme integration - Uses theme colors when no style provided
- Text alignment -
textAlignparameter - RTL support -
textDirectionparameter (usesDirectionality.of(context)) - Animation curve -
animationCurveparameter - Accessibility - Semantics wrapper and
textScalerparameter for font scaling - Button spacing -
expandButtonSpacingparameter for fade mode
Bug Fixes #
- Fixed memory leak - TapGestureRecognizer now properly disposed
- Fixed memory leak - TextPainter now properly disposed
- Fixed text cutting mid-word
Other #
- 25 comprehensive unit tests
- Code organized with
part/part offor better maintainability - Requires Flutter
>=3.16.0
0.0.5 #
- added video
0.0.4 #
- minor bug fixes with more attribute
0.0.3 #
- minor bug fixes
0.0.2 #
- Readme updated.
0.0.1 #
- Initial release.