CkCommentSheet<T> class
A generic, recursively-nested comment/reply list with built-in expand/collapse-replies state, connector-line drawing, and pagination — built on top of CkListView for the outer scroll/refresh/load-more mechanics.
T is your comment model; this widget has no knowledge of its shape.
- Inheritance
-
- Object
- DiagnosticableTree
- Widget
- StatefulWidget
- CkCommentSheet
- Available extensions
Constructors
-
CkCommentSheet({Key? key, required List<
T> items, required CkRepliesExtractor<T> repliesOf, required CkIdExtractor<T> idOf, required CkCommentContentBuilder<T> itemBuilder, required CkCommentAvatarBuilder<T> avatarBuilder, required CkCommentReplyActionBuilder<T> replyActionBuilder, required CkCommentReactionBuilder<T> reactionBuilder, WidgetBuilder? previewHeaderBuilder, void onRefresh()?, void onLoadMore(int page)?, void onLoadMoreReplies(T parent, int page)?, bool isLoading = false, bool isLoadDone = false, int replyPageSize = 2, CkAvatarSizeForDepth avatarSizeForDepth = _defaultAvatarSizeForDepth, bool exclusiveReplyExpansion = true, ScrollController? scrollController, EdgeInsetsGeometry? padding, WidgetBuilder? dividerBuilder, double gap = 8, double itemBottomSpacing = 16, Color? accentColor, Color? dividerColor, TextStyle? toggleTextStyle, T? replyTarget, void onSend(String text, T? replyTo)?, Widget sendButtonBuilder(VoidCallback onTap)?, CkSendButtonPosition sendButtonPosition = CkSendButtonPosition.footer, bool showComposer = true, String composerHintText = 'Write a comment...', double composerMinHeight = 100, double composerFocusedHeight = 160, double composerMaximizedHeightFraction = 0.5, Color? composerBackgroundColor, void composerOnChanged(String value)?, Widget composerContainerBuilder(BuildContext context, Widget textField, bool isFocused)?, int? composerMaxLength, int? composerMaxWords, int composerMinLength = 0, int composerMinWords = 0, TextStyle? composerCounterTextStyle, CkMultilineHintLimitBuilder? composerLimitHintBuilder}) -
const
Properties
- accentColor → Color?
-
Color used for the "View replies" / "Hide replies" icon and text.
Defaults to
Theme.of(context).colorScheme.primary.final -
avatarBuilder
→ CkCommentAvatarBuilder<
T> -
final
- avatarSizeForDepth → CkAvatarSizeForDepth
-
final
- center → Widget
-
Available on Widget, provided by the Alignments extension
no setter - composerBackgroundColor → Color?
-
final
- composerContainerBuilder → Widget Function(BuildContext context, Widget textField, bool isFocused)?
-
Wraps the composer's text field with its container chrome (background,
border radius, padding, shadow, etc). Defaults to a plain white rounded
card if not provided.
final
- composerCounterTextStyle → TextStyle?
-
Text style for the word/character count indicators.
final
- composerFocusedHeight → double
-
Height of the composer text box when focused but not maximized.
final
-
Builds the composer's toolbar. If null, no toolbar is shown.
final
- composerHintText → String
-
final
- composerLimitHintBuilder → CkMultilineHintLimitBuilder?
-
Custom builder for limit hints.
final
- composerMaximizedHeightFraction → double
-
Fraction of the screen height used when the composer is maximized.
final
- composerMaxLength → int?
-
Maximum characters allowed in the composer text field.
final
- composerMaxWords → int?
-
Maximum words allowed in the composer text field.
final
- composerMinHeight → double
-
Height of the composer text box when not focused.
final
- composerMinLength → int
-
Minimum characters required in the composer text field.
final
- composerMinWords → int
-
Minimum words required in the composer text field.
final
- composerOnChanged → void Function(String value)?
-
Called on every composer text change.
final
- dividerBuilder → WidgetBuilder?
-
Overrides the default divider rendered after every item/reply.
final
- dividerColor → Color?
-
Color used for connector lines and the default divider.
Defaults to
Theme.of(context).dividerColor.final - end → Widget
-
Available on Widget, provided by the Alignments extension
no setter - exclusiveReplyExpansion → bool
-
When true (default), expanding the replies of a top-level item
collapses the currently-expanded top-level item, if any. Nested
expansions within the same top-level subtree are unaffected.
final
- gap → double
-
Horizontal gap between the avatar column and its content.
final
- hashCode → int
-
The hash code for this object.
no setterinherited
-
idOf
→ CkIdExtractor<
T> -
final
- isLoadDone → bool
-
final
- isLoading → bool
-
final
- itemBottomSpacing → double
-
Vertical space after each top-level item (and its expanded replies)
before the next one.
final
-
itemBuilder
→ CkCommentContentBuilder<
T> -
final
-
items
→ List<
T> -
The top-level items (e.g. comments on a post).
final
- key → Key?
-
Controls how one widget replaces another widget in the tree.
finalinherited
- marginZero → Widget
-
Available on Widget, provided by the WidgetMarginX extension
no setter - onLoadMore → void Function(int page)?
-
Pagination for the top-level items list.
final
- onLoadMoreReplies → void Function(T parent, int page)?
-
Pagination for
parent's replies, called whenever more of an already-known parent's replies are requested. The sheet always reveals any already-available items from repliesOf first; use this to fetch more from the network when needed.final - onRefresh → void Function()?
-
final
- onSend → void Function(String text, T? replyTo)?
-
Called when the user taps send.
replyTomirrors replyTarget at the moment of sending:nullmeans "post a new top-level comment", non-null means "reply to this item". The sheet clears its own text field after calling this; you're responsible for clearing any of your own state (e.g. attached media) and persisting the comment.final - padding → EdgeInsetsGeometry?
-
final
- paddingZero → Widget
-
Available on Widget, provided by the WidgetPaddingX extension
no setter - previewHeaderBuilder → WidgetBuilder?
-
Rendered above the list (forwarded to CkListView.topWidget) — e.g. a
"replying to ..." / "comment on post ..." context header.
final
-
reactionBuilder
→ CkCommentReactionBuilder<
T> -
final
-
repliesOf
→ CkRepliesExtractor<
T> -
final
-
replyActionBuilder
→ CkCommentReplyActionBuilder<
T> -
final
- replyPageSize → int
-
How many replies become visible per "View more replies" tap.
final
- replyTarget → T?
-
The item the composer is currently replying to, if any. Pass
nullfor a new top-level comment. This is a controlled prop — update it from your own reactive state when the user taps a replyActionBuilder.final - runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- scrollController → ScrollController?
-
final
- sendButtonBuilder → Widget Function(VoidCallback onTap)?
-
Builds the send button, given the tap handler to wire up. Defaults to
a plain IconButton with Icons.send.
final
- sendButtonPosition → CkSendButtonPosition
-
final
- showComposer → bool
-
Whether the composer is visible. The composer only renders at all when
onSend is provided. Controlled externally — e.g. drive this from your
own show/hide state if you want a collapsible composer.
final
- sliverBox → Widget
-
Available on Widget, provided by the WidgetSliverBoxX extension
no setter - start → Widget
-
Available on Widget, provided by the Alignments extension
no setter - toggleTextStyle → TextStyle?
-
final
Methods
-
createElement(
) → StatefulElement -
Creates a StatefulElement to manage this widget's location in the tree.
inherited
-
createState(
) → State< CkCommentSheet< T> > -
Creates the mutable state for this widget at a given location in the tree.
override
-
debugDescribeChildren(
) → List< DiagnosticsNode> -
Returns a list of DiagnosticsNode objects describing this node's
children.
inherited
-
debugFillProperties(
DiagnosticPropertiesBuilder properties) → void -
Add additional properties associated with the node.
inherited
-
marginAll(
double margin) → Widget -
Available on Widget, provided by the WidgetMarginX extension
-
marginOnly(
{double left = 0.0, double top = 0.0, double right = 0.0, double bottom = 0.0}) → Widget -
Available on Widget, provided by the WidgetMarginX extension
-
marginSymmetric(
{double horizontal = 0.0, double vertical = 0.0}) → Widget -
Available on Widget, provided by the WidgetMarginX extension
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
paddingAll(
double padding) → Widget -
Available on Widget, provided by the WidgetPaddingX extension
-
paddingOnly(
{double left = 0.0, double top = 0.0, double right = 0.0, double bottom = 0.0}) → Widget -
Available on Widget, provided by the WidgetPaddingX extension
-
paddingSymmetric(
{double horizontal = 0.0, double vertical = 0.0}) → Widget -
Available on Widget, provided by the WidgetPaddingX extension
-
toAr(
num width, num height) → Widget -
Available on Widget, provided by the WidgetAspectRatio extension
-
toDiagnosticsNode(
{String? name, DiagnosticsTreeStyle? style}) → DiagnosticsNode -
Returns a debug representation of the object that is used by debugging
tools and by DiagnosticsNode.toStringDeep.
inherited
-
toString(
{DiagnosticLevel minLevel = DiagnosticLevel.info}) → String -
A string representation of this object.
inherited
-
toStringDeep(
{String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug, int wrapWidth = 65}) → String -
Returns a string representation of this node and its descendants.
inherited
-
toStringShallow(
{String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String -
Returns a one-line detailed description of the object.
inherited
-
toStringShort(
) → String -
A short, textual description of this widget.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited