diff --git a/lib/controllers/room_chat_controller.dart b/lib/controllers/room_chat_controller.dart index f37716f..9f4796b 100644 --- a/lib/controllers/room_chat_controller.dart +++ b/lib/controllers/room_chat_controller.dart @@ -51,13 +51,11 @@ class RoomChatController extends AsyncNotifier> { const ISet.empty(), ); - final room = ref.watch( - RoomsController.provider.select((rooms) => rooms[roomId]), - ); + final room = ref.watch(RoomsController.provider)[roomId]; if (room == null) return const IList.empty(); - // While there are under 30 messages, try up to load more messages until there's no more or we have 20 messages. - if (room.hasMore && room.events.length < 30) { + // While there are under 20 messages, try up to load more messages until there's no more or we have 20 messages. + if (room.hasMore && room.events.length < 20) { loadOlder(); } diff --git a/lib/widgets/chat_page/room_chat.dart b/lib/widgets/chat_page/room_chat.dart index a2add10..a637b4f 100644 --- a/lib/widgets/chat_page/room_chat.dart +++ b/lib/widgets/chat_page/room_chat.dart @@ -10,6 +10,7 @@ import "package:nexus/controllers/power_level_controller.dart"; import "package:nexus/controllers/selected_room_controller.dart"; import "package:nexus/controllers/room_chat_controller.dart"; import "package:nexus/controllers/via_controller.dart"; +import "package:nexus/helpers/extensions/better_when.dart"; import "package:nexus/models/configs/power_level_config.dart"; import "package:nexus/models/content/content.dart"; import "package:nexus/models/content/message.dart"; @@ -288,6 +289,30 @@ class RoomChat extends HookConsumerWidget { ].toIList(); } + SuperListView messageView(IList events) => SuperListView.builder( + controller: scrollController, + listController: listController.value, + itemCount: events.length, + itemBuilder: (_, index) => MessageWrapper( + events[index], + EventText( + events[index], + onTapReply: () => listController.value.animateToItem( + index: index, + scrollController: scrollController, + alignment: 0.5, + duration: (_) => Duration(milliseconds: 250), + curve: (_) => Curves.easeInOut, + ), + getEventOptions: getEventOptions, + ), + // TODO: Reimplement grouping + isGrouped: false, + // TODO: Reimplement flashing + isFlashing: false, + ), + ); + return Scaffold( appBar: RoomAppbar( isDesktop: isDesktop, @@ -304,31 +329,9 @@ class RoomChat extends HookConsumerWidget { children: [ Positioned.fill( child: switch (ref.watch(controllerProvider)) { - AsyncData(:final value) || - AsyncLoading(:final value?) => SuperListView.builder( - controller: scrollController, - listController: listController.value, - itemCount: value.length, - itemBuilder: (_, index) => MessageWrapper( - value[index], - EventText( - value[index], - onTapReply: () => listController.value.animateToItem( - index: index, - scrollController: scrollController, - alignment: 0.5, - duration: (_) => Duration(milliseconds: 250), - curve: (_) => Curves.easeInOut, - ), - getEventOptions: getEventOptions, - ), - // TODO: Reimplement grouping - isGrouped: false, - // TODO: Reimplement flashing - isFlashing: false, - ), - ), - AsyncLoading() => Loading(), + AsyncData(:final value) => messageView(value), + AsyncLoading(:final value) => + value == null ? Loading() : messageView(value), AsyncError(:final error, :final stackTrace) => ErrorDialog( error, stackTrace,