diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index f320f951d..05aa32f58 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -93,6 +93,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM final SubscribeMultipleMailboxInteractor _subscribeMultipleMailboxInteractor; final currentSelectMode = SelectMode.INACTIVE.obs; + final _activeScrollTop = RxBool(false); + final _activeScrollBottom = RxBool(true); final _openMailboxEventController = StreamController(); final mailboxListScrollController = ScrollController(); @@ -130,8 +132,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM _openMailboxEventController.stream.throttleTime(const Duration(milliseconds: 800)).listen((event) { _handleOpenMailbox(event.buildContext, event.presentationMailbox); }); - _initCollapseMailboxCategories(); + mailboxListScrollController.addListener(_mailboxListScrollControllerListener); super.onReady(); } @@ -1127,4 +1129,33 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM } } } + + void _mailboxListScrollControllerListener() { + _handleScrollTop(); + _handleScrollBottom(); + } + + void _handleScrollTop() { + if (mailboxListScrollController.position.pixels == 0) { + _activeScrollTop.value = false; + } + + if (mailboxListScrollController.position.pixels > 40) { + _activeScrollTop.value = true; + } + } + + void _handleScrollBottom() { + if (mailboxListScrollController.position.pixels - mailboxListScrollController.position.maxScrollExtent == 0) { + _activeScrollBottom.value = false; + } + + if (mailboxListScrollController.position.maxScrollExtent - mailboxListScrollController.position.pixels > 40) { + _activeScrollBottom.value = true; + } + } + + bool get activeScrollTop => _activeScrollTop.value; + + bool get activeScrollBottom => _activeScrollBottom.value; } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/mailbox_view_web.dart b/lib/features/mailbox/presentation/mailbox_view_web.dart index 731675cb7..925bcd798 100644 --- a/lib/features/mailbox/presentation/mailbox_view_web.dart +++ b/lib/features/mailbox/presentation/mailbox_view_web.dart @@ -212,7 +212,7 @@ class MailboxView extends GetWidget }) ]) ), - Obx(() => controller.mailboxDashBoardController.isDraggingMailbox + Obx(() => controller.mailboxDashBoardController.isDraggingMailbox && controller.activeScrollTop ? Align( alignment: Alignment.topCenter, child: InkWell( @@ -221,7 +221,7 @@ class MailboxView extends GetWidget child: Container( height: 40))) : const SizedBox.shrink()), - Obx(() => controller.mailboxDashBoardController.isDraggingMailbox + Obx(() => controller.mailboxDashBoardController.isDraggingMailbox && controller.activeScrollBottom ? Align( alignment: Alignment.bottomCenter, child: InkWell( diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index a99b3b38f..7fa014fe1 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -164,6 +164,7 @@ class MailboxDashBoardController extends ReloadableController { final vacationResponse = Rxn(); final routerParameters = Rxn>(); final _isDraggingMailbox = RxBool(false); + final _triggerDropMailbox = RxBool(true); final searchMailboxActivated = RxBool(false); Session? sessionCurrent; Map mapDefaultMailboxIdByRole = {}; @@ -1562,6 +1563,12 @@ class MailboxDashBoardController extends ReloadableController { _isDraggingMailbox.value = isDragging; } + void onTriggerDropMailbox(bool onScroll) { + _triggerDropMailbox.value = onScroll; + } + + bool get triggerDropMailbox => _triggerDropMailbox.value; + bool get isDraggingMailbox => _isDraggingMailbox.value; void _handleSendEmailFailure(SendEmailFailure failure) {