Merge pull request #632 from GetStream/hotfix/messageList
fix(ui): open `MessageListView` at a specific message
This commit is contained in:
@@ -49,6 +49,7 @@ breakdown:
|
|||||||
- Fixed `MessageInput` textField case where `input` is not enabled if the file picked from the
|
- Fixed `MessageInput` textField case where `input` is not enabled if the file picked from the
|
||||||
camera is null.
|
camera is null.
|
||||||
- Fixed date dividers position/alignment in non reversed `MessageListView`.
|
- 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
|
## 2.1.2
|
||||||
|
|
||||||
|
|||||||
@@ -298,8 +298,9 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
StreamChannelState? streamChannel;
|
StreamChannelState? streamChannel;
|
||||||
late StreamChatThemeData _streamTheme;
|
late StreamChatThemeData _streamTheme;
|
||||||
|
|
||||||
int? get _initialIndex {
|
int get _initialIndex {
|
||||||
if (widget.initialScrollIndex != null) return widget.initialScrollIndex;
|
final initialScrollIndex = widget.initialScrollIndex;
|
||||||
|
if (initialScrollIndex != null) return initialScrollIndex;
|
||||||
if (streamChannel!.initialMessageId != null) {
|
if (streamChannel!.initialMessageId != null) {
|
||||||
final messages = streamChannel!.channel.state!.messages;
|
final messages = streamChannel!.channel.state!.messages;
|
||||||
final totalMessages = messages.length;
|
final totalMessages = messages.length;
|
||||||
@@ -312,8 +313,9 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
double? get _initialAlignment {
|
double get _initialAlignment {
|
||||||
if (widget.initialAlignment != null) return widget.initialAlignment;
|
final initialAlignment = widget.initialAlignment;
|
||||||
|
if (initialAlignment != null) return initialAlignment;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,8 +328,8 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
bool _topPaginationActive = false;
|
bool _topPaginationActive = false;
|
||||||
bool _bottomPaginationActive = false;
|
bool _bottomPaginationActive = false;
|
||||||
|
|
||||||
int? initialIndex;
|
int initialIndex = 0;
|
||||||
double? initialAlignment;
|
double initialAlignment = 0;
|
||||||
|
|
||||||
List<Message> messages = <Message>[];
|
List<Message> messages = <Message>[];
|
||||||
|
|
||||||
@@ -454,10 +456,12 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
_inBetweenList = true;
|
_inBetweenList = true;
|
||||||
},
|
},
|
||||||
child: ScrollablePositionedList.separated(
|
child: ScrollablePositionedList.separated(
|
||||||
key: ValueKey(initialIndex! + initialAlignment!),
|
key: _upToDate
|
||||||
|
? null
|
||||||
|
: ValueKey(initialIndex + initialAlignment),
|
||||||
itemPositionsListener: _itemPositionListener,
|
itemPositionsListener: _itemPositionListener,
|
||||||
initialScrollIndex: initialIndex ?? 0,
|
initialScrollIndex: initialIndex,
|
||||||
initialAlignment: initialAlignment ?? 0,
|
initialAlignment: initialAlignment,
|
||||||
physics: widget.scrollPhysics,
|
physics: widget.scrollPhysics,
|
||||||
itemScrollController: _scrollController,
|
itemScrollController: _scrollController,
|
||||||
reverse: widget.reverse,
|
reverse: widget.reverse,
|
||||||
@@ -1194,6 +1198,13 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
initialIndex = _initialIndex;
|
initialIndex = _initialIndex;
|
||||||
initialAlignment = _initialAlignment;
|
initialAlignment = _initialAlignment;
|
||||||
|
|
||||||
|
WidgetsBinding.instance!.addPostFrameCallback((timeStamp) {
|
||||||
|
_scrollController?.jumpTo(
|
||||||
|
index: initialIndex,
|
||||||
|
alignment: initialAlignment,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
_messageNewListener =
|
_messageNewListener =
|
||||||
streamChannel!.channel.on(EventType.messageNew).listen((event) {
|
streamChannel!.channel.on(EventType.messageNew).listen((event) {
|
||||||
if (_upToDate) {
|
if (_upToDate) {
|
||||||
|
|||||||
Reference in New Issue
Block a user