diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index b2b2c12f..eef437bf 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -275,9 +275,19 @@ class ChatController extends State { if (timeline?.allowNewEvent == false || scrollController.position.pixels > 0 && _scrolledUp == false) { setState(() => _scrolledUp = true); - } else if (scrollController.position.pixels == 0 && _scrolledUp == true) { + } else if (scrollController.position.pixels <= 0 && _scrolledUp == true) { setState(() => _scrolledUp = false); } + + if (scrollController.position.pixels == 0 || + scrollController.position.pixels == 64) { + requestFuture(); + } else if (scrollController.position.pixels == + scrollController.position.maxScrollExtent || + scrollController.position.pixels + 64 == + scrollController.position.maxScrollExtent) { + requestHistory(); + } } void _loadDraft() async { @@ -904,7 +914,7 @@ class ChatController extends State { } await scrollController.scrollToIndex( eventIndex, - preferPosition: AutoScrollPosition.end, + preferPosition: AutoScrollPosition.middle, ); _updateScrollController(); } diff --git a/lib/pages/chat/chat_event_list.dart b/lib/pages/chat/chat_event_list.dart index 2fd09473..848b4692 100644 --- a/lib/pages/chat/chat_event_list.dart +++ b/lib/pages/chat/chat_event_list.dart @@ -53,18 +53,11 @@ class ChatEventList extends StatelessWidget { ); } if (controller.timeline!.canRequestFuture) { - return Builder( - builder: (context) { - WidgetsBinding.instance.addPostFrameCallback( - (_) => controller.requestFuture(), - ); - return Center( - child: IconButton( - onPressed: controller.requestFuture, - icon: const Icon(Icons.refresh_outlined), - ), - ); - }, + return Center( + child: IconButton( + onPressed: controller.requestFuture, + icon: const Icon(Icons.refresh_outlined), + ), ); } return Column( @@ -84,18 +77,11 @@ class ChatEventList extends StatelessWidget { ); } if (controller.timeline!.canRequestHistory) { - return Builder( - builder: (context) { - WidgetsBinding.instance.addPostFrameCallback( - (_) => controller.requestHistory(), - ); - return Center( - child: IconButton( - onPressed: controller.requestHistory, - icon: const Icon(Icons.refresh_outlined), - ), - ); - }, + return Center( + child: IconButton( + onPressed: controller.requestHistory, + icon: const Icon(Icons.refresh_outlined), + ), ); } return const SizedBox.shrink();