From 9303fee0dec4646846af79ac71566c5c9d27bec0 Mon Sep 17 00:00:00 2001 From: Henry-Hiles Date: Mon, 18 May 2026 10:49:31 -0400 Subject: [PATCH] fix memberships constantly reloading --- lib/controllers/room_chat_controller.dart | 2 +- lib/widgets/chat_page/event_text.dart | 3 ++- .../lazy_loading/message_displayname.dart | 3 ++- lib/widgets/chat_page/room_chat.dart | 14 +++++++++----- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/controllers/room_chat_controller.dart b/lib/controllers/room_chat_controller.dart index e4e4a72..82d5da4 100644 --- a/lib/controllers/room_chat_controller.dart +++ b/lib/controllers/room_chat_controller.dart @@ -61,7 +61,7 @@ class RoomChatController extends AsyncNotifier> { loadOlder(); } - return room.timeline + return room.timeline.reversed .map( (timeline) => room.events.firstWhereOrNull( (event) => event.rowId == timeline.eventRowId, diff --git a/lib/widgets/chat_page/event_text.dart b/lib/widgets/chat_page/event_text.dart index bc9e984..924dd79 100644 --- a/lib/widgets/chat_page/event_text.dart +++ b/lib/widgets/chat_page/event_text.dart @@ -1,3 +1,4 @@ +import "dart:convert"; import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:flutter/material.dart"; import "package:nexus/models/event.dart"; @@ -19,6 +20,6 @@ class EventText extends StatelessWidget { @override Widget build(BuildContext context) { - return Text(event.eventId); // NEXT TODO + return Text(json.encode(event.toJson())); // NEXT TODO } } diff --git a/lib/widgets/chat_page/lazy_loading/message_displayname.dart b/lib/widgets/chat_page/lazy_loading/message_displayname.dart index c3bb8e4..9c6abd1 100644 --- a/lib/widgets/chat_page/lazy_loading/message_displayname.dart +++ b/lib/widgets/chat_page/lazy_loading/message_displayname.dart @@ -2,6 +2,7 @@ import "package:flutter/material.dart"; import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:nexus/controllers/author_controller.dart"; import "package:nexus/helpers/extensions/better_when.dart"; +import "package:nexus/helpers/extensions/get_localpart.dart"; import "package:nexus/helpers/extensions/show_user_popover.dart"; import "package:nexus/models/event.dart"; @@ -29,7 +30,7 @@ class MessageDisplayname extends ConsumerWidget { ) : null, child: Text( - "${membership.displayName}${event.pmp == null ? "" : " (via ${event.sender})"}", + "${membership.displayName ?? event.sender.localpart}${event.pmp == null ? "" : " (via ${event.sender})"}", style: style, overflow: TextOverflow.ellipsis, ), diff --git a/lib/widgets/chat_page/room_chat.dart b/lib/widgets/chat_page/room_chat.dart index 443ac68..dbd6f44 100644 --- a/lib/widgets/chat_page/room_chat.dart +++ b/lib/widgets/chat_page/room_chat.dart @@ -45,8 +45,11 @@ class RoomChat extends HookConsumerWidget { final memberListOpened = useState(showMembersByDefault); final listController = useRef(ListController()); - final scrollController = useScrollController(); - // TODO: Do things on scroll to top or bottom + final scrollController = useScrollController( + onAttach: (position) => position.addListener(() { + // TODO: Do things on scroll to top or bottom + }), + ); final userId = ref.watch(ClientStateController.provider)?.userId; final roomId = ref.watch( @@ -308,8 +311,12 @@ class RoomChat extends HookConsumerWidget { child: switch (ref.watch(controllerProvider)) { AsyncData(:final value) || AsyncLoading(:final value?) => CustomScrollView( + reverse: true, controller: scrollController, slivers: [ + SliverPadding( + padding: EdgeInsetsGeometry.only(bottom: 64), + ), SuperSliverList.builder( listController: listController.value, itemCount: value.length, @@ -334,9 +341,6 @@ class RoomChat extends HookConsumerWidget { isFlashing: false, ), ), - SliverPadding( - padding: EdgeInsetsGeometry.only(bottom: 64), - ), ], ), AsyncLoading() => Loading(),