fix(ui): fix quoted message scroll

This commit is contained in:
Salvatore Giordano
2021-10-26 15:34:20 +02:00
parent 04ca2c6eeb
commit 89f767886a
2 changed files with 8 additions and 13 deletions
@@ -323,9 +323,9 @@ class _PositionedListState extends State<PositionedList> {
final positions = <ItemPosition>[]; final positions = <ItemPosition>[];
RenderViewport? viewport; RenderViewport? viewport;
for (final element in registeredElements.value!) { for (final element in registeredElements.value!) {
final box = element.renderObject as RenderBox; final box = element.renderObject as RenderBox?;
viewport ??= RenderAbstractViewport.of(box) as RenderViewport?; viewport ??= RenderAbstractViewport.of(box) as RenderViewport?;
if (viewport == null) { if (viewport == null || box == null) {
continue; continue;
} }
final key = element.widget.key as IndexedKey; final key = element.widget.key as IndexedKey;
@@ -1062,8 +1062,7 @@ class _MessageListViewState extends State<MessageListView> {
showSendingIndicator: showSendingIndicator, showSendingIndicator: showSendingIndicator,
showUserAvatar: showUserAvatar, showUserAvatar: showUserAvatar,
onQuotedMessageTap: (quotedMessageId) async { onQuotedMessageTap: (quotedMessageId) async {
// ignore: prefer_function_declarations_over_variables if (messages.map((e) => e.id).contains(quotedMessageId)) {
final scrollToIndex = () {
final index = messages.indexWhere((m) => m.id == quotedMessageId); final index = messages.indexWhere((m) => m.id == quotedMessageId);
_scrollController?.scrollTo( _scrollController?.scrollTo(
index: index + 2, // +2 to account for loader and footer index: index + 2, // +2 to account for loader and footer
@@ -1071,16 +1070,12 @@ class _MessageListViewState extends State<MessageListView> {
curve: Curves.easeInOut, curve: Curves.easeInOut,
alignment: 0.1, alignment: 0.1,
); );
};
if (messages.map((e) => e.id).contains(quotedMessageId)) {
scrollToIndex();
} else { } else {
await streamChannel!.loadChannelAtMessage(quotedMessageId).then((_) { await streamChannel!
WidgetsBinding.instance!.addPostFrameCallback((_) { .loadChannelAtMessage(quotedMessageId)
if (messages.map((e) => e.id).contains(quotedMessageId)) { .then((_) async {
scrollToIndex(); initialIndex = 21; // 19 + 2 | 19 is the index of the message
} initialAlignment = 0.1;
});
}); });
} }
}, },