TF-1535 Fix cannot scroll to view email list on responsive version browser
This commit is contained in:
@@ -299,6 +299,7 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
context,
|
context,
|
||||||
_imagePaths,
|
_imagePaths,
|
||||||
mailboxNode,
|
mailboxNode,
|
||||||
|
responsiveUtils: _responsiveUtils,
|
||||||
lastNode: lastNode,
|
lastNode: lastNode,
|
||||||
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value)
|
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value)
|
||||||
..addOnClickOpenMailboxNodeAction((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
..addOnClickOpenMailboxNodeAction((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
||||||
@@ -324,6 +325,7 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
context,
|
context,
|
||||||
_imagePaths,
|
_imagePaths,
|
||||||
mailboxNode,
|
mailboxNode,
|
||||||
|
responsiveUtils: _responsiveUtils,
|
||||||
lastNode: lastNode,
|
lastNode: lastNode,
|
||||||
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value)
|
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value)
|
||||||
..addOnClickOpenMailboxNodeAction((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
..addOnClickOpenMailboxNodeAction((mailboxNode) => controller.openMailbox(context, mailboxNode.item))
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:core/presentation/extensions/color_extension.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
import 'package:core/presentation/resources/image_paths.dart';
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
import 'package:core/presentation/utils/style_utils.dart';
|
import 'package:core/presentation/utils/style_utils.dart';
|
||||||
import 'package:core/presentation/views/button/icon_button_web.dart';
|
import 'package:core/presentation/views/button/icon_button_web.dart';
|
||||||
import 'package:core/utils/build_utils.dart';
|
import 'package:core/utils/build_utils.dart';
|
||||||
@@ -22,6 +23,7 @@ class MailBoxFolderTileBuilder {
|
|||||||
final MailboxNode _mailboxNode;
|
final MailboxNode _mailboxNode;
|
||||||
final BuildContext _context;
|
final BuildContext _context;
|
||||||
final ImagePaths _imagePaths;
|
final ImagePaths _imagePaths;
|
||||||
|
final ResponsiveUtils? responsiveUtils;
|
||||||
final SelectMode allSelectMode;
|
final SelectMode allSelectMode;
|
||||||
final MailboxDisplayed mailboxDisplayed;
|
final MailboxDisplayed mailboxDisplayed;
|
||||||
final MailboxNode? lastNode;
|
final MailboxNode? lastNode;
|
||||||
@@ -48,6 +50,7 @@ class MailBoxFolderTileBuilder {
|
|||||||
this.lastNode,
|
this.lastNode,
|
||||||
this.mailboxNodeSelected,
|
this.mailboxNodeSelected,
|
||||||
this.mailboxActions,
|
this.mailboxActions,
|
||||||
|
this.responsiveUtils,
|
||||||
this.mailboxIdAlreadySelected
|
this.mailboxIdAlreadySelected
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -77,14 +80,10 @@ class MailBoxFolderTileBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget build() {
|
Widget build() {
|
||||||
if (BuildUtils.isWeb) {
|
if (responsiveUtils?.isWebDesktop(_context) == true && mailboxDisplayed == MailboxDisplayed.mailbox) {
|
||||||
return DragTarget<List<PresentationEmail>>(
|
return DragTarget<List<PresentationEmail>>(
|
||||||
builder: (context, _, __,) {
|
builder: (_, __, ___) => _buildMailboxItem(),
|
||||||
return _buildMailboxItem();
|
onAccept: (emails) => _onDragItemAccepted?.call(emails, _mailboxNode.item),
|
||||||
},
|
|
||||||
onAccept: (emails) {
|
|
||||||
_onDragItemAccepted?.call(emails, _mailboxNode.item);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return _buildMailboxItem();
|
return _buildMailboxItem();
|
||||||
|
|||||||
@@ -341,49 +341,102 @@ class ThreadView extends GetWidget<ThreadController>
|
|||||||
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) => Obx(() => _buildEmailItem(context, listPresentationEmail[index]))
|
||||||
final currentPresentationEmail = listPresentationEmail[index];
|
),
|
||||||
return Obx(() => Draggable<List<PresentationEmail>>(
|
|
||||||
maxSimultaneousDrags: kIsWeb ? null : 0,
|
|
||||||
data: controller.listEmailDrag,
|
|
||||||
feedback: _buildFeedBackWidget(context),
|
|
||||||
childWhenDragging: (EmailTileBuilder(
|
|
||||||
context,
|
|
||||||
currentPresentationEmail,
|
|
||||||
controller.mailboxDashBoardController.currentSelectMode.value,
|
|
||||||
controller.searchQuery,
|
|
||||||
controller.mailboxDashBoardController.selectedEmail.value?.id == currentPresentationEmail.id,
|
|
||||||
mailboxContain: currentPresentationEmail.mailboxContain,
|
|
||||||
isSearchEmailRunning: controller.searchController.isSearchEmailRunning,
|
|
||||||
isDrag: true)
|
|
||||||
).build(),
|
|
||||||
dragAnchorStrategy: pointerDragAnchorStrategy,
|
|
||||||
onDragStarted: () {
|
|
||||||
controller.calculateDragValue(currentPresentationEmail);
|
|
||||||
controller.onDragMailBox(true);
|
|
||||||
},
|
|
||||||
onDragEnd: (_) => controller.onDragMailBox(false),
|
|
||||||
onDraggableCanceled: (_,__) => controller.onDragMailBox(false),
|
|
||||||
child: (EmailTileBuilder(
|
|
||||||
context,
|
|
||||||
currentPresentationEmail,
|
|
||||||
controller.mailboxDashBoardController.currentSelectMode.value,
|
|
||||||
controller.searchQuery,
|
|
||||||
controller.mailboxDashBoardController.selectedEmail.value?.id == currentPresentationEmail.id,
|
|
||||||
mailboxContain: currentPresentationEmail.mailboxContain,
|
|
||||||
isSearchEmailRunning: controller.searchController.isSearchEmailRunning)
|
|
||||||
..addOnPressEmailActionClick((action, email) =>
|
|
||||||
controller.pressEmailAction(context, action, email, mailboxContain: currentPresentationEmail.mailboxContain))
|
|
||||||
..addOnMoreActionClick((email, position) => _responsiveUtils.isScreenWithShortestSide(context)
|
|
||||||
? controller.openContextMenuAction(context, _contextMenuActionTile(context, email))
|
|
||||||
: controller.openPopupMenuAction(context, position, _popupMenuActionTile(context, email)))
|
|
||||||
).build(),
|
|
||||||
));
|
|
||||||
}),
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildEmailItem(BuildContext context, PresentationEmail presentationEmail) {
|
||||||
|
if (_responsiveUtils.isWebDesktop(context)) {
|
||||||
|
return _buildEmailItemDraggable(context, presentationEmail);
|
||||||
|
} else {
|
||||||
|
return _buildEmailItemNotDraggable(context, presentationEmail);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildEmailItemDraggable(BuildContext context, PresentationEmail presentationEmail) {
|
||||||
|
return Draggable<List<PresentationEmail>>(
|
||||||
|
data: controller.listEmailDrag,
|
||||||
|
feedback: _buildFeedBackWidget(context),
|
||||||
|
childWhenDragging: _buildEmailItemWhenDragging(context, presentationEmail),
|
||||||
|
dragAnchorStrategy: pointerDragAnchorStrategy,
|
||||||
|
onDragStarted: () {
|
||||||
|
controller.calculateDragValue(presentationEmail);
|
||||||
|
controller.onDragMailBox(true);
|
||||||
|
},
|
||||||
|
onDragEnd: (_) => controller.onDragMailBox(false),
|
||||||
|
onDraggableCanceled: (_,__) => controller.onDragMailBox(false),
|
||||||
|
child: _buildEmailItemNotDraggable(context, presentationEmail)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildEmailItemWhenDragging(BuildContext context, PresentationEmail presentationEmail) {
|
||||||
|
final isShowingEmailContent = controller.mailboxDashBoardController.selectedEmail.value?.id == presentationEmail.id;
|
||||||
|
final selectModeAll = controller.mailboxDashBoardController.currentSelectMode.value;
|
||||||
|
|
||||||
|
return (EmailTileBuilder(
|
||||||
|
context,
|
||||||
|
presentationEmail,
|
||||||
|
selectModeAll,
|
||||||
|
controller.searchQuery,
|
||||||
|
isShowingEmailContent,
|
||||||
|
mailboxContain: presentationEmail.mailboxContain,
|
||||||
|
isSearchEmailRunning: controller.searchController.isSearchEmailRunning,
|
||||||
|
isDrag: true
|
||||||
|
)).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildEmailItemNotDraggable(BuildContext context, PresentationEmail presentationEmail) {
|
||||||
|
final isShowingEmailContent = controller.mailboxDashBoardController.selectedEmail.value?.id == presentationEmail.id;
|
||||||
|
final selectModeAll = controller.mailboxDashBoardController.currentSelectMode.value;
|
||||||
|
|
||||||
|
return (EmailTileBuilder(
|
||||||
|
context,
|
||||||
|
presentationEmail,
|
||||||
|
selectModeAll,
|
||||||
|
controller.searchQuery,
|
||||||
|
isShowingEmailContent,
|
||||||
|
mailboxContain: presentationEmail.mailboxContain,
|
||||||
|
isSearchEmailRunning: controller.searchController.isSearchEmailRunning
|
||||||
|
)
|
||||||
|
..addOnPressEmailActionClick((action, email) => _handleEmailActionClicked(context, email, action))
|
||||||
|
..addOnMoreActionClick((email, position) => _handleEmailContextMenuAction(context, email, position))
|
||||||
|
).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _handleEmailActionClicked(
|
||||||
|
BuildContext context,
|
||||||
|
PresentationEmail presentationEmail,
|
||||||
|
EmailActionType actionType
|
||||||
|
) {
|
||||||
|
controller.pressEmailAction(
|
||||||
|
context,
|
||||||
|
actionType,
|
||||||
|
presentationEmail,
|
||||||
|
mailboxContain: presentationEmail.mailboxContain
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _handleEmailContextMenuAction(
|
||||||
|
BuildContext context,
|
||||||
|
PresentationEmail presentationEmail,
|
||||||
|
RelativeRect? position
|
||||||
|
) {
|
||||||
|
if (_responsiveUtils.isScreenWithShortestSide(context)) {
|
||||||
|
controller.openContextMenuAction(
|
||||||
|
context,
|
||||||
|
_contextMenuActionTile(context, presentationEmail)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
controller.openPopupMenuAction(
|
||||||
|
context,
|
||||||
|
position,
|
||||||
|
_popupMenuActionTile(context, presentationEmail)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Widget _buildFeedBackWidget(BuildContext context) {
|
Widget _buildFeedBackWidget(BuildContext context) {
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
height: 60,
|
height: 60,
|
||||||
|
|||||||
Reference in New Issue
Block a user