TF-1083: add drag single mail

This commit is contained in:
ManhNTX
2022-10-20 15:55:40 +07:00
committed by Dat H. Pham
parent bdbc8b4a11
commit 64cef87b74
8 changed files with 175 additions and 52 deletions
@@ -281,10 +281,11 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
controller.openMailbox(context, mailboxNode.item))
..addOnExpandFolderActionClick((mailboxNode) =>
controller.toggleMailboxFolder(mailboxNode))
..adOnMenuActionClick((position, mailboxNode) =>
..addOnMenuActionClick((position, mailboxNode) =>
_openMailboxMenuAction(context, position, mailboxNode.item))
..addOnSelectMailboxFolderClick((mailboxNode) =>
controller.selectMailboxNode(mailboxNode)))
controller.selectMailboxNode(mailboxNode))
..addOnDragItemAccepted(controller.mailboxDashBoardController.dragSelectedMultipleEmailToMailbox))
.build()),
children: _buildListChildTileWidget(context, mailboxNode)
).build()
@@ -292,10 +293,11 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value)
..addOnOpenMailboxFolderClick((mailboxNode) =>
controller.openMailbox(context, mailboxNode.item))
..adOnMenuActionClick((position, mailboxNode) =>
..addOnMenuActionClick((position, mailboxNode) =>
_openMailboxMenuAction(context, position, mailboxNode.item))
..addOnSelectMailboxFolderClick((mailboxNode) =>
controller.selectMailboxNode(mailboxNode)))
controller.selectMailboxNode(mailboxNode))
..addOnDragItemAccepted(controller.mailboxDashBoardController.dragSelectedMultipleEmailToMailbox))
.build())
).toList() ?? <Widget>[];
}
@@ -361,6 +363,7 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
_responsiveUtils,
listMailbox[index],
lastMailbox: controller.listMailboxSearched.last)
..addOnDragItemAccepted(controller.mailboxDashBoardController.dragSelectedMultipleEmailToMailbox)
..addOnOpenMailboxAction((mailbox) => controller.openMailbox(context, mailbox))
..addOnMenuActionClick((position, mailbox) => _openMailboxMenuAction(context, position, mailbox))
..addOnSelectMailboxActionClick((mailbox) => controller.selectMailboxSearched(context, mailbox)))
@@ -14,6 +14,7 @@ typedef OnExpandFolderActionClick = void Function(MailboxNode);
typedef OnOpenMailboxFolderClick = void Function(MailboxNode);
typedef OnSelectMailboxFolderClick = void Function(MailboxNode);
typedef OnMenuActionClick = void Function(RelativeRect, MailboxNode);
typedef OnDragItemAccepted = void Function(List<PresentationEmail>, PresentationMailbox);
class MailBoxFolderTileBuilder {
@@ -33,6 +34,7 @@ class MailBoxFolderTileBuilder {
OnOpenMailboxFolderClick? _onOpenMailboxFolderClick;
OnSelectMailboxFolderClick? _onSelectMailboxFolderClick;
OnMenuActionClick? _onMenuActionClick;
OnDragItemAccepted? _onDragItemAccepted;
bool isHoverItem = false;
@@ -62,11 +64,23 @@ class MailBoxFolderTileBuilder {
_onSelectMailboxFolderClick = onSelectMailboxFolderClick;
}
void adOnMenuActionClick(OnMenuActionClick onMenuActionClick) {
void addOnMenuActionClick(OnMenuActionClick onMenuActionClick) {
_onMenuActionClick = onMenuActionClick;
}
Widget build() => _buildMailboxItem();
void addOnDragItemAccepted(OnDragItemAccepted onDragItemAccepted) {
_onDragItemAccepted = onDragItemAccepted;
}
Widget build() => DragTarget<List<PresentationEmail>>(
builder: (context, _, __,) {
return _buildMailboxItem();
},
onAccept: (emails) {
_onDragItemAccepted?.call(emails, _mailboxNode.item);
print(emails);
},
);
Widget _buildMailboxItem() {
if (mailboxDisplayed == MailboxDisplayed.mailbox) {
@@ -10,6 +10,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_displa
typedef OnOpenMailboxActionClick = void Function(PresentationMailbox);
typedef OnSelectMailboxActionClick = void Function(PresentationMailbox);
typedef OnOpenMenuActionClick = void Function(RelativeRect, PresentationMailbox);
typedef OnDragItemAccepted = void Function(List<PresentationEmail>, PresentationMailbox);
class MailboxSearchTileBuilder {
@@ -28,6 +29,7 @@ class MailboxSearchTileBuilder {
OnOpenMailboxActionClick? _onOpenMailboxActionClick;
OnSelectMailboxActionClick? _onSelectMailboxActionClick;
OnOpenMenuActionClick? _onMenuActionClick;
OnDragItemAccepted? _onDragItemAccepted;
MailboxSearchTileBuilder(
this._context,
@@ -55,12 +57,24 @@ class MailboxSearchTileBuilder {
_onMenuActionClick = onOpenMenuActionClick;
}
void addOnDragItemAccepted(OnDragItemAccepted onDragItemAccepted) {
_onDragItemAccepted = onDragItemAccepted;
}
Widget build() {
return Theme(
data: ThemeData(
splashColor: Colors.transparent,
highlightColor: Colors.transparent),
child: _buildMailboxItem()
child: DragTarget<List<PresentationEmail>>(
builder: (context, _, __,) {
return _buildMailboxItem();
},
onAccept: (emails) {
_onDragItemAccepted?.call(emails, _presentationMailbox);
print(emails.first.preview);
},
),
);
}
@@ -73,21 +87,21 @@ class MailboxSearchTileBuilder {
child: Opacity(
opacity: _presentationMailbox.isActivated ? 1.0 : 0.3,
child: InkWell(
onTap: () {},
onHover: (value) => setState(() => isHoverItem = value),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: backgroundColorItem),
child: ListTile(
contentPadding: const EdgeInsets.only(left: 8),
onTap: () => _onOpenMailboxActionClick?.call(_presentationMailbox),
leading: _buildLeadingIcon(),
title: _buildTitleItem(),
subtitle: _buildSubtitleItem(),
trailing: _buildMenuIcon(),
),
)
onTap: () {},
onHover: (value) => setState(() => isHoverItem = value),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: backgroundColorItem),
child: ListTile(
contentPadding: const EdgeInsets.only(left: 8),
onTap: () => _onOpenMailboxActionClick?.call(_presentationMailbox),
leading: _buildLeadingIcon(),
title: _buildTitleItem(),
subtitle: _buildSubtitleItem(),
trailing: _buildMenuIcon(),
),
)
),
),
);