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,50 +150,72 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildListMailbox(BuildContext context) {
|
Widget _buildListMailbox(BuildContext context) {
|
||||||
return SingleChildScrollView(
|
return Stack(
|
||||||
controller: controller.mailboxListScrollController,
|
children: [
|
||||||
key: const PageStorageKey('mailbox_list'),
|
SingleChildScrollView(
|
||||||
physics: const ClampingScrollPhysics(),
|
controller: controller.mailboxListScrollController,
|
||||||
padding: EdgeInsets.only(right: _responsiveUtils.isDesktop(context) ? 16 : 0),
|
key: const PageStorageKey('mailbox_list'),
|
||||||
child: Column(children: [
|
physics: const ClampingScrollPhysics(),
|
||||||
Obx(() {
|
padding: EdgeInsets.only(right: _responsiveUtils.isDesktop(context) ? 16 : 0),
|
||||||
if (controller.isSelectionEnabled() || _responsiveUtils.isDesktop(context)) {
|
child: Column(children: [
|
||||||
return const SizedBox.shrink();
|
Obx(() {
|
||||||
}
|
if (controller.isSelectionEnabled() || _responsiveUtils.isDesktop(context)) {
|
||||||
return _buildUserInformation(context);
|
return const SizedBox.shrink();
|
||||||
}),
|
}
|
||||||
_buildLoadingView(),
|
return _buildUserInformation(context);
|
||||||
AppConfig.appGridDashboardAvailable && _responsiveUtils.isWebNotDesktop(context)
|
}),
|
||||||
? Column(children: [
|
_buildLoadingView(),
|
||||||
_buildAppGridDashboard(context),
|
AppConfig.appGridDashboardAvailable && _responsiveUtils.isWebNotDesktop(context)
|
||||||
const SizedBox(height: 8),
|
? Column(children: [
|
||||||
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
|
_buildAppGridDashboard(context),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
])
|
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
|
||||||
: const SizedBox.shrink(),
|
const SizedBox(height: 8),
|
||||||
Obx(() => controller.defaultMailboxHasChild
|
])
|
||||||
? _buildMailboxCategory(context, MailboxCategories.exchange, controller.defaultRootNode)
|
: const SizedBox.shrink(),
|
||||||
: const SizedBox.shrink()),
|
Obx(() => controller.defaultMailboxHasChild
|
||||||
const SizedBox(height: 8),
|
? _buildMailboxCategory(context, MailboxCategories.exchange, controller.defaultRootNode)
|
||||||
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
|
: const SizedBox.shrink()),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
_buildHeaderMailboxCategory(context, MailboxCategories.folders),
|
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
|
||||||
Row(children: [
|
const SizedBox(height: 8),
|
||||||
Expanded(child: _buildSearchBarWidget(context)),
|
_buildHeaderMailboxCategory(context, MailboxCategories.folders),
|
||||||
Padding(
|
Row(children: [
|
||||||
padding: EdgeInsets.only(right: _responsiveUtils.isDesktop(context) ? 0 : 12),
|
Expanded(child: _buildSearchBarWidget(context)),
|
||||||
child: buildIconWeb(
|
Padding(
|
||||||
minSize: 40,
|
padding: EdgeInsets.only(right: _responsiveUtils.isDesktop(context) ? 0 : 12),
|
||||||
iconPadding: EdgeInsets.zero,
|
child: buildIconWeb(
|
||||||
splashRadius: 15,
|
minSize: 40,
|
||||||
icon: SvgPicture.asset(_imagePaths.icAddNewFolder, color: AppColor.colorTextButton, fit: BoxFit.fill),
|
iconPadding: EdgeInsets.zero,
|
||||||
tooltip: AppLocalizations.of(context).new_mailbox,
|
splashRadius: 15,
|
||||||
onTap: () => controller.goToCreateNewMailboxView(context))),
|
icon: SvgPicture.asset(_imagePaths.icAddNewFolder, color: AppColor.colorTextButton, fit: BoxFit.fill),
|
||||||
]),
|
tooltip: AppLocalizations.of(context).new_mailbox,
|
||||||
Obx(() => controller.folderMailboxHasChild
|
onTap: () => controller.goToCreateNewMailboxView(context))),
|
||||||
? _buildMailboxCategory(context, MailboxCategories.folders, controller.folderRootNode)
|
]),
|
||||||
: const SizedBox.shrink()),
|
Obx(() => controller.folderMailboxHasChild
|
||||||
])
|
? _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 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