Add trigger scroll for destination picker and mailbox visibility screen

This commit is contained in:
HuyNguyen
2023-02-27 14:17:35 +07:00
committed by Dat Vu
parent 6a49b78e95
commit 6e2f57f69b
7 changed files with 50 additions and 57 deletions
+35 -1
View File
@@ -99,7 +99,7 @@ abstract class BaseMailboxController extends BaseController {
teamMailboxesTree.value = tupleTree.value3;
}
void toggleMailboxFolder(MailboxNode selectedMailboxNode) {
void toggleMailboxFolder(MailboxNode selectedMailboxNode,ScrollController scrollController) {
final newExpandMode = selectedMailboxNode.expandMode == ExpandMode.COLLAPSE
? ExpandMode.EXPAND
: ExpandMode.COLLAPSE;
@@ -112,11 +112,45 @@ abstract class BaseMailboxController extends BaseController {
if (personalMailboxTree.value.updateExpandedNode(selectedMailboxNode, newExpandMode) != null) {
log('toggleMailboxFolder() refresh folderMailboxTree');
personalMailboxTree.refresh();
final _childrenItems = personalMailboxTree.value.root.childrenItems ?? [];
_triggerScrollWhenExpandMailboxFolder(
_childrenItems,
selectedMailboxNode,
scrollController);
}
if (teamMailboxesTree.value.updateExpandedNode(selectedMailboxNode, newExpandMode) != null) {
log('toggleMailboxFolder() refresh teamMailboxesTree');
teamMailboxesTree.refresh();
final _childrenItems = teamMailboxesTree.value.root.childrenItems ?? [];
_triggerScrollWhenExpandMailboxFolder(
_childrenItems,
selectedMailboxNode,
scrollController);
}
}
void _triggerScrollWhenExpandMailboxFolder(
List<MailboxNode> childrenItems,
MailboxNode selectedMailboxNode,
ScrollController scrollController) async {
await Future.delayed(const Duration(milliseconds: 200));
final _lastItem = childrenItems.last;
if (selectedMailboxNode.expandMode == ExpandMode.COLLAPSE) {
return;
}
if (_lastItem.mailboxNameAsString.contains(selectedMailboxNode.mailboxNameAsString)) {
scrollController.animateTo(
scrollController.position.maxScrollExtent,
duration: const Duration(milliseconds: 200),
curve: Curves.easeInToLinear);
} else {
scrollController.animateTo(
scrollController.offset + 100,
duration: const Duration(milliseconds: 200),
curve: Curves.easeInToLinear);
}
}