TF-2311 Sync use variables in BaseController to avoid wasting memory

Signed-off-by: dab246 <tdvu@linagora.com>

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 21ac80615f7bc9e832fd72cb8ae6875c967d3cea)
This commit is contained in:
dab246
2023-11-14 17:33:17 +07:00
committed by Dat Vu
parent 4ff601b4fc
commit fb47832225
57 changed files with 727 additions and 958 deletions
@@ -1,5 +1,3 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
@@ -11,7 +9,4 @@ abstract class BaseMailboxDashBoardView extends GetWidget<MailboxDashBoardContro
with UserSettingPopupMenuMixin, FilterEmailPopupMenuMixin,
AppLoaderMixin {
BaseMailboxDashBoardView({Key? key}) : super(key: key);
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
}
@@ -27,9 +27,8 @@ import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_int
import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart';
import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
import 'package:tmail_ui_user/features/email/presentation/bindings/email_bindings.dart';
import 'package:tmail_ui_user/features/login/domain/repository/account_repository.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart';
import 'package:tmail_ui_user/features/home/domain/repository/session_repository.dart';
import 'package:tmail_ui_user/features/home/domain/usecases/store_session_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource/mailbox_datasource.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource/state_datasource.dart';
import 'package:tmail_ui_user/features/mailbox/data/datasource_impl/mailbox_cache_datasource_impl.dart';
@@ -93,8 +92,6 @@ import 'package:tmail_ui_user/features/sending_queue/domain/usecases/update_send
import 'package:tmail_ui_user/features/sending_queue/presentation/bindings/sending_queue_bindings.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/bindings/sending_queue_interactor_bindings.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/sending_queue_controller.dart';
import 'package:tmail_ui_user/features/session/domain/repository/session_repository.dart';
import 'package:tmail_ui_user/features/session/domain/usecases/store_session_interactor.dart';
import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart';
import 'package:tmail_ui_user/features/thread/data/datasource_impl/local_thread_datasource_impl.dart';
import 'package:tmail_ui_user/features/thread/data/datasource_impl/thread_datasource_impl.dart';
@@ -147,8 +144,6 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.find<GetSpamMailboxCachedInteractor>()));
Get.put(MailboxDashBoardController(
Get.find<GetAuthenticatedAccountInteractor>(),
Get.find<UpdateAuthenticationAccountInteractor>(),
Get.find<MoveToMailboxInteractor>(),
Get.find<DeleteEmailPermanentlyInteractor>(),
Get.find<MarkAsMailboxReadInteractor>(),
@@ -288,7 +283,6 @@ class MailboxDashBoardBindings extends BaseBindings {
Get.lazyPut(() => GetEmailByIdInteractor(
Get.find<ThreadRepository>(),
Get.find<EmailRepository>()));
Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find<AccountRepository>()));
Get.lazyPut(() => StoreSpamReportInteractor(
Get.find<SpamReportRepository>()));
Get.lazyPut(() => GetUnreadSpamMailboxInteractor(
@@ -57,8 +57,7 @@ import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_int
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart';
import 'package:tmail_ui_user/features/home/domain/usecases/store_session_interactor.dart';
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart';
import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart';
@@ -118,7 +117,6 @@ import 'package:tmail_ui_user/features/sending_queue/domain/usecases/get_all_sen
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/store_sending_email_interactor.dart';
import 'package:tmail_ui_user/features/sending_queue/domain/usecases/update_sending_email_interactor.dart';
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_arguments.dart';
import 'package:tmail_ui_user/features/session/domain/usecases/store_session_interactor.dart';
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
import 'package:tmail_ui_user/features/thread/domain/state/empty_spam_folder_state.dart';
@@ -143,22 +141,17 @@ import 'package:tmail_ui_user/main/routes/navigation_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
import 'package:tmail_ui_user/main/utils/email_receive_manager.dart';
import 'package:uuid/uuid.dart';
import 'package:workmanager/workmanager.dart' as work_manager;
class MailboxDashBoardController extends ReloadableController {
final AppToast _appToast = Get.find<AppToast>();
final ImagePaths _imagePaths = Get.find<ImagePaths>();
final RemoveEmailDraftsInteractor _removeEmailDraftsInteractor = Get.find<RemoveEmailDraftsInteractor>();
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>();
final search.SearchController searchController = Get.find<search.SearchController>();
final DownloadController downloadController = Get.find<DownloadController>();
final AppGridDashboardController appGridDashboardController = Get.find<AppGridDashboardController>();
final SpamReportController spamReportController = Get.find<SpamReportController>();
final NetworkConnectionController networkConnectionController = Get.find<NetworkConnectionController>();
final Uuid _uuid = Get.find<Uuid>();
final MoveToMailboxInteractor _moveToMailboxInteractor;
final DeleteEmailPermanentlyInteractor _deleteEmailPermanentlyInteractor;
@@ -237,8 +230,6 @@ class MailboxDashBoardController extends ReloadableController {
final _fcmService = FcmService.instance;
MailboxDashBoardController(
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor,
this._moveToMailboxInteractor,
this._deleteEmailPermanentlyInteractor,
this._markAsMailboxReadInteractor,
@@ -260,9 +251,6 @@ class MailboxDashBoardController extends ReloadableController {
this._saveEmailAsDraftsInteractor,
this._updateEmailDraftsInteractor,
this._deleteSendingEmailInteractor,
) : super(
getAuthenticatedAccountInteractor,
updateAuthenticationAccountInteractor
);
@override
@@ -297,10 +285,10 @@ class MailboxDashBoardController extends ReloadableController {
super.handleSuccessViewState(success);
if (success is SendEmailLoading) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).your_email_being_sent,
leadingSVGIcon: _imagePaths.icSendToast);
leadingSVGIcon: imagePaths.icSendToast);
}
} else if (success is GetEmailStateToRefreshSuccess) {
dispatchEmailUIAction(RefreshChangeEmailAction(success.storedState));
@@ -607,7 +595,7 @@ class MailboxDashBoardController extends ReloadableController {
}
void hideMailboxMenuWhenScreenSizeChange(BuildContext context) {
if (isDrawerOpen && _responsiveUtils.isWebDesktop(context)) {
if (isDrawerOpen && responsiveUtils.isWebDesktop(context)) {
WidgetsBinding.instance.addPostFrameCallback((_) {
closeMailboxMenuDrawer();
});
@@ -635,7 +623,7 @@ class MailboxDashBoardController extends ReloadableController {
bool _searchInsideEmailDetailedViewIsActive(BuildContext context) {
return PlatformInfo.isWeb
&& _responsiveUtils.isDesktop(context)
&& responsiveUtils.isDesktop(context)
&& dashboardRoute.value == DashboardRoutes.emailDetailed;
}
@@ -656,16 +644,16 @@ class MailboxDashBoardController extends ReloadableController {
void _saveEmailAsDraftsSuccess(SaveEmailAsDraftsSuccess success) {
if (currentContext != null && currentOverlayContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).drafts_saved,
actionName: AppLocalizations.of(currentContext!).discard,
onActionClick: () => _discardEmail(success.emailAsDrafts),
leadingSVGIcon: _imagePaths.icMailboxDrafts,
leadingSVGIcon: imagePaths.icMailboxDrafts,
leadingSVGIconColor: Colors.white,
backgroundColor: AppColor.toastSuccessBackgroundColor,
textColor: Colors.white,
actionIcon: SvgPicture.asset(_imagePaths.icUndo));
actionIcon: SvgPicture.asset(imagePaths.icUndo));
}
}
@@ -675,7 +663,7 @@ class MailboxDashBoardController extends ReloadableController {
void _moveToMailboxSuccess(MoveToMailboxSuccess success) {
if (success.moveAction == MoveAction.moving && currentContext != null && currentOverlayContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
success.emailActionType.getToastMessageMoveToMailboxSuccess(currentContext!, destinationPath: success.destinationPath),
actionName: AppLocalizations.of(currentContext!).undo,
@@ -687,11 +675,11 @@ class MailboxDashBoardController extends ReloadableController {
success.emailActionType
));
},
leadingSVGIcon: _imagePaths.icFolderMailbox,
leadingSVGIcon: imagePaths.icFolderMailbox,
leadingSVGIconColor: Colors.white,
backgroundColor: AppColor.toastSuccessBackgroundColor,
textColor: Colors.white,
actionIcon: SvgPicture.asset(_imagePaths.icUndo));
actionIcon: SvgPicture.asset(imagePaths.icUndo));
}
}
@@ -721,10 +709,10 @@ class MailboxDashBoardController extends ReloadableController {
void _deleteEmailPermanentlySuccess(DeleteEmailPermanentlySuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toast_message_delete_a_email_permanently_success,
leadingSVGIcon: _imagePaths.icDeleteToast
leadingSVGIcon: imagePaths.icDeleteToast
);
}
}
@@ -778,12 +766,12 @@ class MailboxDashBoardController extends ReloadableController {
? AppLocalizations.of(currentContext!).marked_message_toast(AppLocalizations.of(currentContext!).unread)
: AppLocalizations.of(currentContext!).marked_message_toast(AppLocalizations.of(currentContext!).read);
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
message,
leadingSVGIcon: readActions == ReadActions.markAsUnread
? _imagePaths.icUnreadToast
: _imagePaths.icReadToast
? imagePaths.icUnreadToast
: imagePaths.icReadToast
);
}
}
@@ -806,17 +794,17 @@ class MailboxDashBoardController extends ReloadableController {
final undoAction = readActions == ReadActions.markAsUnread ? ReadActions.markAsRead : ReadActions.markAsUnread;
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
message,
actionName: AppLocalizations.of(currentContext!).undo,
onActionClick: () {
markAsEmailRead(presentationEmail!, undoAction, MarkReadAction.undo);
},
leadingSVGIcon: _imagePaths.icToastSuccessMessage,
leadingSVGIcon: imagePaths.icToastSuccessMessage,
backgroundColor: AppColor.toastSuccessBackgroundColor,
textColor: Colors.white,
actionIcon: SvgPicture.asset(_imagePaths.icUndo),
actionIcon: SvgPicture.asset(imagePaths.icUndo),
);
}
}
@@ -852,12 +840,12 @@ class MailboxDashBoardController extends ReloadableController {
: AppLocalizations.of(currentContext!).marked_star_multiple_item(countMarkStarSuccess);
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
message,
leadingSVGIcon: markStarAction == MarkStarAction.unMarkStar
? _imagePaths.icUnStar
: _imagePaths.icStar);
? imagePaths.icUnStar
: imagePaths.icStar);
}
}
}
@@ -1037,7 +1025,7 @@ class MailboxDashBoardController extends ReloadableController {
currentOverlayContext != null &&
emailActionType != null &&
moveAction == MoveAction.moving) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
emailActionType.getToastMessageMoveToMailboxSuccess(
currentContext!,
@@ -1057,10 +1045,10 @@ class MailboxDashBoardController extends ReloadableController {
}
},
leadingSVGIconColor: Colors.white,
leadingSVGIcon: _imagePaths.icFolderMailbox,
leadingSVGIcon: imagePaths.icFolderMailbox,
backgroundColor: AppColor.toastSuccessBackgroundColor,
textColor: Colors.white,
actionIcon: SvgPicture.asset(_imagePaths.icUndo),
actionIcon: SvgPicture.asset(imagePaths.icUndo),
);
}
}
@@ -1129,7 +1117,7 @@ class MailboxDashBoardController extends ReloadableController {
Function? onCancelSelectionEmail,
}
) {
if (_responsiveUtils.isScreenWithShortestSide(context)) {
if (responsiveUtils.isScreenWithShortestSide(context)) {
(ConfirmationDialogActionSheetBuilder(context)
..messageText(actionType.getContentDialog(
context,
@@ -1147,14 +1135,14 @@ class MailboxDashBoardController extends ReloadableController {
showDialog(
context: context,
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(_imagePaths)
builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
..key(const Key('confirm_dialog_delete_emails_permanently'))
..title(actionType.getTitleDialog(context))
..content(actionType.getContentDialog(
context,
count: listEmails?.length,
mailboxName: mailboxCurrent?.getDisplayName(context)))
..addIcon(SvgPicture.asset(_imagePaths.icRemoveDialog, fit: BoxFit.fill))
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(const TextStyle(
fontSize: 17,
@@ -1202,7 +1190,7 @@ class MailboxDashBoardController extends ReloadableController {
void _emptyTrashFolderSuccess(EmptyTrashFolderSuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toast_message_empty_trash_folder_success);
}
@@ -1228,7 +1216,7 @@ class MailboxDashBoardController extends ReloadableController {
}
if (currentOverlayContext != null && currentContext != null && listEmailIdResult.isNotEmpty) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toast_message_delete_multiple_email_permanently_success(listEmailIdResult.length));
}
@@ -1348,17 +1336,17 @@ class MailboxDashBoardController extends ReloadableController {
if (success is MarkAsMailboxReadAllSuccess) {
if (currentContext != null && currentOverlayContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toastMessageMarkAsMailboxReadSuccess(success.mailboxDisplayName),
leadingSVGIcon: _imagePaths.icReadToast);
leadingSVGIcon: imagePaths.icReadToast);
}
} else if (success is MarkAsMailboxReadHasSomeEmailFailure) {
if (currentContext != null && currentOverlayContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toastMessageMarkAsMailboxReadHasSomeEmailFailure(success.mailboxDisplayName, success.countEmailsRead),
leadingSVGIcon: _imagePaths.icReadToast);
leadingSVGIcon: imagePaths.icReadToast);
}
}
}
@@ -1366,7 +1354,7 @@ class MailboxDashBoardController extends ReloadableController {
void _markAsReadMailboxFailure(MarkAsMailboxReadFailure failure) {
viewStateMarkAsReadMailbox.value = Right(UIState.idle);
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toastMessageMarkAsReadFolderFailureWithReason(
failure.mailboxDisplayName,
@@ -1379,7 +1367,7 @@ class MailboxDashBoardController extends ReloadableController {
void _markAsReadMailboxAllFailure(MarkAsMailboxReadAllFailure failure) {
viewStateMarkAsReadMailbox.value = Right(UIState.idle);
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toastMessageMarkAsReadFolderAllFailure(failure.mailboxDisplayName)
);
@@ -1487,7 +1475,7 @@ class MailboxDashBoardController extends ReloadableController {
void _handleUpdateVacationSuccess(UpdateVacationSuccess success) {
if (success.listVacationResponse.isNotEmpty) {
if (currentContext != null && currentOverlayContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).yourVacationResponderIsDisabledSuccessfully);
}
@@ -1547,7 +1535,7 @@ class MailboxDashBoardController extends ReloadableController {
selectedMailbox.value!.isTrash &&
selectedMailbox.value!.countTotalEmails > 0 &&
!searchController.isSearchActive() &&
_responsiveUtils.isWebDesktop(context);
responsiveUtils.isWebDesktop(context);
}
bool isEmptyTrashBannerEnabledOnMobile(BuildContext context) {
@@ -1555,7 +1543,7 @@ class MailboxDashBoardController extends ReloadableController {
selectedMailbox.value!.isTrash &&
selectedMailbox.value!.countTotalEmails > 0 &&
!searchController.isSearchActive() &&
!_responsiveUtils.isWebDesktop(context);
!responsiveUtils.isWebDesktop(context);
}
void emptyTrashAction(BuildContext context) {
@@ -1795,10 +1783,10 @@ class MailboxDashBoardController extends ReloadableController {
void _showToastSendMessageFailure(String message) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
message,
leadingSVGIcon: _imagePaths.icSendSuccessToast);
leadingSVGIcon: imagePaths.icSendSuccessToast);
}
}
@@ -1880,7 +1868,7 @@ class MailboxDashBoardController extends ReloadableController {
CreateNewMailboxRequest? mailboxRequest,
) {
log('MailboxDashBoardController::_handleStoreSendingEmail:');
final sendingEmail = emailRequest.toSendingEmail(_uuid.v1(), mailboxRequest: mailboxRequest);
final sendingEmail = emailRequest.toSendingEmail(uuid.v1(), mailboxRequest: mailboxRequest);
consumeState(_storeSendingEmailInteractor.execute(
accountId,
session.username,
@@ -1920,11 +1908,11 @@ class MailboxDashBoardController extends ReloadableController {
}
getAllSendingEmails();
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).messageHasBeenSavedToTheSendingQueue,
leadingSVGIconColor: Colors.white,
leadingSVGIcon: _imagePaths.icEmail);
leadingSVGIcon: imagePaths.icEmail);
}
}
@@ -1998,7 +1986,7 @@ class MailboxDashBoardController extends ReloadableController {
void _emptySpamFolderSuccess(EmptySpamFolderSuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toast_message_empty_trash_folder_success);
}
@@ -2009,7 +1997,7 @@ class MailboxDashBoardController extends ReloadableController {
selectedMailbox.value!.isSpam &&
selectedMailbox.value!.countTotalEmails > 0 &&
!searchController.isSearchActive() &&
_responsiveUtils.isWebDesktop(context);
responsiveUtils.isWebDesktop(context);
}
bool isEmptySpamBannerEnabledOnMobile(BuildContext context) {
@@ -2017,7 +2005,7 @@ class MailboxDashBoardController extends ReloadableController {
selectedMailbox.value!.isSpam &&
selectedMailbox.value!.countTotalEmails > 0 &&
!searchController.isSearchActive() &&
!_responsiveUtils.isWebDesktop(context);
!responsiveUtils.isWebDesktop(context);
}
void openDialogEmptySpamFolder(BuildContext context) {
@@ -2027,7 +2015,7 @@ class MailboxDashBoardController extends ReloadableController {
return;
}
if (_responsiveUtils.isScreenWithShortestSide(context)) {
if (responsiveUtils.isScreenWithShortestSide(context)) {
(ConfirmationDialogActionSheetBuilder(context)
..messageText(AppLocalizations.of(context).emptySpamMessageDialog)
..onCancelAction(AppLocalizations.of(context).cancel, popBack)
@@ -2036,7 +2024,7 @@ class MailboxDashBoardController extends ReloadableController {
if (spamMailbox.countTotalEmails > 0) {
emptySpamFolderAction(spamFolderId: spamMailbox.id);
} else {
_appToast.showToastWarningMessage(
appToast.showToastWarningMessage(
context,
AppLocalizations.of(context).noEmailInYourCurrentFolder
);
@@ -2047,11 +2035,11 @@ class MailboxDashBoardController extends ReloadableController {
showDialog(
context: context,
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (context) => PointerInterceptor(child: (ConfirmDialogBuilder(_imagePaths)
builder: (context) => PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
..key(const Key('confirm_dialog_empty_spam'))
..title(AppLocalizations.of(context).emptySpamFolder)
..content(AppLocalizations.of(context).emptySpamMessageDialog)
..addIcon(SvgPicture.asset(_imagePaths.icRemoveDialog, fit: BoxFit.fill))
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(const TextStyle(
fontSize: 17,
@@ -2063,7 +2051,7 @@ class MailboxDashBoardController extends ReloadableController {
if (spamMailbox.countTotalEmails > 0) {
emptySpamFolderAction(spamFolderId: spamMailbox.id);
} else {
_appToast.showToastWarningMessage(
appToast.showToastWarningMessage(
context,
AppLocalizations.of(context).noEmailInYourCurrentFolder
);
@@ -2146,10 +2134,10 @@ class MailboxDashBoardController extends ReloadableController {
));
}
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).message_has_been_sent_successfully,
leadingSVGIcon: _imagePaths.icSendSuccessToast
leadingSVGIcon: imagePaths.icSendSuccessToast
);
}
}
@@ -26,34 +26,34 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
width: ResponsiveUtils.defaultSizeLeftMenuMobile,
child: _buildScaffoldHaveDrawer(body: ThreadView())),
const VerticalDivider(color: AppColor.lineItemListColor, width: 12),
Expanded(child: EmailView()),
const Expanded(child: EmailView()),
],
);
return FocusDetector(
onForegroundGained: controller.handleOnForegroundGained,
child: Scaffold(
drawerEnableOpenDragGesture: responsiveUtils.hasLeftMenuDrawerActive(context),
drawerEnableOpenDragGesture: controller.responsiveUtils.hasLeftMenuDrawerActive(context),
body: Obx(() {
var bodyView = controller.searchController.isSearchEmailRunning
? EmailView()
? const EmailView()
: bodyLandscapeTablet;
switch(controller.dashboardRoute.value) {
case DashboardRoutes.thread:
return ResponsiveWidget(
responsiveUtils: responsiveUtils,
responsiveUtils: controller.responsiveUtils,
desktop: bodyView,
tabletLarge: bodyView,
landscapeTablet: bodyView,
mobile: _buildScaffoldHaveDrawer(body: ThreadView()));
case DashboardRoutes.emailDetailed:
return ResponsiveWidget(
responsiveUtils: responsiveUtils,
responsiveUtils: controller.responsiveUtils,
desktop: bodyView,
tabletLarge: bodyView,
landscapeTablet: bodyView,
mobile: EmailView());
mobile: const EmailView());
case DashboardRoutes.searchEmail:
return SafeArea(child: SearchEmailView());
case DashboardRoutes.sendingQueue:
@@ -64,11 +64,11 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
width: ResponsiveUtils.defaultSizeLeftMenuMobile,
child: _buildScaffoldHaveDrawer(body: const SendingQueueView())),
const VerticalDivider(color: AppColor.lineItemListColor, width: 12),
Expanded(child: EmailView()),
const Expanded(child: EmailView()),
],
);
return ResponsiveWidget(
responsiveUtils: responsiveUtils,
responsiveUtils: controller.responsiveUtils,
desktop: bodyView,
tabletLarge: bodyView,
landscapeTablet: bodyView,
@@ -81,7 +81,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
child: CupertinoActivityIndicator(color: AppColor.colorLoading)));
default:
return ResponsiveWidget(
responsiveUtils: responsiveUtils,
responsiveUtils: controller.responsiveUtils,
desktop: bodyView,
tabletLarge: bodyView,
landscapeTablet: bodyView,
@@ -97,7 +97,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
key: controller.scaffoldKey,
body: body,
drawer: ResponsiveWidget(
responsiveUtils: responsiveUtils,
responsiveUtils: controller.responsiveUtils,
mobile: SizedBox(
width: double.infinity,
child: MailboxView()
@@ -50,7 +50,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
return Portal(
child: Stack(children: [
ResponsiveWidget(
responsiveUtils: responsiveUtils,
responsiveUtils: controller.responsiveUtils,
desktop: Scaffold(
body: GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
@@ -73,7 +73,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
text: AppLocalizations.of(context).app_name,
textAlign: TextAlign.center,
textStyle: const TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold),
logoSVG: imagePaths.icTMailLogo,
logoSVG: controller.imagePaths.icTMailLogo,
onTapCallback: controller.redirectToInboxAction,
),
Obx(() {
@@ -160,7 +160,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
case DashboardRoutes.thread:
return _buildThreadViewForWebDesktop(context);
case DashboardRoutes.emailDetailed:
return EmailView();
return const EmailView();
default:
return const SizedBox.shrink();
}
@@ -177,7 +177,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
return SearchEmailView();
case DashboardRoutes.emailDetailed:
return controller.searchController.isSearchEmailRunning
? EmailView()
? const EmailView()
: _buildScaffoldHaveDrawer(
body: Row(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -186,7 +186,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
width: ResponsiveUtils.defaultSizeLeftMenuMobile,
child: ThreadView()),
const VerticalDivider(color: AppColor.lineItemListColor, width: 12),
Expanded(child: EmailView()),
const Expanded(child: EmailView()),
],
),
);
@@ -199,7 +199,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
width: ResponsiveUtils.defaultSizeLeftMenuMobile,
child: ThreadView()),
const VerticalDivider(color: AppColor.lineItemListColor, width: 12),
Expanded(child: EmailView()),
const Expanded(child: EmailView()),
],
),
);
@@ -210,7 +210,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
case DashboardRoutes.thread:
return _buildScaffoldHaveDrawer(body: ThreadView());
case DashboardRoutes.emailDetailed:
return EmailView();
return const EmailView();
case DashboardRoutes.searchEmail:
return SearchEmailView();
default:
@@ -219,10 +219,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
}),
),
Obx(() => controller.composerOverlayState.value == ComposerOverlayState.active
? ComposerView()
? const ComposerView()
: const SizedBox.shrink()
),
Obx(() => controller.searchMailboxActivated.value == true && !responsiveUtils.isWebDesktop(context)
Obx(() => controller.searchMailboxActivated.value == true && !controller.responsiveUtils.isWebDesktop(context)
? const SearchMailboxView()
: const SizedBox.shrink()
),
@@ -235,7 +235,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
return Scaffold(
key: controller.scaffoldKey,
drawer: ResponsiveWidget(
responsiveUtils: responsiveUtils,
responsiveUtils: controller.responsiveUtils,
mobile: SizedBox(width: ResponsiveUtils.defaultSizeDrawer, child: MailboxView()),
tabletLarge: SizedBox(width: ResponsiveUtils.defaultSizeLeftMenuMobile, child: MailboxView()),
desktop: const SizedBox.shrink()
@@ -326,7 +326,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
onTap: controller.showAppDashboardAction,
splashRadius: 20,
icon: SvgPicture.asset(
imagePaths.icAppDashboard,
controller.imagePaths.icAppDashboard,
width: 28,
height: 28,
fit: BoxFit.fill
@@ -370,7 +370,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
(failure) {
return TMailButtonWidget.fromIcon(
key: const Key('refresh_mailbox_button'),
icon: imagePaths.icRefresh,
icon: controller.imagePaths.icRefresh,
borderRadius: 10,
iconSize: 16,
onTapActionCallback: controller.refreshMailboxAction,
@@ -385,7 +385,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
} else {
return TMailButtonWidget.fromIcon(
key: const Key('refresh_mailbox_button'),
icon: imagePaths.icRefresh,
icon: controller.imagePaths.icRefresh,
borderRadius: 10,
iconSize: 16,
onTapActionCallback: controller.refreshMailboxAction,
@@ -398,7 +398,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
TMailButtonWidget(
key: const Key('select_all_emails_button'),
text: AppLocalizations.of(context).select_all,
icon: imagePaths.icSelectAll,
icon: controller.imagePaths.icSelectAll,
borderRadius: 10,
iconSize: 16,
padding: const EdgeInsetsDirectional.symmetric(horizontal: 12, vertical: 8),
@@ -410,7 +410,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
child: TMailButtonWidget(
key: const Key('mark_as_read_emails_button'),
text: AppLocalizations.of(context).mark_all_as_read,
icon: imagePaths.icSelectAll,
icon: controller.imagePaths.icSelectAll,
borderRadius: 10,
iconSize: 16,
padding: const EdgeInsetsDirectional.symmetric(horizontal: 12, vertical: 8),
@@ -423,13 +423,13 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
text: controller.filterMessageOption.value == FilterMessageOption.all
? AppLocalizations.of(context).filter_messages
: controller.filterMessageOption.value.getTitle(context),
icon: controller.filterMessageOption.value.getIconSelected(imagePaths),
icon: controller.filterMessageOption.value.getIconSelected(controller.imagePaths),
borderRadius: 10,
iconSize: 16,
padding: const EdgeInsetsDirectional.symmetric(horizontal: 12, vertical: 8),
backgroundColor: controller.filterMessageOption.value.getBackgroundColor(),
textStyle: controller.filterMessageOption.value.getTextStyle(),
trailingIcon: imagePaths.icArrowDown,
trailingIcon: controller.imagePaths.icArrowDown,
onTapActionAtPositionCallback: (position) {
return controller.openPopupMenuAction(
context,
@@ -455,19 +455,19 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
if (success is MarkAsMailboxReadLoading) {
return Padding(
padding: EdgeInsets.only(
top: responsiveUtils.isDesktop(context) ? 16 : 0,
top: controller.responsiveUtils.isDesktop(context) ? 16 : 0,
left: 16,
right: 16,
bottom: responsiveUtils.isDesktop(context) ? 0 : 16),
bottom: controller.responsiveUtils.isDesktop(context) ? 0 : 16),
child: horizontalLoadingWidget);
} else if (success is UpdatingMarkAsMailboxReadState) {
final percent = success.countRead / success.totalUnread;
return Padding(
padding: EdgeInsets.only(
top: responsiveUtils.isDesktop(context) ? 16 : 0,
top: controller.responsiveUtils.isDesktop(context) ? 16 : 0,
left: 16,
right: 16,
bottom: responsiveUtils.isDesktop(context) ? 0 : 16),
bottom: controller.responsiveUtils.isDesktop(context) ? 0 : 16),
child: horizontalPercentLoadingWidget(percent));
}
return const SizedBox.shrink();
@@ -622,7 +622,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
SvgPicture.asset(
filter.getIcon(imagePaths, isFilterSelected: isFilterSelected),
filter.getIcon(controller.imagePaths, isFilterSelected: isFilterSelected),
width: 16,
height: 16,
fit: BoxFit.fill),
@@ -643,7 +643,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
... [
const SizedBox(width: 4),
SvgPicture.asset(
imagePaths.icChevronDown,
controller.imagePaths.icChevronDown,
width: 16,
height: 16,
fit: BoxFit.fill),
@@ -664,7 +664,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
padding: EdgeInsets.zero,
child: PopupItemNoIconWidget(
receiveTime.getTitle(context),
svgIconSelected: imagePaths.icFilterSelected,
svgIconSelected: controller.imagePaths.icFilterSelected,
maxWidth: 320,
isSelected: receiveTimeSelected == receiveTime,
onCallbackAction: () => onCallBack?.call(receiveTime),
@@ -682,7 +682,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
padding: EdgeInsets.zero,
child: PopupItemNoIconWidget(
sortType.getTitle(context),
svgIconSelected: imagePaths.icFilterSelected,
svgIconSelected: controller.imagePaths.icFilterSelected,
maxWidth: 332,
isSelected: sortOrderSelected == sortType,
onCallbackAction: () => onCallBack?.call(sortType),
@@ -703,7 +703,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
child: TMailButtonWidget(
key: const Key('compose_email_button'),
text: AppLocalizations.of(context).compose,
icon: imagePaths.icComposeWeb,
icon: controller.imagePaths.icComposeWeb,
borderRadius: 10,
iconSize: 24,
iconColor: Colors.white,
@@ -21,10 +21,8 @@ class AdvancedSearchFilterFormBottomView extends GetWidget<AdvancedFilterControl
@override
Widget build(BuildContext context) {
final responsiveUtils = Get.find<ResponsiveUtils>();
return Padding(
padding: EdgeInsets.only(top: !responsiveUtils.isWebDesktop(context) ? 8 : 20),
padding: EdgeInsets.only(top: !controller.responsiveUtils.isWebDesktop(context) ? 8 : 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -35,7 +33,7 @@ class AdvancedSearchFilterFormBottomView extends GetWidget<AdvancedFilterControl
currentFocusNode: focusManager?.attachmentCheckboxFocusNode,
nextFocusNode: focusManager?.searchButtonFocusNode),
),
_buildListButton(context, responsiveUtils),
_buildListButton(context, controller.responsiveUtils),
],
),
);
@@ -22,9 +22,6 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
Key? key,
}) : super(key: key);
final ImagePaths _imagePaths = Get.find<ImagePaths>();
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
@override
Widget build(BuildContext context) {
return FocusTraversalGroup(
@@ -102,7 +99,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
const SizedBox(width: 10),
buildIconWeb(
icon: SvgPicture.asset(
_imagePaths.icCalendarSB,
controller.imagePaths.icCalendarSB,
width: 24,
height: 24,
fit: BoxFit.fill),
@@ -126,7 +123,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
padding: EdgeInsets.zero,
child: PopupItemNoIconWidget(
receiveTime.getTitle(context),
svgIconSelected: _imagePaths.icFilterSelected,
svgIconSelected: controller.imagePaths.icFilterSelected,
maxWidth: 320,
isSelected: controller.dateFilterSelectedFormAdvancedSearch.value == receiveTime,
onCallbackAction: () => controller.updateReceiveDateSearchFilter(context, receiveTime),
@@ -146,7 +143,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
}) {
final child = [
SizedBox(
width: _responsiveUtils.isMobile(context) || _responsiveUtils.landscapeTabletSupported(context)
width: controller.responsiveUtils.isMobile(context) || controller.responsiveUtils.landscapeTabletSupported(context)
? null : 112,
child: Text(
advancedSearchFilterField.getTitle(context),
@@ -157,7 +154,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
),
),
const Padding(padding: EdgeInsets.all(4)),
if (_responsiveUtils.isMobile(context))
if (controller.responsiveUtils.isMobile(context))
_buildTextField(
isSelectFormList: isSelectFormList,
onTap: onTap,
@@ -168,10 +165,10 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
advancedSearchFilterField: advancedSearchFilterField,
textEditingController: textEditingController,
)
else if (_responsiveUtils.landscapeTabletSupported(context))
else if (controller.responsiveUtils.landscapeTabletSupported(context))
if (advancedSearchFilterField == AdvancedSearchFilterField.date)
Obx(() => DateDropDownButton(
_imagePaths,
controller.imagePaths,
startDate: controller.startDate.value,
endDate: controller.endDate.value,
receiveTimeSelected: controller.dateFilterSelectedFormAdvancedSearch.value,
@@ -179,7 +176,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
))
else if (advancedSearchFilterField == AdvancedSearchFilterField.sortBy)
Obx(() => SortByDropDownButton(
imagePaths: _imagePaths,
imagePaths: controller.imagePaths,
sortOrderSelected: controller.searchController.sortOrderFiltered.value,
onSortOrderSelected: controller.updateSortOrder,
))
@@ -210,7 +207,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
];
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8),
child: _responsiveUtils.isMobile(context) || _responsiveUtils.landscapeTabletSupported(context)
child: controller.responsiveUtils.isMobile(context) || controller.responsiveUtils.landscapeTabletSupported(context)
? Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
@@ -234,7 +231,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
switch (advancedSearchFilterField) {
case AdvancedSearchFilterField.date:
return Obx(() => DateDropDownButton(
_imagePaths,
controller.imagePaths,
startDate: controller.startDate.value,
endDate: controller.endDate.value,
receiveTimeSelected: controller.dateFilterSelectedFormAdvancedSearch.value,
@@ -242,7 +239,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
));
case AdvancedSearchFilterField.sortBy:
return Obx(() => SortByDropDownButton(
imagePaths: _imagePaths,
imagePaths: controller.imagePaths,
sortOrderSelected: controller.searchController.sortOrderFiltered.value,
onSortOrderSelected: controller.updateSortOrder,
));
@@ -336,7 +333,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
suffixIcon: isSelectFormList
? buildIconWeb(
icon: SvgPicture.asset(
_imagePaths.icDropDown,
controller.imagePaths.icDropDown,
),
)
: null,