ChatController class
Controller that manages chat state and behavior.
This controller extends ScrollController to provide scrolling functionality while also managing message state, dispatch operations, and failed message handling. It follows the Single Responsibility Principle by focusing on chat-specific state management.
Key responsibilities:
- Message state management
- Scroll behavior control
- Message dispatch and retry logic
- Failed message tracking
- Stream-based event notifications
Example usage:
final controller = ChatController();
controller.addMessage(message);
controller.dispatchMessage(
message,
onDispatch: (msg) async {
// Send message to server
return processedMessage;
},
);
- Inheritance
-
- Object
- ChangeNotifier
- ScrollController
- ChatController
Constructors
- ChatController({CustomSortCallback? customSortCallback})
- Creates a new ChatController.
Properties
- debugLabel → String?
-
A label that is used in the toString output. Intended to aid with
identifying scroll controller instances in debug output.
finalinherited
-
dispatchResultStream
→ Stream<
MessageDispatchResult> -
Stream of message dispatch results.
no setter
- hasClients → bool
-
Whether any ScrollPosition objects have attached themselves to the
ScrollController using the attach method.
no setterinherited
- hashCode → int
-
The hash code for this object.
no setterinherited
- hasListeners → bool
-
Whether any listeners are currently registered.
no setterinherited
- initialScrollOffset → double
-
The initial value to use for offset.
no setterinherited
- isCollapsed → bool
-
Whether the chat is currently in collapsed state.
no setter
- isDisposed → bool
-
Whether this controller has been disposed.
no setter
- keepScrollOffset → bool
-
Each time a scroll completes, save the current scroll offset with
PageStorage and restore it if this controller's scrollable is recreated.
finalinherited
-
messageGroups
→ List<
MessageGroup> -
List of message groups organized by sender and time.
no setter
-
newReceiveMessageStream
→ Stream<
Message> -
Stream of newly received messages.
no setter
- offset → double
-
The current scroll offset of the scrollable widget.
no setterinherited
- onAttach → ScrollControllerCallback?
-
Called when a ScrollPosition is attached to the scroll controller.
finalinherited
- onDetach → ScrollControllerCallback?
-
Called when a ScrollPosition is detached from the scroll controller.
finalinherited
- position → ScrollPosition
-
Returns the attached ScrollPosition, from which the actual scroll offset
of the ScrollView can be obtained.
no setterinherited
-
positions
→ Iterable<
ScrollPosition> -
The currently attached positions.
no setterinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
Methods
-
addListener(
VoidCallback listener) → void -
Register a closure to be called when the object changes.
inherited
-
addMessage(
Message message) → MessageGroup - Adds a message to the chat.
-
animateTo(
double offset, {required Duration duration, required Curve curve}) → Future< void> -
Animates the position from its current value to the given value.
inherited
-
appendMessages(
List< Message> messages) → void - Appends older messages to the beginning of the chat.
-
attach(
ScrollPosition position) → void -
Register the given position with this controller.
inherited
-
containsMessageId(
String messageId) → bool -
createScrollPosition(
ScrollPhysics physics, ScrollContext context, ScrollPosition? oldPosition) → ScrollPosition -
Creates a ScrollPosition for use by a Scrollable widget.
inherited
-
debugFillDescription(
List< String> description) → void -
Add additional information to the given description for use by toString.
inherited
-
detach(
ScrollPosition position) → void -
Unregister the given position with this controller.
inherited
-
dispatchMessage(
Message message, {required MessageDispatchCallback onDispatch}) → Future< MessageDispatchResult> - Dispatches a message through the provided callback.
-
dispose(
) → void -
Discards any resources used by the object. After this is called, the
object is not in a usable state and should be discarded (calls to
addListener will throw after the object is disposed).
override
-
isAtBottom(
{double threshold = 20}) → bool - Checks if the scroll position is at the bottom within a threshold.
-
isDateChangedComparedTo(
Message message, Message other) → bool -
isSameMinute(
DateTime a, DateTime b) → bool -
jumpTo(
double value) → void -
Jumps the scroll position from its current value to the given value,
without animation, and without checking if the new value is in range.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
notifyListeners(
) → void -
Call all the registered listeners.
override
-
removeListener(
VoidCallback listener) → void -
Remove a previously registered closure from the list of closures that are
notified when the object changes.
inherited
-
removeMessageEverywhere(
Message message) → void - Removes a message from all groups and cleans up empty groups.
-
removeMessageFromGroup(
MessageGroup group, Message message) → void -
removeMessageGroupAt(
MessageGroup group, int messageIndex) → void -
retryMessage(
Message message) → Future - Retries a failed message.
-
scrollToBottom(
) → void - Smoothly scrolls to the bottom of the chat.
-
scrollToBottomByValue(
double offset) → void -
scrollToTopByValue(
double offset) → void -
setIsCollapsed(
bool value) → dynamic - Sets the collapsed state of the chat.
-
setMessages(
List< Message> messages) → void - Initializes the chat with a list of messages.
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited