diff --git a/core/lib/presentation/views/popup_menu/popup_menu_item_widget.dart b/core/lib/presentation/views/popup_menu/popup_menu_item_widget.dart index a49832004..7d37f2f99 100644 --- a/core/lib/presentation/views/popup_menu/popup_menu_item_widget.dart +++ b/core/lib/presentation/views/popup_menu/popup_menu_item_widget.dart @@ -5,18 +5,25 @@ import 'package:flutter_svg/flutter_svg.dart'; @immutable class PopupMenuItemWidget extends StatelessWidget { - final Function onCallBack; + final Function onTapCallback; final String icon; final String name; final Color? iconColor; final String? iconSelection; - PopupMenuItemWidget(this.icon, this.name, this.onCallBack, {this.iconSelection, this.iconColor}); + PopupMenuItemWidget( + this.icon, + this.name, + this.onTapCallback, + { + this.iconSelection, + this.iconColor + }); @override Widget build(BuildContext context) { return InkWell( - onTap: () => onCallBack.call(), + onTap: () => onTapCallback.call(), child: Padding( padding: EdgeInsets.symmetric(horizontal: 20, vertical: 16), child: SizedBox( diff --git a/core/lib/presentation/views/search/search_bar_view.dart b/core/lib/presentation/views/search/search_bar_view.dart index 4c4d29f1e..38b2b1dc2 100644 --- a/core/lib/presentation/views/search/search_bar_view.dart +++ b/core/lib/presentation/views/search/search_bar_view.dart @@ -45,38 +45,37 @@ class SearchBarView { } Widget build() { - return InkWell( - onTap: () => _onOpenSearchViewAction?.call(), - borderRadius: BorderRadius.all(Radius.circular(10)), - child: Container( - key: Key('search_bar_widget'), - alignment: Alignment.topCenter, - height: _heightSearchBar ?? 40, - width: _maxSizeWidth ?? double.infinity, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: AppColor.colorBgSearchBar), - padding: _padding ?? EdgeInsets.zero, - margin: _margin ?? EdgeInsets.zero, - child: MediaQuery( - data: MediaQueryData(padding: EdgeInsets.zero), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - buildIconWeb( - splashRadius: 12, - icon: SvgPicture.asset(_imagePaths.icSearchBar, width: 16, height: 16, fit: BoxFit.fill), - onTap: () => _onOpenSearchViewAction?.call()), - Expanded(child: - Transform(transform: Matrix4.translationValues(-5, 0.0, 0.0), - child: Text( - _hintTextSearch ?? '', - maxLines: 1, - style: TextStyle(fontSize: kIsWeb ? 15 : 17, color: AppColor.colorHintSearchBar)))) - ] - ) - ) - ), + return Container( + key: Key('search_bar_widget'), + alignment: Alignment.topCenter, + height: _heightSearchBar ?? 40, + width: _maxSizeWidth ?? double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: AppColor.colorBgSearchBar), + padding: _padding ?? EdgeInsets.zero, + margin: _margin ?? EdgeInsets.zero, + child: InkWell( + onTap: () => _onOpenSearchViewAction?.call(), + borderRadius: BorderRadius.all(Radius.circular(10)), + child: MediaQuery( + data: MediaQueryData(padding: EdgeInsets.zero), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + buildIconWeb( + splashRadius: 12, + icon: SvgPicture.asset(_imagePaths.icSearchBar, width: 16, height: 16, fit: BoxFit.fill), + onTap: () => _onOpenSearchViewAction?.call()), + Expanded(child: + Transform(transform: Matrix4.translationValues(-5, 0.0, 0.0), + child: Text( + _hintTextSearch ?? '', + maxLines: 1, + style: TextStyle(fontSize: kIsWeb ? 15 : 17, color: AppColor.colorHintSearchBar)))) + ] + ) + )), ); } } \ No newline at end of file diff --git a/lib/features/base/mixin/popup_context_menu_action_mixin.dart b/lib/features/base/mixin/popup_context_menu_action_mixin.dart index b246a2bcc..d31beb9ca 100644 --- a/lib/features/base/mixin/popup_context_menu_action_mixin.dart +++ b/lib/features/base/mixin/popup_context_menu_action_mixin.dart @@ -17,7 +17,7 @@ mixin PopupContextMenuActionMixin { void openPopupMenuAction(BuildContext context, RelativeRect? position, List popupMenuItems) async { await showMenu( context: context, - position: position ?? RelativeRect.fromLTRB(16, 40, 16, 16), + position: position ?? const RelativeRect.fromLTRB(16, 40, 16, 16), color: Colors.white, elevation: 4, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), @@ -28,7 +28,7 @@ mixin PopupContextMenuActionMixin { return CupertinoActionSheetAction( child: Text( AppLocalizations.of(context).cancel, - style: TextStyle(fontWeight: FontWeight.w500, fontSize: 20, color: AppColor.colorTextButton)), + style: const TextStyle(fontWeight: FontWeight.w500, fontSize: 20, color: AppColor.colorTextButton)), onPressed: () => popBack(), ); } diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 595b8d660..557fdee2d 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -112,7 +112,7 @@ class MailboxController extends BaseMailboxController { @override void onReady() { - _openMailboxEventController.stream.throttleTime(Duration(milliseconds: 800)).listen((event) { + _openMailboxEventController.stream.throttleTime(const Duration(milliseconds: 800)).listen((event) { _handleOpenMailbox(event.buildContext, event.presentationMailbox); }); @@ -304,7 +304,7 @@ class MailboxController extends BaseMailboxController { } if (!_responsiveUtils.isDesktop(context) && !_responsiveUtils.isTabletLarge(context)) { - mailboxDashBoardController.closeDrawer(); + mailboxDashBoardController.closeMailboxMenuDrawer(); } else { mailboxDashBoardController.dispatchRoute(AppRoutes.THREAD); } @@ -679,7 +679,7 @@ class MailboxController extends BaseMailboxController { void closeMailboxScreen(BuildContext context) { _cancelSelectMailbox(); - mailboxDashBoardController.closeDrawer(); + mailboxDashBoardController.closeMailboxMenuDrawer(); } @override diff --git a/lib/features/mailbox/presentation/mailbox_view.dart b/lib/features/mailbox/presentation/mailbox_view.dart index c6cb9a2b4..84c0fde96 100644 --- a/lib/features/mailbox/presentation/mailbox_view.dart +++ b/lib/features/mailbox/presentation/mailbox_view.dart @@ -222,7 +222,7 @@ class MailboxView extends GetWidget { left: _responsiveUtils.isMobile(context) && _responsiveUtils.isLandscape(context) ? 0 : 16, right: 16), child: (UserInformationWidgetBuilder(_imagePaths, context, controller.mailboxDashBoardController.userProfile.value) - ..addOnLogoutAction(() => controller.mailboxDashBoardController.logoutAction())) + ..addOnLogoutAction(() => controller.mailboxDashBoardController.goToSettings())) .build()), const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2) ]); diff --git a/lib/features/mailbox/presentation/mailbox_view_web.dart b/lib/features/mailbox/presentation/mailbox_view_web.dart index 66e05f6cb..f64676851 100644 --- a/lib/features/mailbox/presentation/mailbox_view_web.dart +++ b/lib/features/mailbox/presentation/mailbox_view_web.dart @@ -191,7 +191,7 @@ class MailboxView extends GetWidget { Padding( padding: const EdgeInsets.only(left: 16, bottom: 10), child: (UserInformationWidgetBuilder(_imagePaths, context, controller.mailboxDashBoardController.userProfile.value) - ..addOnLogoutAction(() => controller.mailboxDashBoardController.logoutAction())) + ..addOnLogoutAction(() => controller.mailboxDashBoardController.goToSettings())) .build()), const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2) ]), diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart index e64d61972..87599612c 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart @@ -248,11 +248,11 @@ class MailboxDashBoardController extends ReloadableController { selectedEmail.value = null; } - void openDrawer() { + void openMailboxMenuDrawer() { scaffoldKey.currentState?.openDrawer(); } - void closeDrawer() { + void closeMailboxMenuDrawer() { scaffoldKey.currentState?.openEndDrawer(); } @@ -424,6 +424,10 @@ class MailboxDashBoardController extends ReloadableController { } void goToSettings() { + if (currentContext != null && (_responsiveUtils.isMobile(currentContext!) + || _responsiveUtils.isTablet(currentContext!))) { + closeMailboxMenuDrawer(); + } push(AppRoutes.MANAGE_ACCOUNT, arguments: ManageAccountArguments(accountId.value, userProfile.value)); } diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart index 61409c93b..dd371d6f5 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view.dart @@ -86,7 +86,7 @@ class MailboxDashBoardView extends GetWidget with Ne Widget _buildLargeScreenView(BuildContext context) { if (controller.isDrawerOpen && (_responsiveUtils.isDesktop(context) || _responsiveUtils.isTabletLarge(context))) { WidgetsBinding.instance?.addPostFrameCallback((_) { - controller.closeDrawer(); + controller.closeMailboxMenuDrawer(); }); } diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index 7f8439a25..853c62d0e 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -32,7 +32,7 @@ class MailboxDashBoardView extends GetWidget with Ne Widget build(BuildContext context) { if (controller.isDrawerOpen && (_responsiveUtils.isDesktop(context) || _responsiveUtils.isTabletLarge(context))) { WidgetsBinding.instance?.addPostFrameCallback((_) { - controller.closeDrawer(); + controller.closeMailboxMenuDrawer(); }); } @@ -401,7 +401,10 @@ class MailboxDashBoardView extends GetWidget with Ne ..setMargin(const EdgeInsets.only(right: 10)) ..setHeightSearchBar(45) ..setHintText(AppLocalizations.of(context).search_mail) - ..addOnCancelSearchPressed(() => controller.disableSearch()) + ..addOnCancelSearchPressed(() { + controller.disableSearch(); + controller.dispatchAction(CancelSelectionAllEmailAction()); + }) ..addOnClearTextSearchAction(() => controller.clearSearchText()) ..addOnTextChangeSearchAction((query) => controller.addSuggestionSearch(query)) ..addOnSearchTextAction((query) => controller.searchEmail(context, query))) diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart index da31a7399..b02cb136f 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart @@ -98,4 +98,11 @@ class ManageAccountDashBoardController extends ReloadableController { pushAndPop(AppRoutes.MANAGE_ACCOUNT, arguments: ManageAccountArguments(accountId.value, userProfile.value)); } + + void backToMailboxDashBoard() { + if (currentContext != null && !_responsiveUtils.isDesktop(currentContext!)) { + closeMenuDrawer(); + } + popBack(); + } } \ No newline at end of file diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_view.dart b/lib/features/manage_account/presentation/manage_account_dashboard_view.dart index 6587d3a33..f50a0132f 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_view.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_view.dart @@ -77,19 +77,27 @@ class ManageAccountDashBoardView extends GetWidget {})) - .build(), - Expanded(child: Padding( - padding: const EdgeInsets.only(left: 24, right: 24, bottom: 16), - child: _viewDisplayedOfAccountMenuItem())) - ]) + mobile: SafeArea( + child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + Padding( + padding: !BuildUtils.isWeb && _responsiveUtils.isPortraitMobile(context) + ? const EdgeInsets.only(bottom: 16, left: 4, right: 8) + : const EdgeInsets.only(top: 16, bottom: 16, left: 24, right: 32), + child: _buildAppbar(context)), + (SearchBarView(_imagePaths) + ..hintTextSearch(AppLocalizations.of(context).search_emails) + ..addMargin(!BuildUtils.isWeb && _responsiveUtils.isPortraitMobile(context) + ? const EdgeInsets.only(left: 16, right: 16) + : const EdgeInsets.only(left: 32, right: 32)) + ..addOnOpenSearchViewAction(() => {})) + .build(), + Expanded(child: Padding( + padding: !BuildUtils.isWeb && _responsiveUtils.isPortraitMobile(context) + ? const EdgeInsets.only(left: 8) + : const EdgeInsets.only(left: 24), + child: _viewDisplayedOfAccountMenuItem())) + ]) + ) ), ]), ); diff --git a/lib/features/manage_account/presentation/menu/manage_account_menu_controller.dart b/lib/features/manage_account/presentation/menu/manage_account_menu_controller.dart index d68fc930a..c9df51626 100644 --- a/lib/features/manage_account/presentation/menu/manage_account_menu_controller.dart +++ b/lib/features/manage_account/presentation/menu/manage_account_menu_controller.dart @@ -23,4 +23,8 @@ class ManageAccountMenuController extends BaseController { void selectAccountMenuItem(AccountMenuItem newAccountMenuItem) { dashBoardController.selectAccountMenuItem(newAccountMenuItem); } + + void backToMailboxDashBoard() { + dashBoardController.backToMailboxDashBoard(); + } } \ No newline at end of file diff --git a/lib/features/manage_account/presentation/menu/manage_account_menu_view.dart b/lib/features/manage_account/presentation/menu/manage_account_menu_view.dart index 59ec21467..01bbff1c8 100644 --- a/lib/features/manage_account/presentation/menu/manage_account_menu_view.dart +++ b/lib/features/manage_account/presentation/menu/manage_account_menu_view.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_controller.dart'; -import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/account_property_tile_builder.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/account_menu_item_tile_builder.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class ManageAccountMenuView extends GetWidget { @@ -20,77 +20,94 @@ class ManageAccountMenuView extends GetWidget { elevation: _responsiveUtils.isDesktop(context) ? 0 : 16.0, child: Scaffold( backgroundColor: Colors.white, - body: Column( - children: [ - if (!_responsiveUtils.isDesktop(context)) - Container( - color: Colors.white, - padding: const EdgeInsets.only(top: 16, bottom: 16, left: 16), - child: Row(children: [ - (SloganBuilder(arrangedByHorizontal: true) - ..setSloganText(AppLocalizations.of(context).app_name) - ..setSloganTextAlign(TextAlign.center) - ..setSloganTextStyle(const TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold)) - ..setSizeLogo(24) - ..setLogo(_imagePaths.icLogoTMail)) - .build(), - Obx(() { - if (controller.dashBoardController.appInformation.value != null) { - return Padding( - padding: const EdgeInsets.only(top: 4), - child: Text( - 'v.${controller.dashBoardController.appInformation.value!.version}', - textAlign: TextAlign.center, - style: const TextStyle(fontSize: 13, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500), - ), - ); - } else { - return const SizedBox.shrink(); - } - }), - ]) - ), - if (!_responsiveUtils.isDesktop(context)) - const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2), - Expanded(child: Container( - color: _responsiveUtils.isDesktop(context) ? AppColor.colorBgDesktop : Colors.white, - child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Padding( - padding: const EdgeInsets.only(left: 32, top: 34), - child: Text( - AppLocalizations.of(context).manage_account, - style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 17))), - const SizedBox(height: 12), - ListView.builder( - padding: const EdgeInsets.only(left: 16, right: 8), - key: const Key('list_manage_account_property'), - shrinkWrap: true, - itemCount: controller.listAccountMenuItem.length, - itemBuilder: (context, index) => Obx(() => AccountMenuItemTileBuilder( - context, - _imagePaths, - _responsiveUtils, - controller.listAccountMenuItem[index], - controller.dashBoardController.accountMenuItemSelected.value, - onSelectAccountMenuItemAction: (newAccountMenuItem) => - controller.selectAccountMenuItem(newAccountMenuItem)))), - const Padding( - padding: EdgeInsets.symmetric(vertical: 16), - child: Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)), - Padding(padding: const EdgeInsets.only(left: 32), - child: InkWell( - onTap: () => controller.dashBoardController.logoutAction(), - child: Row(children: [ - SvgPicture.asset(_imagePaths.icLogout, fit: BoxFit.fill), - const SizedBox(width: 12), - Expanded(child: Text(AppLocalizations.of(context).sign_out, - style: const TextStyle(fontWeight: FontWeight.normal, fontSize: 15, color: Colors.black))) - ]) - ) - ), - ]), - )), - ] + body: SafeArea(right: false, bottom: false, + child: Column( + children: [ + if (!_responsiveUtils.isDesktop(context)) + Container( + color: Colors.white, + padding: const EdgeInsets.only(top: 16, bottom: 16, left: 16), + child: Row(children: [ + (SloganBuilder(arrangedByHorizontal: true) + ..setSloganText(AppLocalizations.of(context).app_name) + ..setSloganTextAlign(TextAlign.center) + ..setSloganTextStyle(const TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold)) + ..setSizeLogo(24) + ..setLogo(_imagePaths.icLogoTMail)) + .build(), + Obx(() { + if (controller.dashBoardController.appInformation.value != null) { + return Padding( + padding: const EdgeInsets.only(top: 4), + child: Text( + 'v.${controller.dashBoardController.appInformation.value!.version}', + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 13, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500), + ), + ); + } else { + return const SizedBox.shrink(); + } + }), + ]) + ), + if (!_responsiveUtils.isDesktop(context)) + const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2), + Expanded(child: Container( + color: _responsiveUtils.isDesktop(context) ? AppColor.colorBgDesktop : Colors.white, + child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + Padding( + padding: const EdgeInsets.only(left: 20, top: 24), + child: (ButtonBuilder(_imagePaths.icBack) + ..key(const Key('button_back')) + ..decoration(BoxDecoration(borderRadius: BorderRadius.circular(10), color: AppColor.colorBgMailboxSelected)) + ..paddingIcon(const EdgeInsets.only(right: 8)) + ..iconColor(AppColor.colorTextButton) + ..maxWidth(85) + ..size(16) + ..radiusSplash(10) + ..padding(const EdgeInsets.symmetric(vertical: 10)) + ..textStyle(const TextStyle(fontSize: 15, color: AppColor.colorTextButton, fontWeight: FontWeight.normal)) + ..onPressActionClick(() => controller.backToMailboxDashBoard()) + ..text(AppLocalizations.of(context).back, isVertical: false)) + .build()), + Padding( + padding: const EdgeInsets.only(left: 32, top: 20), + child: Text( + AppLocalizations.of(context).manage_account, + style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 17))), + const SizedBox(height: 12), + ListView.builder( + padding: const EdgeInsets.only(left: 16, right: 8), + key: const Key('list_manage_account_property'), + shrinkWrap: true, + itemCount: controller.listAccountMenuItem.length, + itemBuilder: (context, index) => Obx(() => AccountMenuItemTileBuilder( + context, + _imagePaths, + _responsiveUtils, + controller.listAccountMenuItem[index], + controller.dashBoardController.accountMenuItemSelected.value, + onSelectAccountMenuItemAction: (newAccountMenuItem) => + controller.selectAccountMenuItem(newAccountMenuItem)))), + const Padding( + padding: EdgeInsets.symmetric(vertical: 16), + child: Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)), + Padding(padding: const EdgeInsets.only(left: 32), + child: InkWell( + onTap: () => controller.dashBoardController.logoutAction(), + child: Row(children: [ + SvgPicture.asset(_imagePaths.icLogout, fit: BoxFit.fill), + const SizedBox(width: 12), + Expanded(child: Text(AppLocalizations.of(context).sign_out, + style: const TextStyle(fontWeight: FontWeight.normal, fontSize: 15, color: Colors.black))) + ]) + ) + ), + ]), + )), + ] + ) ), ) ); diff --git a/lib/features/manage_account/presentation/menu/widgets/account_property_tile_builder.dart b/lib/features/manage_account/presentation/menu/widgets/account_menu_item_tile_builder.dart similarity index 100% rename from lib/features/manage_account/presentation/menu/widgets/account_property_tile_builder.dart rename to lib/features/manage_account/presentation/menu/widgets/account_menu_item_tile_builder.dart diff --git a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart index d58bb83c1..3730a8b8e 100644 --- a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart +++ b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart @@ -33,7 +33,7 @@ class IdentitiesController extends BaseController { if (success is GetAllIdentitiesSuccess) { if (success.identities?.isNotEmpty == true) { listIdentities.value = success.identities ?? []; - selectIdentity(listIdentities.first); + setIdentityDefault(); } } } @@ -57,6 +57,15 @@ class IdentitiesController extends BaseController { consumeState(_getAllIdentitiesInteractor.execute(accountId)); } + void setIdentityDefault() { + try { + final identityDefault = listIdentities.firstWhere((identity) => identity.mayDelete == false); + selectIdentity(identityDefault); + } catch (exception) { + selectIdentity(listIdentities.first); + } + } + void selectIdentity(Identity? newIdentity) { identitySelected.value = newIdentity; } diff --git a/lib/features/manage_account/presentation/profiles/identities/identities_view.dart b/lib/features/manage_account/presentation/profiles/identities/identities_view.dart index 4d9587f69..c2cfd8c8b 100644 --- a/lib/features/manage_account/presentation/profiles/identities/identities_view.dart +++ b/lib/features/manage_account/presentation/profiles/identities/identities_view.dart @@ -82,8 +82,8 @@ class IdentitiesView extends GetWidget { responsiveUtils: _responsiveUtils, mobile: Scaffold( body: Container( - margin: const EdgeInsets.symmetric(vertical: 16), - child: Column( + margin: const EdgeInsets.only(top: 16, bottom: 16, right: 24), + child: SingleChildScrollView(child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ buttonSelectIdentity, @@ -91,7 +91,8 @@ class IdentitiesView extends GetWidget { _imagePaths, controller.identitySelected.value)), ] - )), + )) + ), floatingActionButton: _responsiveUtils.isMobile(context) ? FloatingActionButton( key: const Key('add_new_identity'), @@ -101,7 +102,7 @@ class IdentitiesView extends GetWidget { : null), desktop: Container( margin: const EdgeInsets.symmetric(vertical: 24, horizontal: 16), - child: Column( + child: SingleChildScrollView(child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( @@ -112,7 +113,7 @@ class IdentitiesView extends GetWidget { controller.identitySelected.value, maxWidth: constraints.maxWidth / 2)), ] - ) + )) ) )); } diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 7f4ce772e..4df4b782e 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -837,6 +837,7 @@ class ThreadController extends BaseController { void disableSearch() { emailListSearch.clear(); mailboxDashBoardController.disableSearch(); + cancelSelectEmail(); } void _searchEmail() { @@ -892,7 +893,7 @@ class ThreadController extends BaseController { _isLoadingMore = false; } - bool isSelectionEnabled() => mailboxDashBoardController.currentSelectMode.value == SelectMode.ACTIVE; + bool isSelectionEnabled() => mailboxDashBoardController.isSelectionEnabled(); void pressEmailSelectionAction(BuildContext context, EmailActionType actionType, List selectionEmail) { log('ThreadController::pressEmailSelectionAction(): selectionEmail: ${selectionEmail.length}'); @@ -1226,7 +1227,7 @@ class ThreadController extends BaseController { } void openMailboxLeftMenu() { - mailboxDashBoardController.openDrawer(); + mailboxDashBoardController.openMailboxMenuDrawer(); } void goToEmail(BuildContext context) { diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index 3a8d3e428..7156f7f07 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -75,7 +75,7 @@ class ThreadView extends GetWidget with AppLoaderMixin { ), _buildSuggestionBox(context) ]))), - if (!kIsWeb) _buildListButtonSelectionForMobile(context), + _buildListButtonSelectionForMobile(context), ] ) )) @@ -87,7 +87,10 @@ class ThreadView extends GetWidget with AppLoaderMixin { Widget _buildListButtonSelectionForMobile(BuildContext context) { return Obx(() { - if (controller.isSelectionEnabled() && !_responsiveUtils.isDesktop(context) && controller.listEmailSelected.isNotEmpty) { + if (controller.isSelectionEnabled() + && controller.isSearchActive() + && !_responsiveUtils.isDesktop(context) + && controller.listEmailSelected.isNotEmpty) { return Column(children: [ const Divider(color: AppColor.lineItemListColor, height: 1, thickness: 0.2), Padding( diff --git a/lib/features/thread/presentation/widgets/email_tile_builder.dart b/lib/features/thread/presentation/widgets/email_tile_builder.dart index 2a9063c5d..b3c26e5c7 100644 --- a/lib/features/thread/presentation/widgets/email_tile_builder.dart +++ b/lib/features/thread/presentation/widgets/email_tile_builder.dart @@ -61,8 +61,8 @@ class EmailTileBuilder { Widget _wrapContainerForTile(Widget tile) { if (_responsiveUtils.isDesktop(_context)) { return Container( - margin: _selectModeAll == SelectMode.ACTIVE ? EdgeInsets.only(top: 3, left: 8, right: 8) : EdgeInsets.zero, - padding: _selectModeAll == SelectMode.ACTIVE ? EdgeInsets.symmetric(vertical: 8) : EdgeInsets.zero, + margin: _selectModeAll == SelectMode.ACTIVE ? const EdgeInsets.only(top: 3, left: 8, right: 8) : EdgeInsets.zero, + padding: _selectModeAll == SelectMode.ACTIVE ? const EdgeInsets.symmetric(vertical: 8) : EdgeInsets.zero, decoration: _selectModeAll == SelectMode.ACTIVE && _presentationEmail.selectMode == SelectMode.ACTIVE ? BoxDecoration(borderRadius: BorderRadius.circular(14), color: AppColor.colorItemEmailSelectedDesktop) : null, @@ -70,7 +70,7 @@ class EmailTileBuilder { } else { return Container( margin: EdgeInsets.zero, - padding: EdgeInsets.only(bottom: 10, left: 16, right: 16), + padding: const EdgeInsets.only(bottom: 10, left: 16, right: 16), decoration: BoxDecoration(borderRadius: BorderRadius.circular(0), color: Colors.white), alignment: Alignment.center, child: tile); diff --git a/lib/features/thread/presentation/widgets/email_tile_web_builder.dart b/lib/features/thread/presentation/widgets/email_tile_web_builder.dart index bc5d9b68d..f4b48a10f 100644 --- a/lib/features/thread/presentation/widgets/email_tile_web_builder.dart +++ b/lib/features/thread/presentation/widgets/email_tile_web_builder.dart @@ -61,8 +61,8 @@ class EmailTileBuilder { Widget _wrapContainerForTile(Widget tile) { if (_responsiveUtils.isDesktop(_context)) { return Container( - margin: _selectModeAll == SelectMode.ACTIVE ? EdgeInsets.only(top: 3, left: 8, right: 8) : EdgeInsets.zero, - padding: _selectModeAll == SelectMode.ACTIVE ? EdgeInsets.symmetric(vertical: 8) : EdgeInsets.zero, + margin: _selectModeAll == SelectMode.ACTIVE ? const EdgeInsets.only(top: 3, left: 8, right: 8) : EdgeInsets.zero, + padding: _selectModeAll == SelectMode.ACTIVE ? const EdgeInsets.symmetric(vertical: 8) : EdgeInsets.zero, decoration: _selectModeAll == SelectMode.ACTIVE && _presentationEmail.selectMode == SelectMode.ACTIVE ? BoxDecoration(borderRadius: BorderRadius.circular(14), color: AppColor.colorItemEmailSelectedDesktop) : null, @@ -71,11 +71,11 @@ class EmailTileBuilder { } else { return Container( margin: _selectModeAll == SelectMode.ACTIVE - ? EdgeInsets.only(top: 3, left: 16, right: 16) + ? const EdgeInsets.only(top: 3, left: 16, right: 16) : EdgeInsets.zero, padding: _selectModeAll == SelectMode.ACTIVE - ? EdgeInsets.only(top: 8, bottom: 16, right: 8) - : EdgeInsets.only(bottom: 10, left: 16, right: 16), + ? const EdgeInsets.only(top: 8, bottom: 16, right: 8) + : const EdgeInsets.only(bottom: 10, left: 16, right: 16), decoration: _selectModeAll == SelectMode.ACTIVE && _presentationEmail.selectMode == SelectMode.ACTIVE ? BoxDecoration(borderRadius: BorderRadius.circular(14), color: AppColor.colorItemEmailSelectedDesktop) : BoxDecoration(borderRadius: BorderRadius.circular(0), color: Colors.white), @@ -198,14 +198,13 @@ class EmailTileBuilder { onLongPress: () => _emailActionClick?.call(EmailActionType.selection, _presentationEmail), onHover: (value) => setState(() => isHoverItem = value), child: Row(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Padding( - padding: const EdgeInsets.only(top: 8), - child: GestureDetector( - onTap: () => _emailActionClick?.call( - _selectModeAll == SelectMode.ACTIVE ? EmailActionType.selection : EmailActionType.preview, - _presentationEmail), - child: _buildAvatarIcon())), - const SizedBox(width: 12), + GestureDetector( + onTap: () => _emailActionClick?.call( + _selectModeAll == SelectMode.ACTIVE ? EmailActionType.selection : EmailActionType.preview, + _presentationEmail), + child: Padding( + padding: const EdgeInsets.only(top: 8, right: 12), + child: _buildAvatarIcon())), Expanded(child: Column(children: [ Transform( transform: Matrix4.translationValues(0.0, isHoverItem ? -10.0 : 0.0, 0.0), @@ -507,7 +506,7 @@ class EmailTileBuilder { }) { if (_selectModeAll == SelectMode.ACTIVE) { return Padding( - padding: EdgeInsets.all(12), + padding: const EdgeInsets.all(12), child: SvgPicture.asset( _presentationEmail.selectMode == SelectMode.ACTIVE ? _imagePaths.icSelected