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();
|
_cancelSelectMailbox();
|
||||||
mailboxDashBoardController.closeMailboxMenuDrawer();
|
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) {
|
Widget _buildListMailbox(BuildContext context) {
|
||||||
return SingleChildScrollView(
|
return Stack(
|
||||||
|
children: [
|
||||||
|
SingleChildScrollView(
|
||||||
controller: controller.mailboxListScrollController,
|
controller: controller.mailboxListScrollController,
|
||||||
key: const PageStorageKey('mailbox_list'),
|
key: const PageStorageKey('mailbox_list'),
|
||||||
physics: const ClampingScrollPhysics(),
|
physics: const ClampingScrollPhysics(),
|
||||||
@@ -194,6 +196,26 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
? _buildMailboxCategory(context, MailboxCategories.folders, controller.folderRootNode)
|
? _buildMailboxCategory(context, MailboxCategories.folders, controller.folderRootNode)
|
||||||
: const SizedBox.shrink()),
|
: 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 viewStateMarkAsReadMailbox = Rx<Either<Failure, Success>>(Right(UIState.idle));
|
||||||
final vacationResponse = Rxn<VacationResponse>();
|
final vacationResponse = Rxn<VacationResponse>();
|
||||||
final routerParameters = Rxn<Map<String, String?>>();
|
final routerParameters = Rxn<Map<String, String?>>();
|
||||||
|
final _isDraggingMailbox = RxBool(false);
|
||||||
Session? sessionCurrent;
|
Session? sessionCurrent;
|
||||||
Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
|
Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
|
||||||
Map<MailboxId, PresentationMailbox> mapMailboxById = {};
|
Map<MailboxId, PresentationMailbox> mapMailboxById = {};
|
||||||
@@ -1541,6 +1542,12 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
spamReportController.storeSpamReportStateAction(_storeSpamReportState);
|
spamReportController.storeSpamReportStateAction(_storeSpamReportState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void onDragMailbox(bool isDragging) {
|
||||||
|
_isDraggingMailbox.value = isDragging;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool get isDraggingMailbox => _isDraggingMailbox.value;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
_emailReceiveManager.closeEmailReceiveManagerStream();
|
_emailReceiveManager.closeEmailReceiveManagerStream();
|
||||||
|
|||||||
@@ -965,4 +965,8 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
}
|
}
|
||||||
_navigationRouter = null;
|
_navigationRouter = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void onDragMailBox(bool isDrag) {
|
||||||
|
mailboxDashBoardController.onDragMailbox(isDrag);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -373,7 +373,10 @@ class ThreadView extends GetWidget<ThreadController>
|
|||||||
dragAnchorStrategy: pointerDragAnchorStrategy,
|
dragAnchorStrategy: pointerDragAnchorStrategy,
|
||||||
onDragStarted: () {
|
onDragStarted: () {
|
||||||
controller.calculateDragValue(currentPresentationEmail);
|
controller.calculateDragValue(currentPresentationEmail);
|
||||||
|
controller.onDragMailBox(true);
|
||||||
},
|
},
|
||||||
|
onDragEnd: (_) => controller.onDragMailBox(false),
|
||||||
|
onDraggableCanceled: (_,__) => controller.onDragMailBox(false),
|
||||||
));
|
));
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user