TF-4002 Fix scroll have sharp jitter at the end of mailbox list

This commit is contained in:
dab246
2025-09-15 11:09:49 +07:00
committed by Dat H. Pham
parent be79c30b1d
commit 745175e6c4
@@ -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<QuotasController>()?.octetsQuota.value;
final isQuotaViewDisplayed = quota?.storageAvailable ?? false;
final isPremiumAvailable = getBinding<MailboxDashBoardController>()
?.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;
}
}
}