diff --git a/lib/widgets/chat_page/room_chat.dart b/lib/widgets/chat_page/room_chat.dart index 7e875f6..a637b4f 100644 --- a/lib/widgets/chat_page/room_chat.dart +++ b/lib/widgets/chat_page/room_chat.dart @@ -23,8 +23,10 @@ import "package:nexus/widgets/chat_page/event_text.dart"; import "package:nexus/widgets/chat_page/member_list.dart"; import "package:nexus/widgets/chat_page/room_appbar.dart"; import "package:nexus/widgets/chat_page/wrappers/message_wrapper.dart"; +import "package:nexus/widgets/error_dialog.dart"; import "package:nexus/widgets/form_text_input.dart"; import "package:nexus/main.dart"; +import "package:nexus/widgets/loading.dart"; import "package:super_sliver_list/super_sliver_list.dart"; class RoomChat extends HookConsumerWidget { @@ -287,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, @@ -302,35 +328,15 @@ class RoomChat extends HookConsumerWidget { child: Stack( children: [ Positioned.fill( - child: ref - .watch(controllerProvider) - .betterWhen( - data: (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, - ), - ), - ), + child: switch (ref.watch(controllerProvider)) { + AsyncData(:final value) => messageView(value), + AsyncLoading(:final value) => + value == null ? Loading() : messageView(value), + AsyncError(:final error, :final stackTrace) => ErrorDialog( + error, + stackTrace, + ), + }, ), ChatBox( node: composerNode,