TF-3704 Fix menu bounces when collapse/expand folder

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-05-07 02:53:37 +07:00
committed by Dat H. Pham
parent f2e854c2f0
commit aca0538b6b
16 changed files with 367 additions and 281 deletions
@@ -25,7 +25,6 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailb
import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/duplicate_name_validator.dart';
@@ -159,34 +158,6 @@ class DestinationPickerController extends BaseMailboxController {
}
}
void toggleMailboxCategories(MailboxCategories categories) {
switch(categories) {
case MailboxCategories.exchange:
final newExpandMode = mailboxCategoriesExpandMode.value.defaultMailbox == ExpandMode.EXPAND
? ExpandMode.COLLAPSE
: ExpandMode.EXPAND;
mailboxCategoriesExpandMode.value.defaultMailbox = newExpandMode;
mailboxCategoriesExpandMode.refresh();
break;
case MailboxCategories.personalFolders:
final newExpandMode = mailboxCategoriesExpandMode.value.personalFolders == ExpandMode.EXPAND
? ExpandMode.COLLAPSE
: ExpandMode.EXPAND;
mailboxCategoriesExpandMode.value.personalFolders = newExpandMode;
mailboxCategoriesExpandMode.refresh();
break;
case MailboxCategories.teamMailboxes:
final newExpandMode = mailboxCategoriesExpandMode.value.teamMailboxes == ExpandMode.EXPAND
? ExpandMode.COLLAPSE
: ExpandMode.EXPAND;
mailboxCategoriesExpandMode.value.teamMailboxes = newExpandMode;
mailboxCategoriesExpandMode.refresh();
break;
default:
return;
}
}
bool isSearchActive() => searchState.value.searchStatus == SearchStatus.ACTIVE;
void enableSearch() {
@@ -27,6 +27,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_action
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_displayed.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_category_widget.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_item_widget.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/create_mailbox_name_input_decoration_builder.dart';
import 'package:tmail_ui_user/features/thread/presentation/widgets/search_app_bar_widget.dart';
@@ -341,16 +342,20 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
} else {
return Column(
children: [
buildHeaderMailboxCategory(
context,
controller.responsiveUtils,
controller.imagePaths,
categories,
controller,
toggleMailboxCategories: controller.toggleMailboxCategories,
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
Obx(() => MailboxCategoryWidget(
categories: categories,
expandMode: categories.getExpandMode(
controller.mailboxCategoriesExpandMode.value,
),
onToggleMailboxCategories: (categories, itemKey) =>
controller.toggleMailboxCategories(
categories,
controller.destinationListScrollController,
itemKey,
),
isArrangeLTR: false,
),
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
)),
AnimatedContainer(
duration: const Duration(milliseconds: 400),
child: categories.getExpandMode(controller.mailboxCategoriesExpandMode.value) == ExpandMode.EXPAND
@@ -415,7 +420,12 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
mailboxIdAlreadySelected: mailboxIdSelected,
mailboxDisplayed: MailboxDisplayed.destinationPicker,
onOpenMailboxFolderClick: (node) => _pickMailboxNode(context, node),
onExpandFolderActionClick: (mailboxNode) => controller.toggleMailboxFolder(mailboxNode, controller.destinationListScrollController),
onExpandFolderActionClick: (mailboxNode, itemKey) =>
controller.toggleMailboxFolder(
mailboxNode,
controller.destinationListScrollController,
itemKey,
),
),
children: _buildListChildTileWidget(
context,