diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index acc93337..3b1875dd 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -49,6 +49,7 @@ breakdown: - Fixed `MessageInput` textField case where `input` is not enabled if the file picked from the camera is null. - Fixed date dividers position/alignment in non reversed `MessageListView`. +- Fixed `MessageListView` not opening to the right initialMessage if `StreamChannel.initialMessageId` is set. ## 2.1.2 diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index 75d45707..a8296231 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -298,8 +298,9 @@ class _MessageListViewState extends State { StreamChannelState? streamChannel; late StreamChatThemeData _streamTheme; - int? get _initialIndex { - if (widget.initialScrollIndex != null) return widget.initialScrollIndex; + int get _initialIndex { + final initialScrollIndex = widget.initialScrollIndex; + if (initialScrollIndex != null) return initialScrollIndex; if (streamChannel!.initialMessageId != null) { final messages = streamChannel!.channel.state!.messages; final totalMessages = messages.length; @@ -312,8 +313,9 @@ class _MessageListViewState extends State { return 0; } - double? get _initialAlignment { - if (widget.initialAlignment != null) return widget.initialAlignment; + double get _initialAlignment { + final initialAlignment = widget.initialAlignment; + if (initialAlignment != null) return initialAlignment; return 0; } @@ -326,8 +328,8 @@ class _MessageListViewState extends State { bool _topPaginationActive = false; bool _bottomPaginationActive = false; - int? initialIndex; - double? initialAlignment; + int initialIndex = 0; + double initialAlignment = 0; List messages = []; @@ -454,10 +456,12 @@ class _MessageListViewState extends State { _inBetweenList = true; }, child: ScrollablePositionedList.separated( - key: ValueKey(initialIndex! + initialAlignment!), + key: _upToDate + ? null + : ValueKey(initialIndex + initialAlignment), itemPositionsListener: _itemPositionListener, - initialScrollIndex: initialIndex ?? 0, - initialAlignment: initialAlignment ?? 0, + initialScrollIndex: initialIndex, + initialAlignment: initialAlignment, physics: widget.scrollPhysics, itemScrollController: _scrollController, reverse: widget.reverse, @@ -1194,6 +1198,13 @@ class _MessageListViewState extends State { initialIndex = _initialIndex; initialAlignment = _initialAlignment; + WidgetsBinding.instance!.addPostFrameCallback((timeStamp) { + _scrollController?.jumpTo( + index: initialIndex, + alignment: initialAlignment, + ); + }); + _messageNewListener = streamChannel!.channel.on(EventType.messageNew).listen((event) { if (_upToDate) {