diff --git a/lib/features/base/mixin/expand_folder_trigger_scrollable_mixin.dart b/lib/features/base/mixin/expand_folder_trigger_scrollable_mixin.dart index 18ade8c88..7d86e7aaa 100644 --- a/lib/features/base/mixin/expand_folder_trigger_scrollable_mixin.dart +++ b/lib/features/base/mixin/expand_folder_trigger_scrollable_mixin.dart @@ -1,6 +1,12 @@ import 'package:core/utils/app_logger.dart'; +import 'package:core/utils/platform_info.dart'; import 'package:flutter/material.dart'; import 'package:model/mailbox/expand_mode.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_paywall_extension.dart'; +import 'package:tmail_ui_user/features/quotas/domain/extensions/quota_extensions.dart'; +import 'package:tmail_ui_user/features/quotas/presentation/quotas_controller.dart'; +import 'package:tmail_ui_user/main/routes/route_navigation.dart'; mixin ExpandFolderTriggerScrollableMixin { void triggerScrollWhenExpandFolder( @@ -27,9 +33,9 @@ mixin ExpandFolderTriggerScrollableMixin { final position = renderBox.localToGlobal(Offset.zero); final screenHeight = MediaQuery.of(context).size.height; - const offsetY = 200; + final offsetY = _getOffsetY(); final bottomY = position.dy + renderBox.size.height + offsetY; - log('$runtimeType::_scrollToSelfIfNeeded:position = $position |screenHeight = $screenHeight | bottomY = $bottomY'); + log('$runtimeType::_scrollToSelfIfNeeded:position = $position |screenHeight = $screenHeight | bottomY = $bottomY | offsetY = $offsetY'); if (bottomY > screenHeight) { final scrollOffset = scrollController.offset + bottomY - screenHeight + 40; @@ -41,4 +47,23 @@ mixin ExpandFolderTriggerScrollableMixin { ); } } + + double _getOffsetY() { + try { + final quota = getBinding()?.octetsQuota.value; + final isQuotaViewDisplayed = quota?.storageAvailable ?? false; + + final isPremiumAvailable = getBinding() + ?.validatePremiumIsAvailable() ?? false; + final isIncreaseSpaceButtonDisplayed = + isPremiumAvailable && PlatformInfo.isWeb; + + if (isQuotaViewDisplayed && isIncreaseSpaceButtonDisplayed) return 260; + if (isQuotaViewDisplayed) return 200; + if (isIncreaseSpaceButtonDisplayed) return 150; + return 70; + } catch (_) { + return 70; + } + } }