Skip to content

Commit 7ae7874

Browse files
authored
Feat(ui): simplify messagelist constructor (#2674)
* Simplify mesagelist constructor * rename listview config and builders * use themeGen on messagelistview theme * Fixed leftover doc issues * improve switch and if statements
1 parent 101cf0f commit 7ae7874

14 files changed

Lines changed: 804 additions & 428 deletions

packages/stream_chat_flutter/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
🛑️ Breaking
88

9+
- `StreamMessageListView` had its large set of configuration and builder parameters reorganized. Behavior flags (e.g. `swipeToReply`, `markReadWhenAtTheBottom`, `showScrollToBottom`, `reverse`, `paginationLimit`, `scrollPhysics`, etc.) moved to `StreamMessageListViewConfiguration`, passed directly as `StreamMessageListView.config`. Custom builder callbacks (`headerBuilder`, `footerBuilder`, `loadingBuilder`, `emptyBuilder`, `errorBuilder`, `messageListBuilder`, `parentMessageBuilder`, `dateDividerBuilder`, `floatingDateDividerBuilder`, `threadSeparatorBuilder`, `unreadMessagesSeparatorBuilder`, `scrollToBottomBuilder`, `paginationLoadingIndicatorBuilder`, `spacingWidgetBuilder`, `systemMessageBuilder`, `ephemeralMessageBuilder`, `moderatedMessageBuilder`) moved to `StreamMessageListViewBuilders`, passed directly as `StreamMessageListView.builders`. The `messageBuilder` parameter is back at the root of the constructor as before.
910
- Bumped `file_picker` to `^11.0.0` to resolve [#2599](https://github.com/GetStream/stream-chat-flutter/issues/2599). Apps depending on `file_picker` directly must also upgrade past `11.0.0`, which replaces the instance-based `FilePicker.platform.*` API with static `FilePicker.*` methods.
1011
- Renamed `StreamMessageComposer.messageInputController` parameter to `messageComposerController`.
1112
- Removed `StreamDraftListView`, `StreamDraftListTile`, `StreamDraftListTileTheme`, and `StreamDraftListTileThemeData` from the SDK. Also removed `StreamChatThemeData.draftListTileTheme`. Refer to the sample app for a reference implementation using `StreamDraftListController` and `PagedValueListView`.

packages/stream_chat_flutter/example/lib/main.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,9 +263,9 @@ class _ChannelPageState extends State<ChannelPage> {
263263
children: <Widget>[
264264
Expanded(
265265
child: StreamMessageListView(
266+
config: const StreamMessageListViewConfiguration(swipeToReply: true),
266267
threadBuilder: (_, parent) => ThreadPage(parent: parent!),
267268
onReplyTap: reply,
268-
swipeToReply: true,
269269
),
270270
),
271271
StreamMessageComposer(

packages/stream_chat_flutter/example/lib/tutorial_part_5.dart

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ import 'package:stream_chat_flutter/stream_chat_flutter.dart';
77
/// Customizing how messages are rendered is another very common use-case that
88
/// the SDK supports easily.
99
///
10-
/// Replacing the built-in message component with your own is done by passing
11-
/// it as a builder function to the [StreamMessageListView] widget.
10+
/// Replacing the built-in message component with your own is done by
11+
/// passing a `messageBuilder` to [StreamMessageListView].
1212
///
13-
/// The message builder function will get the usual [BuildContext] argument
14-
/// as well as the [Message] object and its position inside the list.
13+
/// The builder receives the [BuildContext], the [Message], and the
14+
/// pre-configured [StreamMessageItemProps] with all list-level callbacks
15+
/// already wired in.
1516
///
1617
/// If you look at the code you can see that we use [StreamChat.of] to
1718
/// retrieve the current user so that we can style messages in a different way.
@@ -117,7 +118,7 @@ class ChannelPage extends StatelessWidget {
117118
children: <Widget>[
118119
Expanded(
119120
child: StreamMessageListView(
120-
messageBuilder: _messageBuilder,
121+
messageBuilder: _messageItemBuilder,
121122
),
122123
),
123124
StreamMessageComposer(),
@@ -126,10 +127,10 @@ class ChannelPage extends StatelessWidget {
126127
);
127128
}
128129

129-
Widget _messageBuilder(
130+
Widget _messageItemBuilder(
130131
BuildContext context,
131132
Message message,
132-
StreamMessageItemProps defaultProps,
133+
StreamMessageItemProps props,
133134
) {
134135
final isCurrentUser = StreamChat.of(context).currentUser!.id == message.user!.id;
135136
final textAlign = isCurrentUser ? TextAlign.right : TextAlign.left;
@@ -139,22 +140,12 @@ class ChannelPage extends StatelessWidget {
139140
padding: const EdgeInsets.all(5),
140141
child: DecoratedBox(
141142
decoration: BoxDecoration(
142-
border: Border.all(
143-
color: color,
144-
),
145-
borderRadius: const BorderRadius.all(
146-
Radius.circular(5),
147-
),
143+
border: Border.all(color: color),
144+
borderRadius: const BorderRadius.all(Radius.circular(5)),
148145
),
149146
child: ListTile(
150-
title: Text(
151-
message.text!,
152-
textAlign: textAlign,
153-
),
154-
subtitle: Text(
155-
message.user!.name,
156-
textAlign: textAlign,
157-
),
147+
title: Text(message.text!, textAlign: textAlign),
148+
subtitle: Text(message.user!.name, textAlign: textAlign),
158149
),
159150
),
160151
);

packages/stream_chat_flutter/lib/src/components/stream_chat_component_builders.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ import 'package:stream_chat_flutter/stream_chat_flutter.dart';
33

44
/// Builds the list of component builders for the stream chat components.
55
Iterable<StreamComponentBuilderExtension<Object>> streamChatComponentBuilders({
6+
// ── Channel / thread list ────────────────────────────────────────────────
67
StreamComponentBuilder<StreamChannelListItemProps>? channelListItem,
78
StreamComponentBuilder<StreamThreadListTileProps>? threadListItem,
9+
10+
// ── Message composer ─────────────────────────────────────────────────────
811
StreamComponentBuilder<MessageComposerProps>? messageComposer,
912
StreamComponentBuilder<MessageComposerLeadingProps>? messageComposerLeading,
1013
StreamComponentBuilder<MessageComposerTrailingProps>? messageComposerTrailing,
@@ -16,6 +19,8 @@ Iterable<StreamComponentBuilderExtension<Object>> streamChatComponentBuilders({
1619
StreamComponentBuilder<StreamMessageItemProps>? messageItem,
1720
StreamComponentBuilder<StreamMessageComposerAttachmentListProps>? messageComposerAttachmentList,
1821
StreamComponentBuilder<StreamMessageComposerAttachmentProps>? messageComposerAttachment,
22+
23+
// ── Attachments ──────────────────────────────────────────────────────────
1924
StreamComponentBuilder<StreamImageAttachmentProps>? imageAttachment,
2025
StreamComponentBuilder<StreamVideoAttachmentProps>? videoAttachment,
2126
StreamComponentBuilder<StreamGiphyAttachmentProps>? giphyAttachment,

0 commit comments

Comments
 (0)