TF-1083: add drag multiple mail

This commit is contained in:
ManhNTX
2022-10-20 18:05:20 +07:00
committed by Dat H. Pham
parent 64cef87b74
commit 772d51608e
4 changed files with 80 additions and 44 deletions
@@ -95,6 +95,7 @@ class ThreadController extends BaseController {
final MoveToMailboxInteractor _moveToMailboxInteractor; final MoveToMailboxInteractor _moveToMailboxInteractor;
final emailList = <PresentationEmail>[].obs; final emailList = <PresentationEmail>[].obs;
final listEmailDrag = <PresentationEmail>[].obs;
bool canLoadMore = true; bool canLoadMore = true;
bool canSearchMore = true; bool canSearchMore = true;
@@ -1390,4 +1391,16 @@ class ThreadController extends BaseController {
SearchEmailBindings().dependencies(); SearchEmailBindings().dependencies();
mailboxDashBoardController.dispatchRoute(AppRoutes.SEARCH_EMAIL); mailboxDashBoardController.dispatchRoute(AppRoutes.SEARCH_EMAIL);
} }
void calculateDragValue(PresentationEmail? currentPresentationEmail) {
if(currentPresentationEmail != null) {
if(mailboxDashBoardController.listEmailSelected.contains(currentPresentationEmail)){
listEmailDrag.clear();
listEmailDrag.addAll(mailboxDashBoardController.listEmailSelected);
} else {
listEmailDrag.clear();
listEmailDrag.add(currentPresentationEmail);
}
}
}
} }
@@ -332,52 +332,55 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
key: const PageStorageKey('list_presentation_email_in_threads'), key: const PageStorageKey('list_presentation_email_in_threads'),
itemExtent: _getItemExtent(context), itemExtent: _getItemExtent(context),
itemCount: listPresentationEmail.length, itemCount: listPresentationEmail.length,
itemBuilder: (context, index) => itemBuilder: (context, index) {
Draggable<List<PresentationEmail>>( return Draggable<List<PresentationEmail>>(
data: [listPresentationEmail[index]], data: controller.listEmailDrag,
child: Obx(() => (EmailTileBuilder( child: (EmailTileBuilder(
context,
listPresentationEmail[index],
controller.mailboxDashBoardController.currentSelectMode.value,
controller.searchController.searchState.value.searchStatus,
controller.searchQuery,
mailboxCurrent: controller.searchController.isSearchEmailRunning
? listPresentationEmail[index].findMailboxContain(
controller.mailboxDashBoardController.mapMailboxById)
: controller.currentMailbox,
advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue)
..addOnPressEmailActionClick((action, email) =>
controller.pressEmailAction(
context,
action,
email,
mailboxContain: controller.searchController.isSearchEmailRunning
? email.findMailboxContain(controller.mailboxDashBoardController.mapMailboxById)
: controller.currentMailbox))
..addOnMoreActionClick((email, position) => _responsiveUtils.isMobile(context)
? controller.openContextMenuAction(context, _contextMenuActionTile(context, email))
: controller.openPopupMenuAction(context, position, _popupMenuActionTile(context, email))))
.build(),
feedback: _buildFeedBackWidget(context),
childWhenDragging: (EmailTileBuilder(
context, context,
listPresentationEmail[index], listPresentationEmail[index],
controller.mailboxDashBoardController.currentSelectMode.value, controller.mailboxDashBoardController.currentSelectMode.value,
controller.searchController.searchState.value.searchStatus, controller.searchController.searchState.value.searchStatus,
controller.searchQuery, controller.searchQuery,
mailboxCurrent: controller.searchController.isSearchEmailRunning mailboxCurrent: controller.searchController.isSearchEmailRunning
? listPresentationEmail[index].findMailboxContain( ? listPresentationEmail[index].findMailboxContain(
controller.mailboxDashBoardController.mapMailboxById) controller.mailboxDashBoardController.mapMailboxById)
: controller.currentMailbox, : controller.currentMailbox,
advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue) advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue, isDrag: true))
..addOnPressEmailActionClick((action, email) => .build(),
controller.pressEmailAction( dragAnchorStrategy: pointerDragAnchorStrategy,
context, onDragStarted: () {
action, controller.calculateDragValue(listPresentationEmail[index]);
email, },
mailboxContain: controller.searchController.isSearchEmailRunning );
? email.findMailboxContain(controller.mailboxDashBoardController.mapMailboxById) })
: controller.currentMailbox))
..addOnMoreActionClick((email, position) => _responsiveUtils.isMobile(context)
? controller.openContextMenuAction(context, _contextMenuActionTile(context, email))
: controller.openPopupMenuAction(context, position, _popupMenuActionTile(context, email))))
.build()),
feedback: _buildFeedBackWidget(),
childWhenDragging: (EmailTileBuilder(
context,
listPresentationEmail[index],
controller.mailboxDashBoardController.currentSelectMode.value,
controller.searchController.searchState.value.searchStatus,
controller.searchQuery,
mailboxCurrent: controller.searchController.isSearchEmailRunning
? listPresentationEmail[index].findMailboxContain(
controller.mailboxDashBoardController.mapMailboxById)
: controller.currentMailbox,
advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue,
isDrag: true))
.build(),
dragAnchorStrategy: pointerDragAnchorStrategy,
))
); );
} }
Widget _buildFeedBackWidget() { Widget _buildFeedBackWidget(BuildContext context) {
return SizedBox( return SizedBox(
height: 60, height: 60,
child: Material( child: Material(
@@ -395,14 +398,16 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
color: Colors.white, color: Colors.white,
), ),
const SizedBox(width: 10), const SizedBox(width: 10),
const Text( Obx(
'Move 1 conversation', () => Text(
overflow: TextOverflow.clip, AppLocalizations.of(context).moveConversation(controller.listEmailDrag.length),
style: TextStyle( overflow: TextOverflow.clip,
color: Colors.white, style: const TextStyle(
fontWeight: FontWeight.bold, color: Colors.white,
fontWeight: FontWeight.bold,
),
maxLines: 1,
), ),
maxLines: 1,
), ),
], ],
), ),
+10
View File
@@ -2373,5 +2373,15 @@
"type": "text", "type": "text",
"placeholders_order": [], "placeholders_order": [],
"placeholders": {} "placeholders": {}
},
"moveConversation": "Move {numberOfConversation} conversation",
"@moveConversation": {
"type": "text",
"placeholders_order": [
"numberOfConversation"
],
"placeholders": {
"numberOfConversation": {}
}
} }
} }
@@ -2447,4 +2447,12 @@ class AppLocalizations {
'A read receipt has been sent.', 'A read receipt has been sent.',
name: 'toastMessageSendReceiptSuccess'); name: 'toastMessageSendReceiptSuccess');
} }
String moveConversation(int numberOfConversation) {
return Intl.message(
'Move $numberOfConversation conversation',
name: 'moveConversation',
args: [numberOfConversation]
);
}
} }