TF-1427 Apply new design for search mailbox on mobile/tablet
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/state/failure.dart';
|
||||
@@ -150,8 +151,9 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
|
||||
final newMailboxState = mailboxState ?? currentMailboxState;
|
||||
dashboardController.dispatchMailboxUIAction(RefreshChangeMailboxAction(newMailboxState));
|
||||
final accountId = dashboardController.accountId.value;
|
||||
if (accountId != null && newMailboxState != null) {
|
||||
consumeState(_refreshAllMailboxInteractor.execute(accountId, newMailboxState));
|
||||
final session = dashboardController.sessionCurrent;
|
||||
if (session != null && accountId != null && newMailboxState != null) {
|
||||
consumeState(_refreshAllMailboxInteractor.execute(session, accountId, newMailboxState));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -362,6 +364,14 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
|
||||
}
|
||||
}
|
||||
|
||||
void openMailboxAction(BuildContext context, PresentationMailbox mailbox) {
|
||||
dashboardController.openMailboxAction(context, mailbox);
|
||||
|
||||
if (!responsiveUtils.isWebDesktop(context)) {
|
||||
closeSearchView(context);
|
||||
}
|
||||
}
|
||||
|
||||
void clearAllTextInputSearchForm() {
|
||||
textInputSearchController.clear();
|
||||
currentSearchQuery.value = '';
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/views/button/icon_button_web.dart';
|
||||
import 'package:core/presentation/views/text/text_field_builder.dart';
|
||||
@@ -43,7 +44,7 @@ class SearchMailboxView extends GetWidget<SearchMailboxController>
|
||||
if (!controller.responsiveUtils.isWebDesktop(context))
|
||||
const Divider(color: AppColor.colorDividerComposer, height: 1),
|
||||
_buildLoadingView(),
|
||||
Expanded(child: _buildMailboxListView())
|
||||
Expanded(child: _buildMailboxListView(context))
|
||||
]),
|
||||
),
|
||||
),
|
||||
@@ -68,9 +69,9 @@ class SearchMailboxView extends GetWidget<SearchMailboxController>
|
||||
Widget _buildSearchInputForm(BuildContext context) {
|
||||
return Row(children: [
|
||||
buildIconWeb(
|
||||
minSize: 30,
|
||||
minSize: SearchMailboxUtils.getIconSize(context, controller.responsiveUtils),
|
||||
iconPadding: EdgeInsets.zero,
|
||||
splashRadius: 10,
|
||||
splashRadius: SearchMailboxUtils.getIconSplashRadius(context, controller.responsiveUtils),
|
||||
icon: SvgPicture.asset(
|
||||
controller.imagePaths.icBack,
|
||||
color: AppColor.colorTextButton,
|
||||
@@ -89,7 +90,7 @@ class SearchMailboxView extends GetWidget<SearchMailboxController>
|
||||
alignment: Alignment.center,
|
||||
child: Row(children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 5, right: 2),
|
||||
padding: SearchMailboxUtils.getPaddingInputSearchIcon(context, controller.responsiveUtils),
|
||||
child: buildIconWeb(
|
||||
minSize: 40,
|
||||
iconPadding: EdgeInsets.zero,
|
||||
@@ -157,10 +158,10 @@ class SearchMailboxView extends GetWidget<SearchMailboxController>
|
||||
)).build();
|
||||
}
|
||||
|
||||
Widget _buildMailboxListView() {
|
||||
Widget _buildMailboxListView(BuildContext context) {
|
||||
return Obx(() {
|
||||
return ListView.builder(
|
||||
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
|
||||
padding: SearchMailboxUtils.getPaddingListViewMailboxSearched(context, controller.responsiveUtils),
|
||||
key: const Key('list_mailbox_searched'),
|
||||
itemCount: controller.listMailboxSearched.length,
|
||||
shrinkWrap: true,
|
||||
@@ -171,8 +172,9 @@ class SearchMailboxView extends GetWidget<SearchMailboxController>
|
||||
controller.responsiveUtils,
|
||||
controller.listMailboxSearched[index],
|
||||
onDragEmailToMailboxAccepted: controller.dashboardController.dragSelectedMultipleEmailToMailboxAction,
|
||||
onClickOpenMailboxAction: (mailbox) => controller.dashboardController.openMailboxAction(context, mailbox),
|
||||
onClickOpenMenuMailboxAction: (position, mailbox) => _openMailboxMenuAction(context, position, mailbox),
|
||||
onClickOpenMailboxAction: (mailbox) => controller.openMailboxAction(context, mailbox),
|
||||
onClickOpenMenuMailboxAction: (position, mailbox) => _openMailboxMenuAction(context, mailbox, position: position),
|
||||
onLongPressMailboxAction: (mailbox) => _openMailboxMenuAction(context, mailbox),
|
||||
);
|
||||
}
|
||||
);
|
||||
@@ -185,7 +187,11 @@ class SearchMailboxView extends GetWidget<SearchMailboxController>
|
||||
: MailboxActions.enableSpamReport;
|
||||
}
|
||||
|
||||
void _openMailboxMenuAction(BuildContext context, RelativeRect position, PresentationMailbox mailbox) {
|
||||
void _openMailboxMenuAction(
|
||||
BuildContext context,
|
||||
PresentationMailbox mailbox,
|
||||
{RelativeRect? position}
|
||||
) {
|
||||
final mailboxActionsSupported = [
|
||||
MailboxActions.openInNewTab,
|
||||
if (mailbox.isPersonal && mailbox.isSpam)
|
||||
@@ -241,6 +247,8 @@ class SearchMailboxView extends GetWidget<SearchMailboxController>
|
||||
Key('${contextMenuItem.action.name}_action'),
|
||||
SvgPicture.asset(
|
||||
contextMenuItem.action.getContextMenuIcon(controller.imagePaths),
|
||||
width: 24,
|
||||
height: 24,
|
||||
color: contextMenuItem.action.getColorContextMenuIcon()
|
||||
),
|
||||
contextMenuItem.action.getTitleContextMenu(context),
|
||||
@@ -279,6 +287,7 @@ class SearchMailboxView extends GetWidget<SearchMailboxController>
|
||||
child: popupItem(contextMenuItem.action.getContextMenuIcon(controller.imagePaths),
|
||||
contextMenuItem.action.getTitleContextMenu(context),
|
||||
colorIcon: contextMenuItem.action.getColorContextMenuIcon(),
|
||||
iconSize: 24,
|
||||
styleName: TextStyle(
|
||||
fontWeight: FontWeight.w500,
|
||||
fontSize: 16,
|
||||
|
||||
@@ -7,9 +7,49 @@ class SearchMailboxUtils {
|
||||
return const EdgeInsets.symmetric(vertical: 8, horizontal: 16);
|
||||
} else {
|
||||
if (responsiveUtils.isScreenWithShortestSide(context)) {
|
||||
return const EdgeInsets.symmetric(horizontal: 10);
|
||||
return const EdgeInsets.symmetric(horizontal: 16, vertical: 8);
|
||||
} else {
|
||||
return const EdgeInsets.symmetric(horizontal: 32);
|
||||
return const EdgeInsets.symmetric(horizontal: 32, vertical: 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static EdgeInsets getPaddingInputSearchIcon(BuildContext context, ResponsiveUtils responsiveUtils) {
|
||||
if (responsiveUtils.isWebDesktop(context)) {
|
||||
return const EdgeInsets.only(left: 5, right: 2);
|
||||
} else {
|
||||
if (responsiveUtils.isScreenWithShortestSide(context)) {
|
||||
return const EdgeInsets.only(left: 10, right: 16);
|
||||
} else {
|
||||
return const EdgeInsets.only(left: 10, right: 16);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static double getIconSize(BuildContext context, ResponsiveUtils responsiveUtils) {
|
||||
if (responsiveUtils.isWebDesktop(context)) {
|
||||
return 30;
|
||||
} else {
|
||||
return 40;
|
||||
}
|
||||
}
|
||||
|
||||
static double getIconSplashRadius(BuildContext context, ResponsiveUtils responsiveUtils) {
|
||||
if (responsiveUtils.isWebDesktop(context)) {
|
||||
return 10;
|
||||
} else {
|
||||
return 15;
|
||||
}
|
||||
}
|
||||
|
||||
static EdgeInsets getPaddingListViewMailboxSearched(BuildContext context, ResponsiveUtils responsiveUtils) {
|
||||
if (responsiveUtils.isWebDesktop(context)) {
|
||||
return const EdgeInsets.only(left: 16, right: 16, bottom: 16);
|
||||
} else {
|
||||
if (responsiveUtils.isScreenWithShortestSide(context)) {
|
||||
return const EdgeInsets.all(16);
|
||||
} else {
|
||||
return const EdgeInsets.symmetric(horizontal: 32, vertical: 16);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ class MailboxSearchedItemBuilder extends StatefulWidget {
|
||||
final OnClickOpenMailboxAction? onClickOpenMailboxAction;
|
||||
final OnClickOpenMenuMailboxAction? onClickOpenMenuMailboxAction;
|
||||
final OnDragEmailToMailboxAccepted? onDragEmailToMailboxAccepted;
|
||||
final OnLongPressMailboxAction? onLongPressMailboxAction;
|
||||
|
||||
const MailboxSearchedItemBuilder(
|
||||
this._imagePaths,
|
||||
@@ -27,7 +28,8 @@ class MailboxSearchedItemBuilder extends StatefulWidget {
|
||||
Key? key,
|
||||
this.onClickOpenMailboxAction,
|
||||
this.onClickOpenMenuMailboxAction,
|
||||
this.onDragEmailToMailboxAccepted
|
||||
this.onDragEmailToMailboxAccepted,
|
||||
this.onLongPressMailboxAction
|
||||
}
|
||||
) : super(key: key);
|
||||
|
||||
@@ -89,6 +91,7 @@ class _MailboxSearchedItemBuilderState extends State<MailboxSearchedItemBuilder>
|
||||
return ListTile(
|
||||
contentPadding: const EdgeInsets.symmetric(horizontal: 8),
|
||||
onTap: _onTapMailboxAction,
|
||||
onLongPress: _onLongPressMailboxAction,
|
||||
leading: _buildMailboxIcon(),
|
||||
title: _buildTitleItem(),
|
||||
subtitle: _buildSubtitleItem()
|
||||
@@ -102,6 +105,10 @@ class _MailboxSearchedItemBuilderState extends State<MailboxSearchedItemBuilder>
|
||||
}
|
||||
}
|
||||
|
||||
void _onLongPressMailboxAction() {
|
||||
widget.onLongPressMailboxAction?.call(widget._presentationMailbox);
|
||||
}
|
||||
|
||||
Widget _buildMailboxIcon() {
|
||||
return SvgPicture.asset(
|
||||
widget._presentationMailbox.isSubscribed?.value == true
|
||||
|
||||
Reference in New Issue
Block a user