TF-1156: [Presentation] Auto scroll mailbox list while dragging and drop
This commit is contained in:
@@ -1162,4 +1162,25 @@ class MailboxController extends BaseMailboxController {
|
||||
_cancelSelectMailbox();
|
||||
mailboxDashBoardController.closeMailboxMenuDrawer();
|
||||
}
|
||||
|
||||
void autoScrollTop() {
|
||||
mailboxListScrollController.animateTo(
|
||||
mailboxListScrollController.position.minScrollExtent,
|
||||
duration: const Duration(seconds: 1),
|
||||
curve: Curves.easeInToLinear);
|
||||
}
|
||||
|
||||
void autoScrollBottom() {
|
||||
mailboxListScrollController.animateTo(
|
||||
mailboxListScrollController.position.maxScrollExtent,
|
||||
duration: const Duration(seconds: 1),
|
||||
curve: Curves.easeInToLinear);
|
||||
}
|
||||
|
||||
void stopAutoScroll() {
|
||||
mailboxListScrollController.animateTo(
|
||||
mailboxListScrollController.offset,
|
||||
duration: const Duration(milliseconds: 300),
|
||||
curve: Curves.fastOutSlowIn);
|
||||
}
|
||||
}
|
||||
@@ -150,7 +150,9 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
||||
}
|
||||
|
||||
Widget _buildListMailbox(BuildContext context) {
|
||||
return SingleChildScrollView(
|
||||
return Stack(
|
||||
children: [
|
||||
SingleChildScrollView(
|
||||
controller: controller.mailboxListScrollController,
|
||||
key: const PageStorageKey('mailbox_list'),
|
||||
physics: const ClampingScrollPhysics(),
|
||||
@@ -194,6 +196,26 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
||||
? _buildMailboxCategory(context, MailboxCategories.folders, controller.folderRootNode)
|
||||
: const SizedBox.shrink()),
|
||||
])
|
||||
),
|
||||
Obx(() => controller.mailboxDashBoardController.isDraggingMailbox
|
||||
? Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: InkWell(
|
||||
onTap: () {},
|
||||
onHover: (value) => value ? controller.autoScrollTop() : controller.stopAutoScroll(),
|
||||
child: Container(
|
||||
height: 40)))
|
||||
: const SizedBox.shrink()),
|
||||
Obx(() => controller.mailboxDashBoardController.isDraggingMailbox
|
||||
? Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: InkWell(
|
||||
onTap: () {},
|
||||
onHover: (value) => value ? controller.autoScrollBottom() : controller.stopAutoScroll(),
|
||||
child: Container(
|
||||
height: 40)))
|
||||
: const SizedBox.shrink()),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
+7
@@ -155,6 +155,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
final viewStateMarkAsReadMailbox = Rx<Either<Failure, Success>>(Right(UIState.idle));
|
||||
final vacationResponse = Rxn<VacationResponse>();
|
||||
final routerParameters = Rxn<Map<String, String?>>();
|
||||
final _isDraggingMailbox = RxBool(false);
|
||||
Session? sessionCurrent;
|
||||
Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
|
||||
Map<MailboxId, PresentationMailbox> mapMailboxById = {};
|
||||
@@ -1541,6 +1542,12 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
spamReportController.storeSpamReportStateAction(_storeSpamReportState);
|
||||
}
|
||||
|
||||
void onDragMailbox(bool isDragging) {
|
||||
_isDraggingMailbox.value = isDragging;
|
||||
}
|
||||
|
||||
bool get isDraggingMailbox => _isDraggingMailbox.value;
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_emailReceiveManager.closeEmailReceiveManagerStream();
|
||||
|
||||
@@ -965,4 +965,8 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
}
|
||||
_navigationRouter = null;
|
||||
}
|
||||
|
||||
void onDragMailBox(bool isDrag) {
|
||||
mailboxDashBoardController.onDragMailbox(isDrag);
|
||||
}
|
||||
}
|
||||
@@ -373,7 +373,10 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
dragAnchorStrategy: pointerDragAnchorStrategy,
|
||||
onDragStarted: () {
|
||||
controller.calculateDragValue(currentPresentationEmail);
|
||||
controller.onDragMailBox(true);
|
||||
},
|
||||
onDragEnd: (_) => controller.onDragMailBox(false),
|
||||
onDraggableCanceled: (_,__) => controller.onDragMailBox(false),
|
||||
));
|
||||
}),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user