Add trigger scroll for destination picker and mailbox visibility screen
This commit is contained in:
@@ -99,7 +99,7 @@ abstract class BaseMailboxController extends BaseController {
|
|||||||
teamMailboxesTree.value = tupleTree.value3;
|
teamMailboxesTree.value = tupleTree.value3;
|
||||||
}
|
}
|
||||||
|
|
||||||
void toggleMailboxFolder(MailboxNode selectedMailboxNode) {
|
void toggleMailboxFolder(MailboxNode selectedMailboxNode,ScrollController scrollController) {
|
||||||
final newExpandMode = selectedMailboxNode.expandMode == ExpandMode.COLLAPSE
|
final newExpandMode = selectedMailboxNode.expandMode == ExpandMode.COLLAPSE
|
||||||
? ExpandMode.EXPAND
|
? ExpandMode.EXPAND
|
||||||
: ExpandMode.COLLAPSE;
|
: ExpandMode.COLLAPSE;
|
||||||
@@ -112,11 +112,45 @@ abstract class BaseMailboxController extends BaseController {
|
|||||||
if (personalMailboxTree.value.updateExpandedNode(selectedMailboxNode, newExpandMode) != null) {
|
if (personalMailboxTree.value.updateExpandedNode(selectedMailboxNode, newExpandMode) != null) {
|
||||||
log('toggleMailboxFolder() refresh folderMailboxTree');
|
log('toggleMailboxFolder() refresh folderMailboxTree');
|
||||||
personalMailboxTree.refresh();
|
personalMailboxTree.refresh();
|
||||||
|
final _childrenItems = personalMailboxTree.value.root.childrenItems ?? [];
|
||||||
|
_triggerScrollWhenExpandMailboxFolder(
|
||||||
|
_childrenItems,
|
||||||
|
selectedMailboxNode,
|
||||||
|
scrollController);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (teamMailboxesTree.value.updateExpandedNode(selectedMailboxNode, newExpandMode) != null) {
|
if (teamMailboxesTree.value.updateExpandedNode(selectedMailboxNode, newExpandMode) != null) {
|
||||||
log('toggleMailboxFolder() refresh teamMailboxesTree');
|
log('toggleMailboxFolder() refresh teamMailboxesTree');
|
||||||
teamMailboxesTree.refresh();
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,6 @@ import 'package:jmap_dart_client/jmap/core/id.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
import 'package:model/mailbox/expand_mode.dart';
|
|
||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
||||||
@@ -80,6 +78,8 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
|
|
||||||
List<String> listMailboxNameAsStringExist = <String>[];
|
List<String> listMailboxNameAsStringExist = <String>[];
|
||||||
|
|
||||||
|
final destinationListScrollController = ScrollController();
|
||||||
|
|
||||||
DestinationPickerController(
|
DestinationPickerController(
|
||||||
this._searchMailboxInteractor,
|
this._searchMailboxInteractor,
|
||||||
this._createNewMailboxInteractor,
|
this._createNewMailboxInteractor,
|
||||||
|
|||||||
@@ -207,6 +207,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
|||||||
) {
|
) {
|
||||||
return SingleChildScrollView(
|
return SingleChildScrollView(
|
||||||
physics: const ClampingScrollPhysics(),
|
physics: const ClampingScrollPhysics(),
|
||||||
|
controller: controller.destinationListScrollController,
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
if (actions?.canSearch() == true &&
|
if (actions?.canSearch() == true &&
|
||||||
controller.destinationScreenType.value == DestinationScreenType.destinationPicker)
|
controller.destinationScreenType.value == DestinationScreenType.destinationPicker)
|
||||||
@@ -378,7 +379,8 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
|||||||
mailboxIdAlreadySelected: mailboxIdSelected,
|
mailboxIdAlreadySelected: mailboxIdSelected,
|
||||||
mailboxDisplayed: MailboxDisplayed.destinationPicker)
|
mailboxDisplayed: MailboxDisplayed.destinationPicker)
|
||||||
..addOnClickOpenMailboxNodeAction((node) => _pickMailboxNode(context, node))
|
..addOnClickOpenMailboxNodeAction((node) => _pickMailboxNode(context, node))
|
||||||
..addOnClickExpandMailboxNodeAction((mailboxNode) => controller.toggleMailboxFolder(mailboxNode))
|
..addOnClickExpandMailboxNodeAction((mailboxNode) =>
|
||||||
|
controller.toggleMailboxFolder(mailboxNode, controller.destinationListScrollController))
|
||||||
).build(),
|
).build(),
|
||||||
children: _buildListChildTileWidget(
|
children: _buildListChildTileWidget(
|
||||||
context,
|
context,
|
||||||
|
|||||||
@@ -190,55 +190,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> toggleMailboxFolder(MailboxNode selectedMailboxNode) async {
|
|
||||||
final newExpandMode = selectedMailboxNode.expandMode == ExpandMode.COLLAPSE
|
|
||||||
? ExpandMode.EXPAND
|
|
||||||
: ExpandMode.COLLAPSE;
|
|
||||||
|
|
||||||
if (defaultMailboxTree.value.updateExpandedNode(selectedMailboxNode, newExpandMode) != null) {
|
|
||||||
log('toggleMailboxFolder() refresh defaultMailboxTree');
|
|
||||||
defaultMailboxTree.refresh();
|
|
||||||
final _childrenItems = defaultMailboxTree.value.root.childrenItems ?? [];
|
|
||||||
_triggerScrollWhenExpandMailboxFolder(_childrenItems, selectedMailboxNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (personalMailboxTree.value.updateExpandedNode(selectedMailboxNode, newExpandMode) != null) {
|
|
||||||
log('toggleMailboxFolder() refresh folderMailboxTree');
|
|
||||||
personalMailboxTree.refresh();
|
|
||||||
final _childrenItems = personalMailboxTree.value.root.childrenItems ?? [];
|
|
||||||
_triggerScrollWhenExpandMailboxFolder(_childrenItems, selectedMailboxNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (teamMailboxesTree.value.updateExpandedNode(selectedMailboxNode, newExpandMode) != null) {
|
|
||||||
log('toggleMailboxFolder() refresh teamMailboxesTree');
|
|
||||||
teamMailboxesTree.refresh();
|
|
||||||
final _childrenItems = teamMailboxesTree.value.root.childrenItems ?? [];
|
|
||||||
_triggerScrollWhenExpandMailboxFolder(_childrenItems, selectedMailboxNode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _triggerScrollWhenExpandMailboxFolder(List<MailboxNode> childrenItems, MailboxNode selectedMailboxNode) async {
|
|
||||||
await Future.delayed(const Duration(milliseconds: 200));
|
|
||||||
final _lastItem = childrenItems.last;
|
|
||||||
|
|
||||||
if (selectedMailboxNode.expandMode == ExpandMode.COLLAPSE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_lastItem.mailboxNameAsString.contains(selectedMailboxNode.mailboxNameAsString)) {
|
|
||||||
mailboxListScrollController.animateTo(
|
|
||||||
mailboxListScrollController.position.maxScrollExtent,
|
|
||||||
duration: const Duration(milliseconds: 200),
|
|
||||||
curve: Curves.easeInToLinear);
|
|
||||||
} else {
|
|
||||||
mailboxListScrollController.animateTo(
|
|
||||||
mailboxListScrollController.offset + 100,
|
|
||||||
duration: const Duration(milliseconds: 200),
|
|
||||||
curve: Curves.easeInToLinear);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void handleScrollEnable() {
|
void handleScrollEnable() {
|
||||||
isMailboxListScrollable.value = mailboxListScrollController.hasClients && mailboxListScrollController.position.maxScrollExtent > 0;
|
isMailboxListScrollable.value = mailboxListScrollController.hasClients && mailboxListScrollController.position.maxScrollExtent > 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -345,7 +345,8 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
);
|
);
|
||||||
})
|
})
|
||||||
..addOnClickOpenMailboxNodeAction((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
..addOnClickOpenMailboxNodeAction((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
||||||
..addOnClickExpandMailboxNodeAction((mailboxNode) => controller.toggleMailboxFolder(mailboxNode))
|
..addOnClickExpandMailboxNodeAction((mailboxNode) =>
|
||||||
|
controller.toggleMailboxFolder(mailboxNode, controller.mailboxListScrollController))
|
||||||
..addOnSelectMailboxNodeAction((mailboxNode) => controller.selectMailboxNode(mailboxNode))
|
..addOnSelectMailboxNodeAction((mailboxNode) => controller.selectMailboxNode(mailboxNode))
|
||||||
).build()),
|
).build()),
|
||||||
children: _buildListChildTileWidget(context, mailboxNode)
|
children: _buildListChildTileWidget(context, mailboxNode)
|
||||||
|
|||||||
@@ -299,7 +299,8 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
lastNode: lastNode,
|
lastNode: lastNode,
|
||||||
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value)
|
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value)
|
||||||
..addOnClickOpenMailboxNodeAction((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
..addOnClickOpenMailboxNodeAction((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
||||||
..addOnClickExpandMailboxNodeAction((mailboxNode) => controller.toggleMailboxFolder(mailboxNode))
|
..addOnClickExpandMailboxNodeAction((mailboxNode) =>
|
||||||
|
controller.toggleMailboxFolder(mailboxNode, controller.mailboxListScrollController))
|
||||||
..addOnClickOpenMenuMailboxNodeAction((position, mailboxNode) {
|
..addOnClickOpenMenuMailboxNodeAction((position, mailboxNode) {
|
||||||
openMailboxMenuActionOnWeb(
|
openMailboxMenuActionOnWeb(
|
||||||
context,
|
context,
|
||||||
|
|||||||
+6
-2
@@ -141,14 +141,18 @@ class MailboxVisibilityView extends GetWidget<MailboxVisibilityController>
|
|||||||
parent: MailBoxVisibilityFolderTileBuilder(
|
parent: MailBoxVisibilityFolderTileBuilder(
|
||||||
_imagePaths,
|
_imagePaths,
|
||||||
mailboxNode,
|
mailboxNode,
|
||||||
onClickExpandMailboxNodeAction: controller.toggleMailboxFolder,
|
onClickExpandMailboxNodeAction: (mailboxNode) {
|
||||||
|
controller.toggleMailboxFolder(mailboxNode, controller.mailboxListScrollController);
|
||||||
|
},
|
||||||
onClickSubscribeMailboxAction: controller.subscribeMailbox
|
onClickSubscribeMailboxAction: controller.subscribeMailbox
|
||||||
),
|
),
|
||||||
children: _buildListChildTileWidget(context, mailboxNode)).build()
|
children: _buildListChildTileWidget(context, mailboxNode)).build()
|
||||||
: MailBoxVisibilityFolderTileBuilder(
|
: MailBoxVisibilityFolderTileBuilder(
|
||||||
_imagePaths,
|
_imagePaths,
|
||||||
mailboxNode,
|
mailboxNode,
|
||||||
onClickExpandMailboxNodeAction: controller.toggleMailboxFolder,
|
onClickExpandMailboxNodeAction: (mailboxNode) {
|
||||||
|
controller.toggleMailboxFolder(mailboxNode, controller.mailboxListScrollController);
|
||||||
|
},
|
||||||
onClickSubscribeMailboxAction: controller.subscribeMailbox
|
onClickSubscribeMailboxAction: controller.subscribeMailbox
|
||||||
))
|
))
|
||||||
.toList() ?? <Widget>[];
|
.toList() ?? <Widget>[];
|
||||||
|
|||||||
Reference in New Issue
Block a user