fix memberships constantly reloading

This commit is contained in:
Henry Hiles 2026-05-18 10:49:31 -04:00
commit 9303fee0de
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
4 changed files with 14 additions and 8 deletions

View file

@ -61,7 +61,7 @@ class RoomChatController extends AsyncNotifier<IList<Event>> {
loadOlder(); loadOlder();
} }
return room.timeline return room.timeline.reversed
.map( .map(
(timeline) => room.events.firstWhereOrNull( (timeline) => room.events.firstWhereOrNull(
(event) => event.rowId == timeline.eventRowId, (event) => event.rowId == timeline.eventRowId,

View file

@ -1,3 +1,4 @@
import "dart:convert";
import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:flutter/material.dart"; import "package:flutter/material.dart";
import "package:nexus/models/event.dart"; import "package:nexus/models/event.dart";
@ -19,6 +20,6 @@ class EventText extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Text(event.eventId); // NEXT TODO return Text(json.encode(event.toJson())); // NEXT TODO
} }
} }

View file

@ -2,6 +2,7 @@ import "package:flutter/material.dart";
import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/controllers/author_controller.dart"; import "package:nexus/controllers/author_controller.dart";
import "package:nexus/helpers/extensions/better_when.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/helpers/extensions/show_user_popover.dart";
import "package:nexus/models/event.dart"; import "package:nexus/models/event.dart";
@ -29,7 +30,7 @@ class MessageDisplayname extends ConsumerWidget {
) )
: null, : null,
child: Text( child: Text(
"${membership.displayName}${event.pmp == null ? "" : " (via ${event.sender})"}", "${membership.displayName ?? event.sender.localpart}${event.pmp == null ? "" : " (via ${event.sender})"}",
style: style, style: style,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
), ),

View file

@ -45,8 +45,11 @@ class RoomChat extends HookConsumerWidget {
final memberListOpened = useState<bool>(showMembersByDefault); final memberListOpened = useState<bool>(showMembersByDefault);
final listController = useRef(ListController()); final listController = useRef(ListController());
final scrollController = useScrollController(); final scrollController = useScrollController(
// TODO: Do things on scroll to top or bottom onAttach: (position) => position.addListener(() {
// TODO: Do things on scroll to top or bottom
}),
);
final userId = ref.watch(ClientStateController.provider)?.userId; final userId = ref.watch(ClientStateController.provider)?.userId;
final roomId = ref.watch( final roomId = ref.watch(
@ -308,8 +311,12 @@ class RoomChat extends HookConsumerWidget {
child: switch (ref.watch(controllerProvider)) { child: switch (ref.watch(controllerProvider)) {
AsyncData(:final value) || AsyncData(:final value) ||
AsyncLoading(:final value?) => CustomScrollView( AsyncLoading(:final value?) => CustomScrollView(
reverse: true,
controller: scrollController, controller: scrollController,
slivers: [ slivers: [
SliverPadding(
padding: EdgeInsetsGeometry.only(bottom: 64),
),
SuperSliverList.builder( SuperSliverList.builder(
listController: listController.value, listController: listController.value,
itemCount: value.length, itemCount: value.length,
@ -334,9 +341,6 @@ class RoomChat extends HookConsumerWidget {
isFlashing: false, isFlashing: false,
), ),
), ),
SliverPadding(
padding: EdgeInsetsGeometry.only(bottom: 64),
),
], ],
), ),
AsyncLoading() => Loading(), AsyncLoading() => Loading(),