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
+65 -59
View File
@@ -1,9 +1,11 @@
import 'package:contact/contact/model/capability_contact.dart';
import 'package:core/data/network/config/dynamic_url_interceptors.dart';
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/toast/tmail_toast.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/fps_manager.dart';
@@ -52,27 +54,31 @@ import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/utils/app_config.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart';
import 'package:uuid/uuid.dart';
abstract class BaseController extends GetxController
with MessageDialogActionMixin,
PopupContextMenuActionMixin {
final CachingManager cachingManager = Get.find<CachingManager>();
final languageCacheManager = Get.find<LanguageCacheManager>();
final authorizationInterceptors = Get.find<AuthorizationInterceptors>();
final authorizationIsolateInterceptors = Get.find<AuthorizationInterceptors>(tag: BindingTag.isolateTag);
final LanguageCacheManager languageCacheManager = Get.find<LanguageCacheManager>();
final AuthorizationInterceptors authorizationInterceptors = Get.find<AuthorizationInterceptors>();
final AuthorizationInterceptors authorizationIsolateInterceptors = Get.find<AuthorizationInterceptors>(tag: BindingTag.isolateTag);
final DynamicUrlInterceptors dynamicUrlInterceptors = Get.find<DynamicUrlInterceptors>();
final DeleteCredentialInteractor deleteCredentialInteractor = Get.find<DeleteCredentialInteractor>();
final LogoutOidcInteractor logoutOidcInteractor = Get.find<LogoutOidcInteractor>();
final DeleteAuthorityOidcInteractor deleteAuthorityOidcInteractor = Get.find<DeleteAuthorityOidcInteractor>();
final AppToast appToast = Get.find<AppToast>();
final ImagePaths imagePaths = Get.find<ImagePaths>();
final ResponsiveUtils responsiveUtils = Get.find<ResponsiveUtils>();
final Uuid uuid = Get.find<Uuid>();
final _fcmReceiver = FcmReceiver.instance;
bool _isFcmEnabled = false;
GetFCMSubscriptionLocalInteractor? _getSubscriptionLocalInteractor;
DestroySubscriptionInteractor? _destroySubscriptionInteractor;
final AppToast _appToast = Get.find<AppToast>();
final ImagePaths _imagePaths = Get.find<ImagePaths>();
final viewState = Rx<Either<Failure, Success>>(Right(UIState.idle));
FpsCallback? fpsCallback;
@@ -123,12 +129,12 @@ abstract class BaseController extends GetxController
logError('BaseController::_performFilterExceptionInError(): $error');
if (error is NoNetworkError || error is ConnectionTimeout || error is InternalServerError) {
if (PlatformInfo.isWeb && currentOverlayContext != null && currentContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).no_internet_connection,
actionName: AppLocalizations.of(currentContext!).skip,
onActionClick: ToastView.dismiss,
leadingSVGIcon: _imagePaths.icNotConnection,
leadingSVGIcon: imagePaths.icNotConnection,
backgroundColor: AppColor.textFieldErrorBorderColor,
textColor: Colors.white,
infinityToast: true,
@@ -137,7 +143,7 @@ abstract class BaseController extends GetxController
return error;
} else if (error is BadCredentialsException) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).badCredentials
);
@@ -145,7 +151,7 @@ abstract class BaseController extends GetxController
return error;
} else if (error is ConnectionError) {
if (authorizationInterceptors.isAppRunning && currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).connectionError
);
@@ -164,38 +170,36 @@ abstract class BaseController extends GetxController
return;
}
if (exception is BadCredentialsException || exception is ConnectionError) {
performInvokeLogoutAction();
clearDataAndGoToLoginPage();
}
}
void handleFailureViewState(Failure failure) {
void handleFailureViewState(Failure failure) async {
logError('BaseController::handleFailureViewState(): ${failure.runtimeType}');
if (failure is LogoutOidcFailure) {
if (_isFcmEnabled) {
_getSubscriptionLocalAction();
} else {
_logoutOIDCAction();
await clearDataAndGoToLoginPage();
}
} else if (failure is GetFCMSubscriptionLocalFailure) {
performInvokeLogoutAction();
} else if (failure is DestroySubscriptionFailure) {
performInvokeLogoutAction();
} else if (failure is GetFCMSubscriptionLocalFailure ||
failure is DestroySubscriptionFailure) {
await clearDataAndGoToLoginPage();
}
}
void handleSuccessViewState(Success success) {
void handleSuccessViewState(Success success) async {
log('BaseController::handleSuccessViewState(): ${success.runtimeType}');
if (success is LogoutOidcSuccess) {
if (_isFcmEnabled) {
_getSubscriptionLocalAction();
} else {
_logoutOIDCAction();
await clearDataAndGoToLoginPage();
}
} else if (success is GetFCMSubscriptionLocalSuccess) {
final subscriptionId = success.fcmSubscription.subscriptionId;
_destroySubscriptionAction(subscriptionId);
_destroySubscriptionAction(success.fcmSubscription.subscriptionId);
} else if (success is DestroySubscriptionSuccess) {
performInvokeLogoutAction();
await clearDataAndGoToLoginPage();
}
}
@@ -275,7 +279,7 @@ abstract class BaseController extends GetxController
bool get isAuthenticatedWithOidc => authenticationType == AuthenticationType.oidc;
bool _isFcmActivated(Session session, AccountId accountId) =>
[FirebaseCapability.fcmIdentifier].isSupported(session, accountId) && AppConfig.fcmAvailable;
FirebaseCapability.fcmIdentifier.isSupported(session, accountId) && AppConfig.fcmAvailable;
void goToLogin({LoginArguments? arguments}) {
if (Get.currentRoute != AppRoutes.login) {
@@ -283,10 +287,9 @@ abstract class BaseController extends GetxController
}
}
void logout(Session? session, AccountId? accountId) {
void logout(Session? session, AccountId? accountId) async {
if (session == null || accountId == null) {
logError('BaseController::logout(): Session is $session OR AccountId is $accountId');
performInvokeLogoutAction();
await clearDataAndGoToLoginPage();
return;
}
_isFcmEnabled = _isFcmActivated(session, accountId);
@@ -296,71 +299,74 @@ abstract class BaseController extends GetxController
if (_isFcmEnabled) {
_getSubscriptionLocalAction();
} else {
_logoutAction();
await clearDataAndGoToLoginPage();
}
}
}
void _destroySubscriptionAction(String subscriptionId) {
try {
_destroySubscriptionInteractor = Get.find<DestroySubscriptionInteractor>();
void _destroySubscriptionAction(String subscriptionId) async {
_destroySubscriptionInteractor = getBinding<DestroySubscriptionInteractor>();
if (_destroySubscriptionInteractor != null) {
consumeState(_destroySubscriptionInteractor!.execute(subscriptionId));
} catch(e) {
logError('BaseController::destroySubscriptionAction(): exception: $e');
performInvokeLogoutAction();
}
}
void _getSubscriptionLocalAction() {
try {
_getSubscriptionLocalInteractor = Get.find<GetFCMSubscriptionLocalInteractor>();
consumeState(_getSubscriptionLocalInteractor!.execute());
} catch (e) {
logError('BaseController::getSubscriptionLocalAction(): exception: $e');
performInvokeLogoutAction();
}
}
void performInvokeLogoutAction() {
log('BaseController::performInvokeLogoutAction():');
if (isAuthenticatedWithOidc) {
_logoutOIDCAction();
} else {
_logoutAction();
await clearDataAndGoToLoginPage();
}
}
void _logoutAction() async {
log('BaseController::_logoutAction():');
void _getSubscriptionLocalAction() async {
_getSubscriptionLocalInteractor = getBinding<GetFCMSubscriptionLocalInteractor>();
if (_getSubscriptionLocalInteractor != null) {
consumeState(_getSubscriptionLocalInteractor!.execute());
} else {
await clearDataAndGoToLoginPage();
}
}
Future<void> clearDataAndGoToLoginPage() async {
log('BaseController::clearDataAndGoToLoginPage:');
await clearAllData();
goToLogin(arguments: LoginArguments(
isAuthenticatedWithOidc
? LoginFormType.ssoForm
: LoginFormType.credentialForm
));
}
Future<void> clearAllData() async {
if (isAuthenticatedWithOidc) {
await _clearOidcAuthData();
} else {
await _clearBasicAuthData();
}
}
Future<void> _clearBasicAuthData() async {
await Future.wait([
deleteCredentialInteractor.execute(),
cachingManager.clearAll(),
languageCacheManager.removeLanguage(),
]);
cachingManager.clearAllFileInStorage();
await cachingManager.clearAllFileInStorage();
authorizationInterceptors.clear();
authorizationIsolateInterceptors.clear();
if (_isFcmEnabled) {
_fcmReceiver.deleteFcmToken();
}
await cachingManager.closeHive();
goToLogin(arguments: LoginArguments(LoginFormType.credentialForm));
}
void _logoutOIDCAction() async {
log('BaseController::_logoutOIDCAction():');
Future<void> _clearOidcAuthData() async {
await Future.wait([
deleteAuthorityOidcInteractor.execute(),
cachingManager.clearAll(),
languageCacheManager.removeLanguage(),
]);
cachingManager.clearAllFileInStorage();
await cachingManager.clearAllFileInStorage();
authorizationIsolateInterceptors.clear();
authorizationInterceptors.clear();
if (_isFcmEnabled) {
_fcmReceiver.deleteFcmToken();
}
await cachingManager.closeHive();
goToLogin(arguments: LoginArguments(LoginFormType.ssoForm));
}
}
@@ -86,7 +86,6 @@ import 'package:tmail_ui_user/features/upload/domain/usecases/local_file_picker_
import 'package:tmail_ui_user/features/upload/presentation/controller/upload_controller.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:uuid/uuid.dart';
import 'package:universal_html/html.dart' as html;
class ComposerController extends BaseController {
@@ -94,10 +93,6 @@ class ComposerController extends BaseController {
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
final richTextMobileTabletController = Get.find<RichTextMobileTabletController>();
final networkConnectionController = Get.find<NetworkConnectionController>();
final _appToast = Get.find<AppToast>();
final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _uuid = Get.find<Uuid>();
final _dynamicUrlInterceptors = Get.find<DynamicUrlInterceptors>();
final expandModeAttachments = ExpandMode.EXPAND.obs;
@@ -726,7 +721,7 @@ class ComposerController extends BaseController {
final inReplyTo = _generateInReplyTo(arguments);
final references = _generateReferences(arguments);
final generatePartId = PartId(_uuid.v1());
final generatePartId = PartId(uuid.v1());
return Email(
mailboxIds: mailboxIds.isNotEmpty ? mailboxIds : null,
@@ -828,7 +823,7 @@ class ComposerController extends BaseController {
AppLocalizations.of(context).add_recipients,
onConfirmAction: () => {isSendEmailLoading.value = false},
title: AppLocalizations.of(context).sending_failed,
icon: SvgPicture.asset(_imagePaths.icSendToastError, fit: BoxFit.fill),
icon: SvgPicture.asset(imagePaths.icSendToastError, fit: BoxFit.fill),
hasCancelButton: false);
return;
}
@@ -848,7 +843,7 @@ class ComposerController extends BaseController {
isSendEmailLoading.value = false;
},
title: AppLocalizations.of(context).sending_failed,
icon: SvgPicture.asset(_imagePaths.icSendToastError, fit: BoxFit.fill),
icon: SvgPicture.asset(imagePaths.icSendToastError, fit: BoxFit.fill),
hasCancelButton: false);
return;
}
@@ -860,7 +855,7 @@ class ComposerController extends BaseController {
onConfirmAction: () => _handleSendMessages(context),
onCancelAction: () => {isSendEmailLoading.value = false},
title: AppLocalizations.of(context).empty_subject,
icon: SvgPicture.asset(_imagePaths.icEmpty, fit: BoxFit.fill),
icon: SvgPicture.asset(imagePaths.icEmpty, fit: BoxFit.fill),
);
return;
}
@@ -872,7 +867,7 @@ class ComposerController extends BaseController {
AppLocalizations.of(context).got_it,
onConfirmAction: () => {isSendEmailLoading.value = false},
title: AppLocalizations.of(context).sending_failed,
icon: SvgPicture.asset(_imagePaths.icSendToastError, fit: BoxFit.fill),
icon: SvgPicture.asset(imagePaths.icSendToastError, fit: BoxFit.fill),
hasCancelButton: false);
return;
}
@@ -885,7 +880,7 @@ class ComposerController extends BaseController {
AppLocalizations.of(context).got_it,
onConfirmAction: () => {isSendEmailLoading.value = false},
title: AppLocalizations.of(context).sending_failed,
icon: SvgPicture.asset(_imagePaths.icSendToastError, fit: BoxFit.fill),
icon: SvgPicture.asset(imagePaths.icSendToastError, fit: BoxFit.fill),
hasCancelButton: false);
return;
}
@@ -957,7 +952,7 @@ class ComposerController extends BaseController {
final mailboxRequest = mailboxDashBoardController.outboxMailbox?.id == null
? CreateNewMailboxRequest(
Id(_uuid.v1()),
Id(uuid.v1()),
MailboxName(PresentationMailbox.outboxRole.inCaps)
)
: null;
@@ -985,7 +980,7 @@ class ComposerController extends BaseController {
},
onCancelAction: _closeComposerAction,
title: AppLocalizations.of(context).youAreInOfflineMode,
icon: SvgPicture.asset(_imagePaths.icDialogOfflineMode),
icon: SvgPicture.asset(imagePaths.icDialogOfflineMode),
alignCenter: true,
messageStyle: const TextStyle(
color: AppColor.colorTitleSendingItem,
@@ -1124,7 +1119,7 @@ class ComposerController extends BaseController {
void _pickFileFailure(Failure failure) {
if (failure is LocalFilePickerFailure) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).can_not_upload_this_file_as_attachments);
}
@@ -1765,7 +1760,7 @@ class ComposerController extends BaseController {
void insertImage(BuildContext context, double maxWith) async {
clearFocusEditor(context);
if (_responsiveUtils.isMobile(context)) {
if (responsiveUtils.isMobile(context)) {
maxWithEditor = maxWith - 40;
} else {
maxWithEditor = maxWith - 120;
@@ -1779,7 +1774,7 @@ class ComposerController extends BaseController {
}
} else {
if (context.mounted) {
_appToast.showToastErrorMessage(context, AppLocalizations.of(context).cannotSelectThisImage);
appToast.showToastErrorMessage(context, AppLocalizations.of(context).cannotSelectThisImage);
}
}
}
@@ -1912,7 +1907,7 @@ class ComposerController extends BaseController {
BuildContext context,
) {
scrollController.jumpTo(
realCoordinateY - (_responsiveUtils.isLandscapeMobile(context) ? 0 : headerEditorMobileHeight / 2),
realCoordinateY - (responsiveUtils.isLandscapeMobile(context) ? 0 : headerEditorMobileHeight / 2),
);
}
@@ -1978,7 +1973,7 @@ class ComposerController extends BaseController {
) async {
log('ComposerController::handleImageUploadSuccess:NAME: ${fileUpload.name} | TYPE: ${fileUpload.type} | SIZE: ${fileUpload.size}');
if (fileUpload.base64 == null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
context,
AppLocalizations.of(context).can_not_upload_this_file_as_attachments
);
@@ -1990,7 +1985,7 @@ class ComposerController extends BaseController {
if (fileInfo != null) {
_uploadInlineAttachmentsAction(fileInfo);
} else if (context.mounted) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
context,
AppLocalizations.of(context).can_not_upload_this_file_as_attachments
);
@@ -2000,7 +1995,7 @@ class ComposerController extends BaseController {
if (fileInfo != null) {
_addAttachmentFromDragAndDrop(fileInfo: fileInfo);
} else if (context.mounted) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
context,
AppLocalizations.of(context).can_not_upload_this_file_as_attachments
);
@@ -2015,7 +2010,7 @@ class ComposerController extends BaseController {
String? base64Str,
}) {
logError('ComposerController::handleImageUploadFailure:fileUpload: $fileUpload | uploadError: $uploadError');
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
context,
'${AppLocalizations.of(context).can_not_upload_this_file_as_attachments}. (${uploadError.name})'
);
@@ -2083,7 +2078,7 @@ class ComposerController extends BaseController {
var contentHtml = '';
if (PlatformInfo.isWeb) {
if (_responsiveUtils.isDesktop(context) &&
if (responsiveUtils.isDesktop(context) &&
screenDisplayMode.value == ScreenDisplayMode.minimize) {
contentHtml = _textEditorWeb ?? '';
} else {
@@ -2176,7 +2171,7 @@ class ComposerController extends BaseController {
(
FromComposerBottomSheetBuilder(
context,
_imagePaths,
imagePaths,
listFromIdentities,
scrollControllerIdentities,
searchIdentitiesInputController
@@ -1,5 +1,3 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/context_menu/simple_context_menu_action_builder.dart';
import 'package:core/presentation/views/responsive/responsive_widget.dart';
import 'package:file_picker/file_picker.dart';
@@ -31,15 +29,12 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class ComposerView extends GetWidget<ComposerController> {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
ComposerView({Key? key}) : super(key: key);
const ComposerView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return ResponsiveWidget(
responsiveUtils: _responsiveUtils,
responsiveUtils: controller.responsiveUtils,
mobile: MobileContainerView(
keyboardRichTextController: controller.keyboardRichTextController,
onCloseViewAction: () => controller.saveToDraftAndClose(context, canPop: false),
@@ -55,13 +50,13 @@ class ComposerView extends GetWidget<ComposerController> {
: null,
backgroundColor: MobileAppBarComposerWidgetStyle.backgroundColor,
childBuilder: (context) => SafeArea(
left: !_responsiveUtils.isLandscapeMobile(context),
right: !_responsiveUtils.isLandscapeMobile(context),
left: !controller.responsiveUtils.isLandscapeMobile(context),
right: !controller.responsiveUtils.isLandscapeMobile(context),
child: Container(
color: ComposerStyle.mobileBackgroundColor,
child: Column(
children: [
if (_responsiveUtils.isLandscapeMobile(context))
if (controller.responsiveUtils.isLandscapeMobile(context))
Obx(() => LandscapeAppBarComposerWidget(
isSendButtonEnabled: controller.isEnableEmailSendButton.value,
onCloseViewAction: () => controller.saveToDraftAndClose(context),
@@ -103,8 +98,8 @@ class ComposerView extends GetWidget<ComposerController> {
if (controller.fromRecipientState.value == PrefixRecipientState.enabled)
FromComposerMobileWidget(
selectedIdentity: controller.identitySelected.value,
imagePaths: _imagePaths,
responsiveUtils: _responsiveUtils,
imagePaths: controller.imagePaths,
responsiveUtils: controller.responsiveUtils,
margin: ComposerStyle.mobileRecipientMargin,
padding: ComposerStyle.mobileRecipientPadding,
onTap: () => controller.openSelectIdentityBottomSheet(context)
@@ -252,7 +247,7 @@ class ComposerView extends GetWidget<ComposerController> {
items: controller.listFromIdentities,
itemSelected: controller.identitySelected.value,
dropdownKey: controller.identityDropdownKey,
imagePaths: _imagePaths,
imagePaths: controller.imagePaths,
padding: ComposerStyle.mobileRecipientPadding,
margin: ComposerStyle.mobileRecipientMargin,
onChangeIdentity: controller.onChangeIdentity,
@@ -390,7 +385,7 @@ class ComposerView extends GetWidget<ComposerController> {
Widget _pickPhotoAndVideoAction(BuildContext context) {
return (SimpleContextMenuActionBuilder(
const Key('pick_photo_and_video_context_menu_action'),
SvgPicture.asset(_imagePaths.icPhotoLibrary, width: 24, height: 24, fit: BoxFit.fill),
SvgPicture.asset(controller.imagePaths.icPhotoLibrary, width: 24, height: 24, fit: BoxFit.fill),
AppLocalizations.of(context).photos_and_videos)
..onActionClick((_) => controller.openFilePickerByType(context, FileType.media)))
.build();
@@ -399,7 +394,7 @@ class ComposerView extends GetWidget<ComposerController> {
Widget _browseFileAction(BuildContext context) {
return (SimpleContextMenuActionBuilder(
const Key('browse_file_context_menu_action'),
SvgPicture.asset(_imagePaths.icMore, width: 24, height: 24, fit: BoxFit.fill),
SvgPicture.asset(controller.imagePaths.icMore, width: 24, height: 24, fit: BoxFit.fill),
AppLocalizations.of(context).browse)
..onActionClick((_) => controller.openFilePickerByType(context, FileType.any)))
.build();
@@ -410,11 +405,11 @@ class ComposerView extends GetWidget<ComposerController> {
PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemWidget(
_imagePaths.icReadReceipt,
controller.imagePaths.icReadReceipt,
AppLocalizations.of(context).requestReadReceipt,
styleName: ComposerStyle.popupItemTextStyle,
padding: ComposerStyle.popupItemPadding,
selectedIcon: _imagePaths.icFilterSelected,
selectedIcon: controller.imagePaths.icFilterSelected,
isSelected: controller.hasRequestReadReceipt.value,
onCallbackAction: () {
popBack();
@@ -430,12 +425,12 @@ class ComposerView extends GetWidget<ComposerController> {
PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemWidget(
_imagePaths.icReadReceipt,
controller.imagePaths.icReadReceipt,
AppLocalizations.of(context).requestReadReceipt,
styleName: ComposerStyle.popupItemTextStyle,
padding: ComposerStyle.popupItemPadding,
colorIcon: ComposerStyle.popupItemIconColor,
selectedIcon: _imagePaths.icFilterSelected,
selectedIcon: controller.imagePaths.icFilterSelected,
isSelected: controller.hasRequestReadReceipt.value,
onCallbackAction: () {
popBack();
@@ -446,7 +441,7 @@ class ComposerView extends GetWidget<ComposerController> {
PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemWidget(
_imagePaths.icSaveToDraft,
controller.imagePaths.icSaveToDraft,
AppLocalizations.of(context).saveAsDraft,
colorIcon: ComposerStyle.popupItemIconColor,
styleName: ComposerStyle.popupItemTextStyle,
@@ -460,7 +455,7 @@ class ComposerView extends GetWidget<ComposerController> {
PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemWidget(
_imagePaths.icDeleteMailbox,
controller.imagePaths.icDeleteMailbox,
AppLocalizations.of(context).delete,
styleName: ComposerStyle.popupItemTextStyle,
padding: ComposerStyle.popupItemPadding,
@@ -1,5 +1,3 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/responsive/responsive_widget.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
@@ -30,15 +28,12 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class ComposerView extends GetWidget<ComposerController> {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
ComposerView({Key? key}) : super(key: key);
const ComposerView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return ResponsiveWidget(
responsiveUtils: _responsiveUtils,
responsiveUtils: controller.responsiveUtils,
mobile: MobileResponsiveContainerView(
childBuilder: (context, constraints) {
return Column(
@@ -67,7 +62,7 @@ class ComposerView extends GetWidget<ComposerController> {
maxHeight: ComposerStyle.getMaxHeightEmailAddressWidget(
context,
constraints,
_responsiveUtils
controller.responsiveUtils
)
),
child: SingleChildScrollView(
@@ -79,8 +74,8 @@ class ComposerView extends GetWidget<ComposerController> {
message: controller.identitySelected.value?.email ?? '',
child: FromComposerMobileWidget(
selectedIdentity: controller.identitySelected.value,
imagePaths: _imagePaths,
responsiveUtils: _responsiveUtils,
imagePaths: controller.imagePaths,
responsiveUtils: controller.responsiveUtils,
margin: ComposerStyle.mobileRecipientMargin,
padding: ComposerStyle.mobileRecipientPadding,
onTap: () => controller.openSelectIdentityBottomSheet(context)
@@ -247,7 +242,7 @@ class ComposerView extends GetWidget<ComposerController> {
maxHeight: ComposerStyle.getMaxHeightEmailAddressWidget(
context,
constraints,
_responsiveUtils
controller.responsiveUtils
)
),
child: SingleChildScrollView(
@@ -259,7 +254,7 @@ class ComposerView extends GetWidget<ComposerController> {
items: controller.listFromIdentities,
itemSelected: controller.identitySelected.value,
dropdownKey: controller.identityDropdownKey,
imagePaths: _imagePaths,
imagePaths: controller.imagePaths,
padding: ComposerStyle.desktopRecipientPadding,
margin: ComposerStyle.desktopRecipientMargin,
onChangeIdentity: controller.onChangeIdentity,
@@ -477,7 +472,7 @@ class ComposerView extends GetWidget<ComposerController> {
maxHeight: ComposerStyle.getMaxHeightEmailAddressWidget(
context,
constraints,
_responsiveUtils
controller.responsiveUtils
)
),
child: SingleChildScrollView(
@@ -489,7 +484,7 @@ class ComposerView extends GetWidget<ComposerController> {
items: controller.listFromIdentities,
itemSelected: controller.identitySelected.value,
dropdownKey: controller.identityDropdownKey,
imagePaths: _imagePaths,
imagePaths: controller.imagePaths,
padding: ComposerStyle.tabletRecipientPadding,
margin: ComposerStyle.tabletRecipientMargin,
onChangeIdentity: controller.onChangeIdentity,
@@ -683,11 +678,11 @@ class ComposerView extends GetWidget<ComposerController> {
PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemWidget(
_imagePaths.icReadReceipt,
controller.imagePaths.icReadReceipt,
AppLocalizations.of(context).requestReadReceipt,
styleName: ComposerStyle.popupItemTextStyle,
padding: ComposerStyle.popupItemPadding,
selectedIcon: _imagePaths.icFilterSelected,
selectedIcon: controller.imagePaths.icFilterSelected,
isSelected: controller.hasRequestReadReceipt.value,
onCallbackAction: () {
popBack();
@@ -703,12 +698,12 @@ class ComposerView extends GetWidget<ComposerController> {
PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemWidget(
_imagePaths.icStyleCodeView,
controller.imagePaths.icStyleCodeView,
AppLocalizations.of(context).embedCode,
styleName: ComposerStyle.popupItemTextStyle,
colorIcon: ComposerStyle.popupItemIconColor,
padding: ComposerStyle.popupItemPadding,
selectedIcon: _imagePaths.icFilterSelected,
selectedIcon: controller.imagePaths.icFilterSelected,
isSelected: controller.richTextWebController.codeViewEnabled,
onCallbackAction: () {
popBack();
@@ -719,12 +714,12 @@ class ComposerView extends GetWidget<ComposerController> {
PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemWidget(
_imagePaths.icReadReceipt,
controller.imagePaths.icReadReceipt,
AppLocalizations.of(context).requestReadReceipt,
styleName: ComposerStyle.popupItemTextStyle,
padding: ComposerStyle.popupItemPadding,
colorIcon: ComposerStyle.popupItemIconColor,
selectedIcon: _imagePaths.icFilterSelected,
selectedIcon: controller.imagePaths.icFilterSelected,
isSelected: controller.hasRequestReadReceipt.value,
onCallbackAction: () {
popBack();
@@ -735,7 +730,7 @@ class ComposerView extends GetWidget<ComposerController> {
PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemWidget(
_imagePaths.icSaveToDraft,
controller.imagePaths.icSaveToDraft,
AppLocalizations.of(context).saveAsDraft,
colorIcon: ComposerStyle.popupItemIconColor,
styleName: ComposerStyle.popupItemTextStyle,
@@ -749,7 +744,7 @@ class ComposerView extends GetWidget<ComposerController> {
PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemWidget(
_imagePaths.icDeleteMailbox,
controller.imagePaths.icDeleteMailbox,
AppLocalizations.of(context).delete,
styleName: ComposerStyle.popupItemTextStyle,
padding: ComposerStyle.popupItemPadding,
@@ -1,7 +1,5 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
@@ -16,10 +14,7 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class ContactView extends GetWidget<ContactController> {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
ContactView({super.key});
const ContactView({super.key});
@override
Widget build(BuildContext context) {
@@ -31,38 +26,38 @@ class ContactView extends GetWidget<ContactController> {
bottom: false,
left: false,
right: false,
top: ContactUtils.supportAppBarTopBorder(context, _responsiveUtils),
top: ContactUtils.supportAppBarTopBorder(context, controller.responsiveUtils),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(ContactUtils.getRadiusBorderAppBarTop(
context,
_responsiveUtils)),
controller.responsiveUtils)),
topRight: Radius.circular(ContactUtils.getRadiusBorderAppBarTop(
context,
_responsiveUtils))),
controller.responsiveUtils))),
color: Colors.white),
child: ClipRRect(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(ContactUtils.getRadiusBorderAppBarTop(
context,
_responsiveUtils)),
controller.responsiveUtils)),
topRight: Radius.circular(ContactUtils.getRadiusBorderAppBarTop(
context,
_responsiveUtils))),
controller.responsiveUtils))),
child: SafeArea(child: Container(
color: Colors.white,
child: Column(children: [
Container(
height: 52,
color: Colors.white,
padding: ContactUtils.getPaddingAppBar(context, _responsiveUtils),
padding: ContactUtils.getPaddingAppBar(context, controller.responsiveUtils),
child: AppBarContactWidget(
onCloseContactView: () => controller.closeContactView(context))
),
const Divider(color: AppColor.colorDividerComposer, height: 1),
SearchAppBarWidget(
imagePaths: _imagePaths,
imagePaths: controller.imagePaths,
searchQuery: controller.searchQuery.value,
searchFocusNode: controller.textInputSearchFocus,
searchInputController: controller.textInputSearchController,
@@ -70,12 +65,12 @@ class ContactView extends GetWidget<ContactController> {
hasSearchButton: true,
padding: EdgeInsets.zero,
heightSearchBar: 44,
margin: ContactUtils.getPaddingSearchInputForm(context, _responsiveUtils),
margin: ContactUtils.getPaddingSearchInputForm(context, controller.responsiveUtils),
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(10)),
color: AppColor.colorBgSearchBar),
iconClearText: SvgPicture.asset(
_imagePaths.icClearTextSearch,
controller.imagePaths.icClearTextSearch,
width: 18,
height: 18,
fit: BoxFit.fill),
@@ -92,7 +87,7 @@ class ContactView extends GetWidget<ContactController> {
itemCount: controller.listContactSearched.length,
separatorBuilder: (context, index) {
return Padding(
padding: ContactUtils.getPaddingDividerSearchResultList(context, _responsiveUtils),
padding: ContactUtils.getPaddingDividerSearchResultList(context, controller.responsiveUtils),
child: const Divider(
height: 1,
color: AppColor.colorDivider),
@@ -108,7 +103,7 @@ class ContactView extends GetWidget<ContactController> {
);
return ContactSuggestionBoxItem(
suggestionEmailAddress,
padding: ContactUtils.getPaddingSearchResultList(context, _responsiveUtils),
padding: ContactUtils.getPaddingSearchResultList(context, controller.responsiveUtils),
selectedContactCallbackAction: (contact) => controller.selectContact(context, contact),
);
}
@@ -1,7 +1,6 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/presentation/utils/keyboard_utils.dart';
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart';
@@ -40,13 +39,9 @@ import 'package:tmail_ui_user/features/thread/presentation/model/search_state.da
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:uuid/uuid.dart';
class DestinationPickerController extends BaseMailboxController {
final _uuid = Get.find<Uuid>();
final _appToast = Get.find<AppToast>();
final SearchMailboxInteractor _searchMailboxInteractor;
final CreateNewMailboxInteractor _createNewMailboxInteractor;
@@ -310,7 +305,7 @@ class DestinationPickerController extends BaseMailboxController {
void openCreateNewMailboxView(BuildContext context) async {
if (mailboxDestination.value == null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(context).toastMessageErrorNotSelectedFolderWhenCreateNewMailbox);
} else {
@@ -346,7 +341,7 @@ class DestinationPickerController extends BaseMailboxController {
if (exception is ErrorMethodResponse) {
messageError = exception.description ?? AppLocalizations.of(currentContext!).createNewFolderFailure;
}
_appToast.showToastErrorMessage(currentOverlayContext!, messageError);
appToast.showToastErrorMessage(currentOverlayContext!, messageError);
}
}
@@ -379,7 +374,7 @@ class DestinationPickerController extends BaseMailboxController {
KeyboardUtils.hideKeyboard(context);
if (mailboxDestination.value == null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(context).toastMessageErrorNotSelectedFolderWhenCreateNewMailbox);
return;
@@ -392,7 +387,7 @@ class DestinationPickerController extends BaseMailboxController {
final nameMailbox = newNameMailbox.value;
if (nameMailbox != null && nameMailbox.isNotEmpty) {
final generateCreateId = Id(_uuid.v1());
final generateCreateId = Id(uuid.v1());
final parentId = mailboxDestination.value == PresentationMailbox.unifiedMailbox
? null
: mailboxDestination.value?.id;
@@ -1,7 +1,5 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/responsive_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/list/tree_view.dart';
@@ -38,8 +36,6 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
MailboxWidgetMixin {
final _maxHeight = 656.0;
final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
@override
final controller = Get.find<DestinationPickerController>();
@@ -59,7 +55,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
borderOnForeground: false,
color: Colors.transparent,
child: SafeArea(
top: PlatformInfo.isMobile && _responsiveUtils.isPortraitMobile(context),
top: PlatformInfo.isMobile && controller.responsiveUtils.isPortraitMobile(context),
bottom: false,
left: false,
right: false,
@@ -90,8 +86,8 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
child: SafeArea(
top: false,
bottom: false,
left: PlatformInfo.isMobile && _responsiveUtils.isLandscapeMobile(context),
right: PlatformInfo.isMobile && _responsiveUtils.isLandscapeMobile(context),
left: PlatformInfo.isMobile && controller.responsiveUtils.isLandscapeMobile(context),
right: PlatformInfo.isMobile && controller.responsiveUtils.isLandscapeMobile(context),
child: Column(children: [
Obx(() => TopBarDestinationPickerBuilder(
controller.mailboxAction.value,
@@ -201,7 +197,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
if (actions?.canSearch() == true &&
controller.destinationScreenType.value == DestinationScreenType.destinationPicker)
SearchBarView(
_imagePaths,
controller.imagePaths,
margin: const EdgeInsets.all(16),
hintTextSearch: AppLocalizations.of(context).hintSearchFolders,
onOpenSearchViewAction: controller.enableSearch
@@ -294,8 +290,8 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
children: [
buildHeaderMailboxCategory(
context,
_responsiveUtils,
_imagePaths,
controller.responsiveUtils,
controller.imagePaths,
categories,
controller,
toggleMailboxCategories: controller.toggleMailboxCategories,
@@ -404,8 +400,8 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
padding: const EdgeInsets.symmetric(horizontal: 16),
itemBuilder: (context, index) {
return Obx(() => DestinationPickerSearchMailboxItemBuilder(
_imagePaths,
_responsiveUtils,
controller.imagePaths,
controller.responsiveUtils,
controller.listMailboxSearched[index],
mailboxActions: actions,
mailboxIdAlreadySelected: mailboxIdSelected,
@@ -443,7 +439,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
: Colors.transparent,
child: Row(children: [
SvgPicture.asset(
_imagePaths.icFolderMailbox,
controller.imagePaths.icFolderMailbox,
width: PlatformInfo.isWeb ? 20 : 24,
height: PlatformInfo.isWeb ? 20 : 24,
fit: BoxFit.fill
@@ -469,7 +465,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
left: AppUtils.isDirectionRTL(context) ? 30 : 0.0,
),
child: SvgPicture.asset(
_imagePaths.icFilterSelected,
controller.imagePaths.icFilterSelected,
width: 20,
height: 20,
fit: BoxFit.fill
@@ -528,12 +524,12 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
),
child: buildIconWeb(
icon: SvgPicture.asset(
_imagePaths.icBack,
controller.imagePaths.icBack,
colorFilter: AppColor.colorTextButton.asFilter(),
fit: BoxFit.fill),
onTap: () => controller.disableSearch(context))),
Expanded(child: SearchAppBarWidget(
imagePaths: _imagePaths,
imagePaths: controller.imagePaths,
searchQuery: controller.searchQuery.value,
searchFocusNode: controller.searchFocus,
searchInputController: controller.searchInputController,
@@ -547,7 +543,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
borderRadius: BorderRadius.all(Radius.circular(12)),
color: AppColor.colorBgSearchBar),
iconClearText: SvgPicture.asset(
_imagePaths.icClearTextSearch,
controller.imagePaths.icClearTextSearch,
width: 18,
height: 18,
fit: BoxFit.fill),
@@ -562,9 +558,9 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
}
BorderRadius _getRadiusDestinationPicker(BuildContext context) {
if (PlatformInfo.isMobile && _responsiveUtils.isLandscapeMobile(context)) {
if (PlatformInfo.isMobile && controller.responsiveUtils.isLandscapeMobile(context)) {
return BorderRadius.zero;
} else if (_responsiveUtils.isMobile(context)) {
} else if (controller.responsiveUtils.isMobile(context)) {
return const BorderRadius.only(
topRight: Radius.circular(16),
topLeft: Radius.circular(16));
@@ -575,14 +571,14 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
double _getWidthDestinationPicker(BuildContext context) {
if (PlatformInfo.isWeb) {
if (_responsiveUtils.isMobile(context)) {
if (controller.responsiveUtils.isMobile(context)) {
return double.infinity;
} else {
return 556;
}
} else {
if (_responsiveUtils.isLandscapeMobile(context) ||
_responsiveUtils.isPortraitMobile(context)) {
if (controller.responsiveUtils.isLandscapeMobile(context) ||
controller.responsiveUtils.isPortraitMobile(context)) {
return double.infinity;
} else {
return 556;
@@ -592,21 +588,21 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
double _getHeightDestinationPicker(BuildContext context) {
if (PlatformInfo.isWeb) {
if (_responsiveUtils.isMobile(context)) {
if (controller.responsiveUtils.isMobile(context)) {
return double.infinity;
} else {
if (_responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
if (controller.responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
return _maxHeight;
} else {
return double.infinity;
}
}
} else {
if (_responsiveUtils.isLandscapeMobile(context) ||
_responsiveUtils.isPortraitMobile(context)) {
if (controller.responsiveUtils.isLandscapeMobile(context) ||
controller.responsiveUtils.isPortraitMobile(context)) {
return double.infinity;
} else {
if (_responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
if (controller.responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
return _maxHeight;
} else {
return double.infinity;
@@ -618,21 +614,21 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
EdgeInsets _getMarginDestinationPicker(BuildContext context) {
if (PlatformInfo.isWeb) {
if (_responsiveUtils.isMobile(context)) {
if (controller.responsiveUtils.isMobile(context)) {
return EdgeInsets.zero;
} else {
if (_responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
if (controller.responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
return const EdgeInsets.symmetric(vertical: 12);
} else {
return const EdgeInsets.symmetric(vertical: 50);
}
}
} else {
if (_responsiveUtils.isLandscapeMobile(context) ||
_responsiveUtils.isPortraitMobile(context)) {
if (controller.responsiveUtils.isLandscapeMobile(context) ||
controller.responsiveUtils.isPortraitMobile(context)) {
return EdgeInsets.zero;
} else {
if (_responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
if (controller.responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
return const EdgeInsets.symmetric(vertical: 12);
} else {
return const EdgeInsets.symmetric(vertical: 50);
@@ -62,6 +62,7 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/attachment_lis
import 'package:tmail_ui_user/features/email/presentation/widgets/attachment_list/attachment_list_dialog_builder.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_address_bottom_sheet_builder.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_address_dialog_builder.dart';
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
@@ -74,7 +75,6 @@ import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart';
import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart';
import 'package:tmail_ui_user/features/session/data/exceptions/session_exceptions.dart';
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
import 'package:tmail_ui_user/main/error/capability_validator.dart';
@@ -85,18 +85,12 @@ 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/app_utils.dart';
import 'package:uuid/uuid.dart';
class SingleEmailController extends BaseController with AppLoaderMixin {
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
final emailSupervisorController = Get.find<EmailSupervisorController>();
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
final _appToast = Get.find<AppToast>();
final _uuid = Get.find<Uuid>();
final _downloadManager = Get.find<DownloadManager>();
final _dynamicUrlInterceptors = Get.find<DynamicUrlInterceptors>();
final _attachmentListScrollController = ScrollController();
final GetEmailContentInteractor _getEmailContentInteractor;
@@ -297,7 +291,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
attachment: success.attachment));
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).your_download_has_started,
leadingSVGIconColor: AppColor.primaryColor,
@@ -396,7 +390,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
final session = mailboxDashBoardController.sessionCurrent;
final accountId = mailboxDashBoardController.accountId.value;
if (session != null && accountId != null) {
final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl(jmapUrl: _dynamicUrlInterceptors.jmapUrl) ?? '';
final baseDownloadUrl = mailboxDashBoardController.sessionCurrent?.getDownloadUrl(jmapUrl: dynamicUrlInterceptors.jmapUrl) ?? '';
TransformConfiguration transformConfiguration = PlatformInfo.isWeb
? TransformConfiguration.forPreviewEmailOnWeb()
: TransformConfiguration.forPreviewEmail();
@@ -570,7 +564,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
break;
case PermissionStatus.permanentlyDenied:
if (context.mounted && currentOverlayContext != null && currentContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
AppLocalizations.of(context).you_need_to_grant_files_permission_to_download_attachments,
);
@@ -584,7 +578,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
break;
default:
if (context.mounted && currentOverlayContext != null && currentContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
AppLocalizations.of(context).you_need_to_grant_files_permission_to_download_attachments,
);
@@ -601,14 +595,14 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
void _downloadAttachmentsAction(List<Attachment> attachments) async {
final accountId = mailboxDashBoardController.accountId.value;
if (accountId != null && mailboxDashBoardController.sessionCurrent != null) {
final baseDownloadUrl = mailboxDashBoardController.sessionCurrent!.getDownloadUrl(jmapUrl: _dynamicUrlInterceptors.jmapUrl);
final baseDownloadUrl = mailboxDashBoardController.sessionCurrent!.getDownloadUrl(jmapUrl: dynamicUrlInterceptors.jmapUrl);
consumeState(_downloadAttachmentsInteractor.execute(attachments, accountId, baseDownloadUrl));
}
}
void _downloadAttachmentsFailure(DownloadAttachmentsFailure failure) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).attachment_download_failed);
}
@@ -650,7 +644,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
void _exportAttachmentAction(Attachment attachment, CancelToken cancelToken) async {
final accountId = mailboxDashBoardController.accountId.value;
if (accountId != null && mailboxDashBoardController.sessionCurrent != null) {
final baseDownloadUrl = mailboxDashBoardController.sessionCurrent!.getDownloadUrl(jmapUrl: _dynamicUrlInterceptors.jmapUrl);
final baseDownloadUrl = mailboxDashBoardController.sessionCurrent!.getDownloadUrl(jmapUrl: dynamicUrlInterceptors.jmapUrl);
consumeState(_exportAttachmentInteractor.execute(attachment, accountId, baseDownloadUrl, cancelToken));
}
}
@@ -660,7 +654,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
popBack();
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).attachment_download_failed);
}
@@ -686,7 +680,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
if (openResult.type != open_file.ResultType.done) {
logError('SingleEmailController::_openDownloadedPreviewWorkGroupDocument(): no preview available');
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).noPreviewAvailable);
}
@@ -701,8 +695,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
final accountId = mailboxDashBoardController.accountId.value;
final session = mailboxDashBoardController.sessionCurrent;
if (accountId != null && session != null) {
final baseDownloadUrl = session.getDownloadUrl(jmapUrl: _dynamicUrlInterceptors.jmapUrl);
final generateTaskId = DownloadTaskId(_uuid.v4());
final baseDownloadUrl = session.getDownloadUrl(jmapUrl: dynamicUrlInterceptors.jmapUrl);
final generateTaskId = DownloadTaskId(uuid.v4());
consumeState(_downloadAttachmentForWebInteractor.execute(
generateTaskId,
attachment,
@@ -732,7 +726,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).attachment_download_failed);
}
@@ -821,7 +815,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
void _moveToMailboxSuccess(MoveToMailboxSuccess success) {
mailboxDashBoardController.dispatchState(Right(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,
@@ -1063,21 +1057,21 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}
if (_sendReceiptToSenderInteractor == null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(context).toastMessageNotSupportMdnWhenSendReceipt);
return;
}
if (_identitySelected == null || _identitySelected?.id == null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(context).toastMessageCannotFoundIdentityWhenSendReceipt);
return;
}
if (currentEmail == null || _currentEmailId == null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(context).toastMessageCannotFoundEmailIdWhenSendReceipt);
return;
@@ -1089,7 +1083,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
final sendReceiptRequest = SendReceiptToSenderRequest(
mdn: mdnToSender,
identityId: _identitySelected!.id!,
sendId: Id(_uuid.v1()));
sendId: Id(uuid.v1()));
log('SingleEmailController::_handleSendReceiptToSenderAction(): sendReceiptRequest: $sendReceiptRequest');
consumeState(_sendReceiptToSenderInteractor!.execute(accountId, sendReceiptRequest));
@@ -1129,7 +1123,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
void _sendReceiptToSenderSuccess(SendReceiptToSenderSuccess success) {
log('SingleEmailController::_sendReceiptToSenderSuccess(): ${success.mdn.toString()}');
if (currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toastMessageSendReceiptSuccess,
leadingSVGIcon: imagePaths.icReadReceiptMessage);
@@ -1264,7 +1258,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
void _createNewRuleFilterSuccess(CreateNewRuleFilterSuccess success) {
if (success.newListRules.isNotEmpty == true) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).newFilterWasCreated);
}
+30 -40
View File
@@ -1,11 +1,8 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/button/tmail_button_widget.dart';
import 'package:core/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart';
import 'package:core/presentation/views/html_viewer/html_content_viewer_widget.dart';
import 'package:core/presentation/views/html_viewer/html_viewer_controller_for_web.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/direction_utils.dart';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart';
@@ -42,17 +39,14 @@ import 'package:tmail_ui_user/main/utils/app_utils.dart';
class EmailView extends GetWidget<SingleEmailController> {
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
EmailView({Key? key}) : super(key: key);
const EmailView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () => controller.backButtonPressedCallbackAction.call(context),
child: Scaffold(
backgroundColor: responsiveUtils.isWebDesktop(context)
backgroundColor: controller.responsiveUtils.isWebDesktop(context)
? AppColor.colorBgDesktop
: Colors.white,
appBar: PlatformInfo.isIOS
@@ -93,12 +87,12 @@ class EmailView extends GetWidget<SingleEmailController> {
)
: null,
body: SafeArea(
right: responsiveUtils.isLandscapeMobile(context),
left: responsiveUtils.isLandscapeMobile(context),
right: controller.responsiveUtils.isLandscapeMobile(context),
left: controller.responsiveUtils.isLandscapeMobile(context),
bottom: !PlatformInfo.isIOS,
child: Container(
clipBehavior: Clip.antiAlias,
decoration: responsiveUtils.isWebDesktop(context)
decoration: controller.responsiveUtils.isWebDesktop(context)
? BoxDecoration(
borderRadius: BorderRadius.circular(20),
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
@@ -139,9 +133,9 @@ class EmailView extends GetWidget<SingleEmailController> {
final vacation = controller.mailboxDashBoardController.vacationResponse.value;
if (vacation?.vacationResponderIsValid == true &&
(
responsiveUtils.isMobile(context) ||
responsiveUtils.isTablet(context) ||
responsiveUtils.isLandscapeMobile(context)
controller.responsiveUtils.isMobile(context) ||
controller.responsiveUtils.isTablet(context) ||
controller.responsiveUtils.isLandscapeMobile(context)
)
) {
return VacationNotificationMessageWidget(
@@ -270,7 +264,7 @@ class EmailView extends GetWidget<SingleEmailController> {
EdgeInsetsGeometry _getMarginEmailView(BuildContext context) {
if (PlatformInfo.isWeb) {
if (responsiveUtils.isDesktop(context)) {
if (controller.responsiveUtils.isDesktop(context)) {
return const EdgeInsetsDirectional.only(
end: 16,
top: 8,
@@ -292,8 +286,8 @@ class EmailView extends GetWidget<SingleEmailController> {
return [
TMailButtonWidget.fromIcon(
icon: DirectionUtils.isDirectionRTLByLanguage(context)
? imagePaths.icOlder
: imagePaths.icNewer,
? controller.imagePaths.icOlder
: controller.imagePaths.icNewer,
iconColor: controller.emailSupervisorController.nextEmailActivated
? AppColor.primaryColor
: AppColor.colorAttachmentIcon,
@@ -305,8 +299,8 @@ class EmailView extends GetWidget<SingleEmailController> {
),
TMailButtonWidget.fromIcon(
icon: DirectionUtils.isDirectionRTLByLanguage(context)
? imagePaths.icNewer
: imagePaths.icOlder,
? controller.imagePaths.icNewer
: controller.imagePaths.icOlder,
iconColor: controller.emailSupervisorController.previousEmailActivated
? AppColor.primaryColor
: AppColor.colorAttachmentIcon,
@@ -332,22 +326,18 @@ class EmailView extends GetWidget<SingleEmailController> {
InformationSenderAndReceiverBuilder(
controller: controller,
emailSelected: presentationEmail,
imagePaths: imagePaths,
responsiveUtils: responsiveUtils,
imagePaths: controller.imagePaths,
responsiveUtils: controller.responsiveUtils,
),
Obx(() {
final attachments = controller.attachments.listAttachmentsDisplayedOutSide;
if (attachments.isNotEmpty) {
return EmailAttachmentsWidget(
responsiveUtils: responsiveUtils,
responsiveUtils: controller.responsiveUtils,
attachments: attachments,
imagePaths: imagePaths,
onDragStarted: () {
log('EmailView::_buildEmailMessage:onDragStarted:');
controller.mailboxDashBoardController.enableDraggableApp();
},
imagePaths: controller.imagePaths,
onDragStarted: controller.mailboxDashBoardController.enableDraggableApp,
onDragEnd: (details) {
log('EmailView::_buildEmailMessage:onDragEnd:');
controller.mailboxDashBoardController.disableDraggableApp();
},
downloadAttachmentAction: (attachment) {
@@ -463,7 +453,7 @@ class EmailView extends GetWidget<SingleEmailController> {
return (EmailActionCupertinoActionSheetActionBuilder(
const Key('mark_as_unread_action'),
SvgPicture.asset(
imagePaths.icUnreadEmail,
controller.imagePaths.icUnreadEmail,
width: 24,
height: 24,
fit: BoxFit.fill,
@@ -471,7 +461,7 @@ class EmailView extends GetWidget<SingleEmailController> {
),
AppLocalizations.of(context).mark_as_unread,
email,
iconLeftPadding: responsiveUtils.isMobile(context)
iconLeftPadding: controller.responsiveUtils.isMobile(context)
? EdgeInsets.only(
left: AppUtils.isDirectionRTL(context) ? 16 : 12,
right: AppUtils.isDirectionRTL(context) ? 12 : 16,
@@ -480,7 +470,7 @@ class EmailView extends GetWidget<SingleEmailController> {
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
),
iconRightPadding: responsiveUtils.isMobile(context)
iconRightPadding: controller.responsiveUtils.isMobile(context)
? EdgeInsets.only(
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
@@ -500,7 +490,7 @@ class EmailView extends GetWidget<SingleEmailController> {
return (EmailActionCupertinoActionSheetActionBuilder(
const Key('mark_as_spam_or_un_spam_action'),
SvgPicture.asset(
currentMailbox?.isSpam == true ? imagePaths.icNotSpam : imagePaths.icSpam,
currentMailbox?.isSpam == true ? controller.imagePaths.icNotSpam : controller.imagePaths.icSpam,
width: 24,
height: 24,
fit: BoxFit.fill,
@@ -510,7 +500,7 @@ class EmailView extends GetWidget<SingleEmailController> {
? AppLocalizations.of(context).remove_from_spam
: AppLocalizations.of(context).mark_as_spam,
email,
iconLeftPadding: responsiveUtils.isMobile(context)
iconLeftPadding: controller.responsiveUtils.isMobile(context)
? EdgeInsets.only(
left: AppUtils.isDirectionRTL(context) ? 16 : 12,
right: AppUtils.isDirectionRTL(context) ? 12 : 16,
@@ -519,7 +509,7 @@ class EmailView extends GetWidget<SingleEmailController> {
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
),
iconRightPadding: responsiveUtils.isMobile(context)
iconRightPadding: controller.responsiveUtils.isMobile(context)
? EdgeInsets.only(
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
@@ -537,14 +527,14 @@ class EmailView extends GetWidget<SingleEmailController> {
return (EmailActionCupertinoActionSheetActionBuilder(
const Key('quick_creating_rule_action'),
SvgPicture.asset(
imagePaths.icQuickCreatingRule,
controller.imagePaths.icQuickCreatingRule,
width: 24,
height: 24,
fit: BoxFit.fill,
colorFilter: AppColor.colorTextButton.asFilter()),
AppLocalizations.of(context).quickCreatingRule,
email,
iconLeftPadding: responsiveUtils.isMobile(context)
iconLeftPadding: controller.responsiveUtils.isMobile(context)
? EdgeInsets.only(
left: AppUtils.isDirectionRTL(context) ? 16 : 12,
right: AppUtils.isDirectionRTL(context) ? 12 : 16,
@@ -553,7 +543,7 @@ class EmailView extends GetWidget<SingleEmailController> {
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
),
iconRightPadding: responsiveUtils.isMobile(context)
iconRightPadding: controller.responsiveUtils.isMobile(context)
? EdgeInsets.only(
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
@@ -577,7 +567,7 @@ class EmailView extends GetWidget<SingleEmailController> {
return PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemWidget(
imagePaths.icUnreadEmail,
controller.imagePaths.icUnreadEmail,
AppLocalizations.of(context).mark_as_unread,
colorIcon: AppColor.colorTextButton,
padding: const EdgeInsetsDirectional.only(start: 12),
@@ -603,7 +593,7 @@ class EmailView extends GetWidget<SingleEmailController> {
return PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemWidget(
mailboxContain?.isSpam == true ? imagePaths.icNotSpam : imagePaths.icSpam,
mailboxContain?.isSpam == true ? controller.imagePaths.icNotSpam : controller.imagePaths.icSpam,
mailboxContain?.isSpam == true
? AppLocalizations.of(context).remove_from_spam
: AppLocalizations.of(context).mark_as_spam,
@@ -627,7 +617,7 @@ class EmailView extends GetWidget<SingleEmailController> {
return PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemWidget(
imagePaths.icQuickCreatingRule,
controller.imagePaths.icQuickCreatingRule,
AppLocalizations.of(context).quickCreatingRule,
colorIcon: AppColor.colorTextButton,
padding: const EdgeInsetsDirectional.only(start: 12),
@@ -1,4 +1,3 @@
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/presentation/utils/keyboard_utils.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
@@ -40,7 +39,6 @@ import 'package:tmail_ui_user/features/manage_account/presentation/profiles/iden
import 'package:tmail_ui_user/main/error/capability_validator.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:uuid/uuid.dart';
class IdentityCreatorController extends BaseController {
@@ -48,9 +46,6 @@ class IdentityCreatorController extends BaseController {
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
final IdentityUtils _identityUtils;
final _uuid = Get.find<Uuid>();
final _appToast = Get.find<AppToast>();
final noneEmailAddress = EmailAddress(null, 'None');
final listEmailAddressDefault = <EmailAddress>[].obs;
final listEmailAddressOfReplyTo = <EmailAddress>[].obs;
@@ -343,7 +338,7 @@ class IdentityCreatorController extends BaseController {
htmlSignature: Signature(signatureHtmlText ?? ''),
sortOrder: sortOrder);
final generateCreateId = Id(_uuid.v1());
final generateCreateId = Id(uuid.v1());
if (actionType.value == IdentityActionType.create) {
final identityRequest = CreateNewIdentityRequest(
@@ -486,7 +481,7 @@ class IdentityCreatorController extends BaseController {
final platformFile = filePickerResult!.files.first;
_insertInlineImage(context, platformFile, maxWidth: maxWidth);
} else {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
context,
AppLocalizations.of(context).cannotSelectThisImage
);
@@ -505,7 +500,7 @@ class IdentityCreatorController extends BaseController {
{int? maxWidth}
) {
if (_isExceedMaxSizeInlineImage(platformFile.size)) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
context,
AppLocalizations.of(context).pleaseChooseAnImageSizeCorrectly(
IdentityCreatorConstants.maxKBSizeIdentityInlineImage
@@ -2,9 +2,7 @@ import 'dart:math' as math;
import 'package:core/presentation/extensions/capitalize_extension.dart';
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/html_transformer/html_utils.dart';
import 'package:core/presentation/utils/responsive_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/responsive/responsive_widget.dart';
@@ -33,9 +31,6 @@ import 'package:tmail_ui_user/main/utils/app_utils.dart';
class IdentityCreatorView extends GetWidget<IdentityCreatorController>
with RichTextButtonMixin {
final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
@override
final controller = Get.find<IdentityCreatorController>();
@@ -44,7 +39,7 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController>
@override
Widget build(BuildContext context) {
final responsiveWidget = ResponsiveWidget(
responsiveUtils: _responsiveUtils,
responsiveUtils: controller.responsiveUtils,
mobile: Scaffold(
backgroundColor: Colors.black38,
body: GestureDetector(
@@ -103,8 +98,8 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController>
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(16))
),
width: math.max(_responsiveUtils.getSizeScreenWidth(context) * 0.4, 700),
height: _responsiveUtils.getSizeScreenHeight(context) * 0.8,
width: math.max(controller.responsiveUtils.getSizeScreenWidth(context) * 0.4, 700),
height: controller.responsiveUtils.getSizeScreenHeight(context) * 0.8,
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(16)),
child: _buildBodyView(context)
@@ -129,8 +124,8 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController>
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(16))
),
width: math.max(_responsiveUtils.getSizeScreenWidth(context) * 0.4, 800),
height: _responsiveUtils.getSizeScreenHeight(context) * 0.8,
width: math.max(controller.responsiveUtils.getSizeScreenWidth(context) * 0.4, 800),
height: controller.responsiveUtils.getSizeScreenHeight(context) * 0.8,
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(16)),
child: _buildBodyView(context)
@@ -150,7 +145,7 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController>
backgroundKeyboardToolBarColor: PlatformInfo.isIOS
? AppColor.colorBackgroundKeyboard
: AppColor.colorBackgroundKeyboardAndroid,
isLandScapeMode: _responsiveUtils.isLandscapeMobile(context),
isLandScapeMode: controller.responsiveUtils.isLandscapeMobile(context),
richTextController: controller.keyboardRichTextController,
titleQuickStyleBottomSheet: AppLocalizations.of(context).titleQuickStyles,
titleBackgroundBottomSheet: AppLocalizations.of(context).titleBackground,
@@ -185,7 +180,7 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController>
Obx(() {
if (controller.actionType.value == IdentityActionType.create) {
return IdentityDropListFieldBuilder(
_imagePaths,
controller.imagePaths,
AppLocalizations.of(context).email.inCaps,
controller.emailOfIdentity.value,
controller.listEmailAddressDefault,
@@ -198,7 +193,7 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController>
}),
const SizedBox(height: 24),
Obx(() => IdentityDropListFieldBuilder(
_imagePaths,
controller.imagePaths,
AppLocalizations.of(context).reply_to,
controller.replyToOfIdentity.value,
controller.listEmailAddressOfReplyTo,
@@ -291,7 +286,7 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController>
buildIconWeb(
iconSize: 24,
icon: SvgPicture.asset(
_imagePaths.icComposerClose,
controller.imagePaths.icComposerClose,
fit: BoxFit.fill,
colorFilter: AppColor.colorDeleteContactIcon.asFilter()
),
@@ -317,7 +312,7 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController>
padding: const EdgeInsetsDirectional.only(end: 4.0),
child: buildWrapIconStyleText(
icon: buildIconWithTooltip(
path: _imagePaths.icAddPicture,
path: controller.imagePaths.icAddPicture,
tooltip: AppLocalizations.of(context).insertImage
),
hasDropdown: false,
@@ -405,7 +400,7 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController>
return Obx(() {
if (controller.isDefaultIdentitySupported.isTrue) {
return SetDefaultIdentityCheckboxBuilder(
imagePaths: _imagePaths,
imagePaths: controller.imagePaths,
isCheck: controller.isDefaultIdentity.value,
onCheckboxChanged: controller.onCheckboxChanged);
} else {
@@ -460,16 +455,16 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController>
}
bool _isMobile(BuildContext context) =>
_responsiveUtils.isPortraitMobile(context) ||
_responsiveUtils.isLandscapeMobile(context);
controller.responsiveUtils.isPortraitMobile(context) ||
controller.responsiveUtils.isLandscapeMobile(context);
double _getMaxWidth(BuildContext context) {
if (_isMobile(context)) {
return _responsiveUtils.getSizeScreenWidth(context);
} else if (_responsiveUtils.isDesktop(context)) {
return math.max(_responsiveUtils.getSizeScreenWidth(context) * 0.4, 800);
return controller.responsiveUtils.getSizeScreenWidth(context);
} else if (controller.responsiveUtils.isDesktop(context)) {
return math.max(controller.responsiveUtils.getSizeScreenWidth(context) * 0.4, 800);
} else {
return math.max(_responsiveUtils.getSizeScreenWidth(context) * 0.4, 700);
return math.max(controller.responsiveUtils.getSizeScreenWidth(context) * 0.4, 700);
}
}
}
@@ -15,7 +15,7 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class LoginView extends BaseLoginView {
LoginView({Key? key}) : super(key: key);
const LoginView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
@@ -66,7 +66,7 @@ class LoginView extends BaseLoginView {
children: [
Padding(
padding: EdgeInsets.only(
top: responsiveUtils.isHeightShortest(context) ? 64 : 0),
top: controller.responsiveUtils.isHeightShortest(context) ? 64 : 0),
child: Text(
AppLocalizations.of(context).login,
style: const TextStyle(fontSize: 32, color: AppColor.colorNameEmail, fontWeight: FontWeight.w900)
@@ -102,7 +102,7 @@ class LoginView extends BaseLoginView {
key: const Key('login_arrow_back_button'),
onPressed: () => controller.handleBackInCredentialForm(),
icon: SvgPicture.asset(
imagePaths.icBack,
controller.imagePaths.icBack,
alignment: Alignment.center,
colorFilter: AppColor.primaryColor.asFilter()
)
@@ -127,7 +127,7 @@ class LoginView extends BaseLoginView {
controller.formatUrl(pattern);
return controller.getAllRecentLoginUrlAction(pattern);
},
itemBuilder: (context, loginUrl) => RecentItemTileWidget(loginUrl, imagePath: imagePaths),
itemBuilder: (context, loginUrl) => RecentItemTileWidget(loginUrl, imagePath: controller.imagePaths),
onSuggestionSelected: (loginUrl) => controller.formatUrl(loginUrl.url),
suggestionsBoxDecoration: const SuggestionsBoxDecoration(borderRadius: BorderRadius.all(Radius.circular(14))),
noItemsFoundBuilder: (context) => const SizedBox(),
@@ -149,7 +149,7 @@ class LoginView extends BaseLoginView {
Widget _buildNextButton(BuildContext context) {
return Container(
margin: const EdgeInsets.only(bottom: 16, left: 24, right: 24),
width: responsiveUtils.getDeviceWidth(context),height: 48,
width: controller.responsiveUtils.getDeviceWidth(context),height: 48,
child: ElevatedButton(
key: const Key('nextToCredentialForm'),
style: ButtonStyle(
@@ -184,7 +184,7 @@ class LoginView extends BaseLoginView {
}
bool _supportScrollForm(BuildContext context) {
return !(responsiveUtils.isMobile(context) && responsiveUtils.isPortrait(context));
return !(controller.responsiveUtils.isMobile(context) && controller.responsiveUtils.isPortrait(context));
}
Widget _buildLoadingProgress(BuildContext context) {
@@ -12,7 +12,7 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class LoginView extends BaseLoginView {
LoginView({Key? key}) : super(key: key);
const LoginView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
@@ -20,7 +20,7 @@ class LoginView extends BaseLoginView {
backgroundColor: AppColor.primaryLightColor,
body: Center(child: SingleChildScrollView(
child: ResponsiveWidget(
responsiveUtils: responsiveUtils,
responsiveUtils: controller.responsiveUtils,
mobile: _buildMobileForm(context),
desktop: _buildWebForm(context),
))),
@@ -71,7 +71,7 @@ class LoginView extends BaseLoginView {
child: Align(
alignment: Alignment.bottomCenter,
child: SvgPicture.asset(
imagePaths.icPowerByLinagora,
controller.imagePaths.icPowerByLinagora,
width: 97,
height: 44,
fit: BoxFit.fill)))
@@ -101,7 +101,7 @@ class LoginView extends BaseLoginView {
padding: const EdgeInsets.only(top: 24),
child: SloganBuilder(
arrangedByHorizontal: true,
logoSVG: imagePaths.icJMAPStandard,
logoSVG: controller.imagePaths.icJMAPStandard,
sizeLogo: 48.0,
paddingText: const EdgeInsets.only(left: 12),
text: AppLocalizations.of(context).jmapStandard,
@@ -112,7 +112,7 @@ class LoginView extends BaseLoginView {
padding: const EdgeInsets.only(top: 16),
child: SloganBuilder(
arrangedByHorizontal: true,
logoSVG: imagePaths.icEncrypted,
logoSVG: controller.imagePaths.icEncrypted,
sizeLogo: 48.0,
paddingText: const EdgeInsets.only(left: 12),
text: AppLocalizations.of(context).encryptedMailbox,
@@ -123,7 +123,7 @@ class LoginView extends BaseLoginView {
padding: const EdgeInsets.only(top: 16),
child: SloganBuilder(
arrangedByHorizontal: true,
logoSVG: imagePaths.icTeam,
logoSVG: controller.imagePaths.icTeam,
sizeLogo: 48.0,
paddingText: const EdgeInsets.only(left: 12),
text: AppLocalizations.of(context).manageEmailAsATeam,
@@ -134,7 +134,7 @@ class LoginView extends BaseLoginView {
padding: const EdgeInsets.only(top: 16),
child: SloganBuilder(
arrangedByHorizontal: true,
logoSVG: imagePaths.icIntegration,
logoSVG: controller.imagePaths.icIntegration,
sizeLogo: 48.0,
paddingText: const EdgeInsets.only(left: 12),
text: AppLocalizations.of(context).multipleIntegrations,
@@ -144,7 +144,7 @@ class LoginView extends BaseLoginView {
Padding(
padding: const EdgeInsets.only(top: 44),
child: SvgPicture.asset(
imagePaths.icLoginGraphic,
controller.imagePaths.icLoginGraphic,
fit: BoxFit.fill,
alignment: Alignment.center
)
@@ -202,7 +202,7 @@ class LoginView extends BaseLoginView {
),
Padding(
padding: const EdgeInsets.only(top: 44, bottom: 10),
child: SvgPicture.asset(imagePaths.icPowerByLinagora, width: 97, height: 44, fit: BoxFit.fill)
child: SvgPicture.asset(controller.imagePaths.icPowerByLinagora, width: 97, height: 44, fit: BoxFit.fill)
)
]
)
@@ -216,7 +216,7 @@ class LoginView extends BaseLoginView {
mainAxisSize: MainAxisSize.min,
children: [
SvgPicture.asset(
imagePaths.icTMailLogo,
controller.imagePaths.icTMailLogo,
fit: BoxFit.fill,
width: 36,
height: 36,
@@ -235,7 +235,7 @@ class LoginView extends BaseLoginView {
Widget _buildSSOButton(BuildContext context) {
return Container(
margin: const EdgeInsets.only(bottom: 16, left: 24, right: 24),
width: responsiveUtils.getDeviceWidth(context),height: 48,
width: controller.responsiveUtils.getDeviceWidth(context),height: 48,
child: ElevatedButton(
key: const Key('ssoSubmitForm'),
style: ButtonStyle(
@@ -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';
@@ -12,7 +10,4 @@ abstract class BaseMailboxView extends GetWidget<MailboxController>
MailboxWidgetMixin {
BaseMailboxView({Key? key}) : super(key: key);
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
}
@@ -84,15 +84,10 @@ import 'package:tmail_ui_user/main/routes/dialog_router.dart';
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:uuid/uuid.dart';
class MailboxController extends BaseMailboxController with MailboxActionHandlerMixin {
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
final _appToast = Get.find<AppToast>();
final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _uuid = Get.find<Uuid>();
final isMailboxListScrollable = false.obs;
final CreateNewMailboxInteractor _createNewMailboxInteractor;
final DeleteMultipleMailboxInteractor _deleteMultipleMailboxInteractor;
@@ -302,7 +297,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
void _initCollapseMailboxCategories() {
if (kIsWeb && currentContext != null
&& (_responsiveUtils.isMobile(currentContext!) || _responsiveUtils.isTablet(currentContext!))) {
&& (responsiveUtils.isMobile(currentContext!) || responsiveUtils.isTablet(currentContext!))) {
mailboxCategoriesExpandMode.value = MailboxCategoriesExpandMode(
defaultMailbox: ExpandMode.COLLAPSE,
personalFolders: ExpandMode.COLLAPSE,
@@ -533,7 +528,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
: await push(AppRoutes.mailboxCreator, arguments: arguments);
if (result != null && result is NewMailboxArguments) {
final generateCreateId = Id(_uuid.v1());
final generateCreateId = Id(uuid.v1());
_createNewMailboxAction(session, accountId, CreateNewMailboxRequest(
generateCreateId,
result.newName,
@@ -548,11 +543,11 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
void _createNewMailboxSuccess(CreateNewMailboxSuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).createFolderSuccessfullyMessage(success.newMailbox.name?.name ?? ''),
leadingSVGIconColor: Colors.white,
leadingSVGIcon: _imagePaths.icFolderMailbox);
leadingSVGIcon: imagePaths.icFolderMailbox);
_newFolderId = success.newMailbox.id;
}
@@ -567,7 +562,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
if (exception is ErrorMethodResponse) {
messageError = exception.description ?? AppLocalizations.of(currentContext!).createNewFolderFailure;
}
_appToast.showToastErrorMessage(currentOverlayContext!, messageError);
appToast.showToastErrorMessage(currentOverlayContext!, messageError);
}
}
@@ -650,7 +645,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
openDialogRenameMailboxAction(
context,
selectedMailboxList.first,
_responsiveUtils,
responsiveUtils,
onRenameMailboxAction: _renameMailboxAction
);
break;
@@ -705,7 +700,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
jmap.State? currentMailboxState
) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).deleteFoldersSuccessfully);
}
@@ -721,8 +716,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
BuildContext context,
List<PresentationMailbox> selectedMailboxList
) {
if (_responsiveUtils.isLandscapeMobile(context) ||
_responsiveUtils.isPortraitMobile(context)) {
if (responsiveUtils.isLandscapeMobile(context) ||
responsiveUtils.isPortraitMobile(context)) {
(ConfirmationDialogActionSheetBuilder(context)
..messageText(AppLocalizations.of(context)
.messageConfirmationDialogDeleteMultipleFolder(selectedMailboxList.length))
@@ -735,12 +730,12 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
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_multiple_mailbox'))
..title(AppLocalizations.of(context).deleteFolders)
..content(AppLocalizations.of(context)
.messageConfirmationDialogDeleteMultipleFolder(selectedMailboxList.length))
..addIcon(SvgPicture.asset(_imagePaths.icRemoveDialog,
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog,
fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(const TextStyle(
@@ -789,10 +784,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
void _deleteMailboxFailure(DeleteMultipleMailboxFailure failure) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).deleteFoldersFailure,
leadingSVGIcon: _imagePaths.icDeleteToast
leadingSVGIcon: imagePaths.icDeleteToast
);
}
}
@@ -835,7 +830,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
if (success.moveAction == MoveAction.moving
&& currentOverlayContext != null
&& currentContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).movedToFolder(
success.destinationMailboxDisplayName ?? AppLocalizations.of(currentContext!).allFolders),
@@ -847,11 +842,11 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
destinationMailboxId: success.parentId,
parentId: success.destinationMailboxId));
},
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));
}
_refreshMailboxChanges(
@@ -934,8 +929,8 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
case MailboxActions.delete:
openConfirmationDialogDeleteMailboxAction(
context,
_responsiveUtils,
_imagePaths,
responsiveUtils,
imagePaths,
mailbox,
onDeleteMailboxAction: _deleteMailboxAction
);
@@ -944,7 +939,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
openDialogRenameMailboxAction(
context,
mailbox,
_responsiveUtils,
responsiveUtils,
onRenameMailboxAction: _renameMailboxAction
);
break;
@@ -1168,7 +1163,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
{List<MailboxId>? listDescendantMailboxIds}
) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toastMsgHideFolderSuccess,
actionName: AppLocalizations.of(currentContext!).undo,
@@ -1176,11 +1171,11 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
mailboxIdSubscribed,
listDescendantMailboxIds: listDescendantMailboxIds
),
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));
}
}
@@ -27,9 +27,9 @@ class MailboxView extends BaseMailboxView {
ThemeUtils.setStatusBarTransparentColor();
return SafeArea(bottom: false, left: false, right: false,
top: responsiveUtils.isMobile(context),
top: controller.responsiveUtils.isMobile(context),
child: ClipRRect(
borderRadius: responsiveUtils.isPortraitMobile(context)
borderRadius: controller.responsiveUtils.isPortraitMobile(context)
? const BorderRadius.only(
topRight: Radius.circular(14),
topLeft: Radius.circular(14))
@@ -88,7 +88,7 @@ class MailboxView extends BaseMailboxView {
final appInformation = controller.mailboxDashBoardController.appInformation.value;
if (appInformation != null
&& !controller.isSelectionEnabled()) {
if (responsiveUtils.isLandscapeMobile(context)) {
if (controller.responsiveUtils.isLandscapeMobile(context)) {
return const SizedBox.shrink();
}
return _buildVersionInformation(context, appInformation);
@@ -108,7 +108,7 @@ class MailboxView extends BaseMailboxView {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(top: responsiveUtils.isMobile(context) ? 10 : 30, bottom: 8),
padding: EdgeInsets.only(top: controller.responsiveUtils.isMobile(context) ? 10 : 30, bottom: 8),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
@@ -124,7 +124,7 @@ class MailboxView extends BaseMailboxView {
]
)
),
if (!responsiveUtils.isTabletLarge(context))
if (!controller.responsiveUtils.isTabletLarge(context))
const Divider(color: AppColor.colorDividerMailbox, height: 1),
]
);
@@ -132,7 +132,7 @@ class MailboxView extends BaseMailboxView {
Widget _buildCloseScreenButton(BuildContext context) {
return buildIconWeb(
icon: SvgPicture.asset(imagePaths.icCircleClose, width: 28, height: 28, fit: BoxFit.fill),
icon: SvgPicture.asset(controller.imagePaths.icCircleClose, width: 28, height: 28, fit: BoxFit.fill),
tooltip: AppLocalizations.of(context).close,
onTap: () => controller.closeMailboxScreen(context));
}
@@ -163,7 +163,7 @@ class MailboxView extends BaseMailboxView {
padding: const EdgeInsets.only(bottom: 16),
child: Column(children: [
Obx(() {
if (controller.isSelectionEnabled() && responsiveUtils.isLandscapeMobile(context)) {
if (controller.isSelectionEnabled() && controller.responsiveUtils.isLandscapeMobile(context)) {
return const SizedBox.shrink();
}
return UserInformationWidget(
@@ -180,7 +180,7 @@ class MailboxView extends BaseMailboxView {
}),
Obx(() => MailboxLoadingBarWidget(viewState: controller.viewState.value)),
AppConfig.appGridDashboardAvailable
? buildAppGridDashboard(context, responsiveUtils, imagePaths, controller)
? buildAppGridDashboard(context, controller.responsiveUtils, controller.imagePaths, controller)
: const SizedBox.shrink(),
const SizedBox(height: 8),
Obx(() {
@@ -212,7 +212,7 @@ class MailboxView extends BaseMailboxView {
const SizedBox(height: 12),
Container(
margin: EdgeInsetsDirectional.only(
start: responsiveUtils.isLandscapeMobile(context) ? 0 : 8,
start: controller.responsiveUtils.isLandscapeMobile(context) ? 0 : 8,
end: 16),
padding: const EdgeInsetsDirectional.only(start: 8),
child: Row(
@@ -232,7 +232,7 @@ class MailboxView extends BaseMailboxView {
minSize: 40,
iconPadding: EdgeInsets.zero,
icon: SvgPicture.asset(
imagePaths.icSearchBar,
controller.imagePaths.icSearchBar,
colorFilter: AppColor.colorTextButton.asFilter(),
fit: BoxFit.fill
),
@@ -245,7 +245,7 @@ class MailboxView extends BaseMailboxView {
iconPadding: EdgeInsets.zero,
splashRadius: 15,
icon: SvgPicture.asset(
imagePaths.icAddNewFolder,
controller.imagePaths.icAddNewFolder,
colorFilter: AppColor.colorTextButton.asFilter(),
fit: BoxFit.fill),
tooltip: AppLocalizations.of(context).newFolder,
@@ -285,7 +285,7 @@ class MailboxView extends BaseMailboxView {
return Padding(
padding: EdgeInsetsDirectional.only(
start: 4,
end: responsiveUtils.isLandscapeMobile(context) ? 8 : 28),
end: controller.responsiveUtils.isLandscapeMobile(context) ? 8 : 28),
child: Row(children: [
buildIconWeb(
minSize: 40,
@@ -294,8 +294,8 @@ class MailboxView extends BaseMailboxView {
splashRadius: 15,
icon: SvgPicture.asset(
categories.getExpandMode(controller.mailboxCategoriesExpandMode.value) == ExpandMode.EXPAND
? imagePaths.icArrowBottom
: DirectionUtils.isDirectionRTLByLanguage(context) ? imagePaths.icArrowLeft : imagePaths.icArrowRight,
? controller.imagePaths.icArrowBottom
: DirectionUtils.isDirectionRTLByLanguage(context) ? controller.imagePaths.icArrowLeft : controller.imagePaths.icArrowRight,
colorFilter: AppColor.primaryColor.asFilter(),
fit: BoxFit.fill),
tooltip: AppLocalizations.of(context).collapse,
@@ -312,7 +312,7 @@ class MailboxView extends BaseMailboxView {
return Container(
margin: EdgeInsetsDirectional.only(
start: responsiveUtils.isLandscapeMobile(context) ? 0 : 8,
start: controller.responsiveUtils.isLandscapeMobile(context) ? 0 : 8,
end: 16
),
padding: const EdgeInsetsDirectional.only(start: 12),
@@ -348,7 +348,7 @@ class MailboxView extends BaseMailboxView {
mailboxNode: mailboxNode,
selectionMode: controller.currentSelectMode.value,
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value,
onLongPressMailboxNodeAction: (mailboxNode) => openMailboxMenuActionOnMobile(context, imagePaths, mailboxNode.item, controller),
onLongPressMailboxNodeAction: (mailboxNode) => openMailboxMenuActionOnMobile(context, controller.imagePaths, mailboxNode.item, controller),
onOpenMailboxFolderClick: (mailboxNode) => controller.openMailbox(context, mailboxNode.item),
onExpandFolderActionClick: (mailboxNode) => controller.toggleMailboxFolder(mailboxNode, controller.mailboxListScrollController),
onSelectMailboxFolderClick: (mailboxNode) => controller.selectMailboxNode(mailboxNode),
@@ -360,7 +360,7 @@ class MailboxView extends BaseMailboxView {
mailboxNode: mailboxNode,
selectionMode: controller.currentSelectMode.value,
mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value,
onLongPressMailboxNodeAction: (mailboxNode) => openMailboxMenuActionOnMobile(context, imagePaths, mailboxNode.item, controller),
onLongPressMailboxNodeAction: (mailboxNode) => openMailboxMenuActionOnMobile(context, controller.imagePaths, mailboxNode.item, controller),
onOpenMailboxFolderClick: (mailboxNode) => controller.openMailbox(context, mailboxNode.item),
onSelectMailboxFolderClick: (mailboxNode) => controller.selectMailboxNode(mailboxNode)
));
@@ -22,25 +22,25 @@ class MailboxView extends BaseMailboxView {
@override
Widget build(BuildContext context) {
return Drawer(
elevation: responsiveUtils.isDesktop(context) ? 0 : 16.0,
elevation: controller.responsiveUtils.isDesktop(context) ? 0 : 16.0,
child: Scaffold(
backgroundColor: responsiveUtils.isWebDesktop(context)
backgroundColor: controller.responsiveUtils.isWebDesktop(context)
? AppColor.colorBgDesktop
: Colors.white,
body: Column(children: [
if (!responsiveUtils.isDesktop(context)) _buildLogoApp(context),
if (!responsiveUtils.isDesktop(context))
if (!controller.responsiveUtils.isDesktop(context)) _buildLogoApp(context),
if (!controller.responsiveUtils.isDesktop(context))
const Divider(
color: AppColor.colorDividerMailbox,
height: 0.5,
thickness: 0.2),
Expanded(child: Container(
padding: EdgeInsetsDirectional.only(start: responsiveUtils.isDesktop(context) ? 16 : 0),
color: responsiveUtils.isDesktop(context)
padding: EdgeInsetsDirectional.only(start: controller.responsiveUtils.isDesktop(context) ? 16 : 0),
color: controller.responsiveUtils.isDesktop(context)
? AppColor.colorBgDesktop
: Colors.white,
child: Container(
color: responsiveUtils.isDesktop(context)
color: controller.responsiveUtils.isDesktop(context)
? AppColor.colorBgDesktop
: Colors.white,
child: _buildListMailbox(context),
@@ -56,9 +56,9 @@ class MailboxView extends BaseMailboxView {
return Container(
color: Colors.white,
padding: EdgeInsetsDirectional.only(
top: responsiveUtils.isDesktop(context) ? 25 : 16,
bottom: responsiveUtils.isDesktop(context) ? 25 : 16,
start: responsiveUtils.isDesktop(context) ? 32 : 16,
top: controller.responsiveUtils.isDesktop(context) ? 25 : 16,
bottom: controller.responsiveUtils.isDesktop(context) ? 25 : 16,
start: controller.responsiveUtils.isDesktop(context) ? 32 : 16,
),
child: Row(children: [
SloganBuilder(
@@ -66,7 +66,7 @@ class MailboxView extends BaseMailboxView {
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
),
Obx(() {
if (controller.mailboxDashBoardController.appInformation.value != null) {
@@ -98,9 +98,9 @@ class MailboxView extends BaseMailboxView {
controller: controller.mailboxListScrollController,
key: const PageStorageKey('mailbox_list'),
physics: const AlwaysScrollableScrollPhysics(),
padding: EdgeInsetsDirectional.only(end: responsiveUtils.isDesktop(context) ? 16 : 0),
padding: EdgeInsetsDirectional.only(end: controller.responsiveUtils.isDesktop(context) ? 16 : 0),
child: Column(children: [
if (!responsiveUtils.isDesktop(context))
if (!controller.responsiveUtils.isDesktop(context))
Obx(() => UserInformationWidget(
userProfile: controller.mailboxDashBoardController.userProfile.value,
subtitle: AppLocalizations.of(context).manage_account,
@@ -113,8 +113,8 @@ class MailboxView extends BaseMailboxView {
),
)),
Obx(() => MailboxLoadingBarWidget(viewState: controller.viewState.value)),
AppConfig.appGridDashboardAvailable && responsiveUtils.isWebNotDesktop(context)
? buildAppGridDashboard(context, responsiveUtils, imagePaths, controller)
AppConfig.appGridDashboardAvailable && controller.responsiveUtils.isWebNotDesktop(context)
? buildAppGridDashboard(context, controller.responsiveUtils, controller.imagePaths, controller)
: const SizedBox.shrink(),
const SizedBox(height: 8),
Obx(() {
@@ -133,7 +133,7 @@ class MailboxView extends BaseMailboxView {
const SizedBox(height: 13),
Padding(
padding: EdgeInsetsDirectional.only(
start: responsiveUtils.isDesktop(context) ? 0 : 12,
start: controller.responsiveUtils.isDesktop(context) ? 0 : 12,
bottom: 8
),
child: Row(
@@ -148,14 +148,14 @@ class MailboxView extends BaseMailboxView {
)
)),
Padding(
padding: EdgeInsetsDirectional.only(end: responsiveUtils.isDesktop(context) ? 0 : 12),
padding: EdgeInsetsDirectional.only(end: controller.responsiveUtils.isDesktop(context) ? 0 : 12),
child: Row(
children: [
buildIconWeb(
minSize: 40,
iconPadding: EdgeInsets.zero,
icon: SvgPicture.asset(
imagePaths.icSearchBar,
controller.imagePaths.icSearchBar,
colorFilter: AppColor.colorTextButton.asFilter(),
fit: BoxFit.fill
),
@@ -167,7 +167,7 @@ class MailboxView extends BaseMailboxView {
iconPadding: EdgeInsets.zero,
splashRadius: 15,
icon: SvgPicture.asset(
imagePaths.icAddNewFolder,
controller.imagePaths.icAddNewFolder,
colorFilter: AppColor.colorTextButton.asFilter(),
fit: BoxFit.fill),
tooltip: AppLocalizations.of(context).newFolder,
@@ -233,8 +233,8 @@ class MailboxView extends BaseMailboxView {
return Container(
padding: EdgeInsets.only(
right: responsiveUtils.isDesktop(context) ? 0 : 16,
left: responsiveUtils.isDesktop(context) ? 0 : 16),
right: controller.responsiveUtils.isDesktop(context) ? 0 : 16,
left: controller.responsiveUtils.isDesktop(context) ? 0 : 16),
child: TreeView(
key: Key('${categories.keyValue}_mailbox_list'),
children: _buildListChildTileWidget(
@@ -255,8 +255,8 @@ class MailboxView extends BaseMailboxView {
children: [
buildHeaderMailboxCategory(
context,
responsiveUtils,
imagePaths,
controller.responsiveUtils,
controller.imagePaths,
categories,
controller,
toggleMailboxCategories: controller.toggleMailboxCategories
@@ -295,8 +295,8 @@ class MailboxView extends BaseMailboxView {
onMenuActionClick: (position, mailboxNode) {
openMailboxMenuActionOnWeb(
context,
imagePaths,
responsiveUtils,
controller.imagePaths,
controller.responsiveUtils,
position,
mailboxNode.item,
controller
@@ -316,8 +316,8 @@ class MailboxView extends BaseMailboxView {
onMenuActionClick: (position, mailboxNode) {
openMailboxMenuActionOnWeb(
context,
imagePaths,
responsiveUtils,
controller.imagePaths,
controller.responsiveUtils,
position,
mailboxNode.item,
controller
@@ -1,6 +1,4 @@
import 'package:core/presentation/extensions/color_extension.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/views/text/text_field_builder.dart';
import 'package:core/utils/app_logger.dart';
@@ -19,8 +17,6 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
final _maxHeight = 656.0;
final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
@override
final controller = Get.find<MailboxCreatorController>();
@@ -38,7 +34,7 @@ class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
borderOnForeground: false,
color: Colors.transparent,
child: SafeArea(
top: PlatformInfo.isMobile && _responsiveUtils.isPortraitMobile(context),
top: PlatformInfo.isMobile && controller.responsiveUtils.isPortraitMobile(context),
bottom: false,
left: false,
right: false,
@@ -69,8 +65,8 @@ class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
child: SafeArea(
top: false,
bottom: false,
left: PlatformInfo.isMobile && _responsiveUtils.isLandscapeMobile(context),
right: PlatformInfo.isMobile && _responsiveUtils.isLandscapeMobile(context),
left: PlatformInfo.isMobile && controller.responsiveUtils.isLandscapeMobile(context),
right: PlatformInfo.isMobile && controller.responsiveUtils.isLandscapeMobile(context),
child: Column(children: [
_buildAppBar(context),
const Divider(color: AppColor.colorDividerDestinationPicker, height: 1),
@@ -148,7 +144,7 @@ class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
child: Row(children: [
const SizedBox(width: 12),
Obx(() => SvgPicture.asset(
controller.selectedMailbox.value?.getMailboxIcon(_imagePaths) ?? _imagePaths.icFolderMailbox,
controller.selectedMailbox.value?.getMailboxIcon(controller.imagePaths) ?? controller.imagePaths.icFolderMailbox,
width: PlatformInfo.isWeb ? 20 : 24,
height: PlatformInfo.isWeb ? 20 : 24,
fit: BoxFit.fill)),
@@ -168,7 +164,9 @@ class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
IconButton(
color: AppColor.primaryColor,
icon: SvgPicture.asset(
DirectionUtils.isDirectionRTLByLanguage(context) ? _imagePaths.icBack : _imagePaths.icCollapseFolder,
DirectionUtils.isDirectionRTLByLanguage(context)
? controller.imagePaths.icBack
: controller.imagePaths.icCollapseFolder,
colorFilter: AppColor.colorCollapseMailbox.asFilter(),
fit: BoxFit.fill),
onPressed: () => controller.selectMailboxLocation(context))
@@ -180,14 +178,14 @@ class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
double _getWidthView(BuildContext context) {
if (PlatformInfo.isWeb) {
if (_responsiveUtils.isMobile(context)) {
if (controller.responsiveUtils.isMobile(context)) {
return double.infinity;
} else {
return 556;
}
} else {
if (_responsiveUtils.isLandscapeMobile(context) ||
_responsiveUtils.isPortraitMobile(context)) {
if (controller.responsiveUtils.isLandscapeMobile(context) ||
controller.responsiveUtils.isPortraitMobile(context)) {
return double.infinity;
} else {
return 556;
@@ -197,21 +195,21 @@ class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
double _getHeightView(BuildContext context) {
if (PlatformInfo.isWeb) {
if (_responsiveUtils.isMobile(context)) {
if (controller.responsiveUtils.isMobile(context)) {
return double.infinity;
} else {
if (_responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
if (controller.responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
return _maxHeight;
} else {
return double.infinity;
}
}
} else {
if (_responsiveUtils.isLandscapeMobile(context) ||
_responsiveUtils.isPortraitMobile(context)) {
if (controller.responsiveUtils.isLandscapeMobile(context) ||
controller.responsiveUtils.isPortraitMobile(context)) {
return double.infinity;
} else {
if (_responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
if (controller.responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
return _maxHeight;
} else {
return double.infinity;
@@ -223,21 +221,21 @@ class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
EdgeInsets _getMarginView(BuildContext context) {
if (PlatformInfo.isWeb) {
if (_responsiveUtils.isMobile(context)) {
if (controller.responsiveUtils.isMobile(context)) {
return EdgeInsets.zero;
} else {
if (_responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
if (controller.responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
return const EdgeInsets.symmetric(vertical: 12);
} else {
return const EdgeInsets.symmetric(vertical: 50);
}
}
} else {
if (_responsiveUtils.isLandscapeMobile(context) ||
_responsiveUtils.isPortraitMobile(context)) {
if (controller.responsiveUtils.isLandscapeMobile(context) ||
controller.responsiveUtils.isPortraitMobile(context)) {
return EdgeInsets.zero;
} else {
if (_responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
if (controller.responsiveUtils.getSizeScreenHeight(context) > _maxHeight) {
return const EdgeInsets.symmetric(vertical: 12);
} else {
return const EdgeInsets.symmetric(vertical: 50);
@@ -247,9 +245,9 @@ class MailboxCreatorView extends GetWidget<MailboxCreatorController> {
}
BorderRadius _getRadiusView(BuildContext context) {
if (PlatformInfo.isMobile && _responsiveUtils.isLandscapeMobile(context)) {
if (PlatformInfo.isMobile && controller.responsiveUtils.isLandscapeMobile(context)) {
return BorderRadius.zero;
} else if (_responsiveUtils.isMobile(context)) {
} else if (controller.responsiveUtils.isMobile(context)) {
return const BorderRadius.only(
topRight: Radius.circular(16),
topLeft: Radius.circular(16));
@@ -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,
@@ -1,34 +1,10 @@
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/base_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/mailto/presentation/mailto_url_controller.dart';
class MailtoUrlBindings extends BaseBindings {
class MailtoUrlBindings extends Bindings {
@override
void bindingsController() {
Get.lazyPut(() => MailtoUrlController(
Get.find<GetAuthenticatedAccountInteractor>(),
Get.find<UpdateAuthenticationAccountInteractor>(),
));
void dependencies() {
Get.lazyPut(() => MailtoUrlController());
}
@override
void bindingsDataSource() {}
@override
void bindingsDataSourceImpl() {}
@override
void bindingsInteractor() {
Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find<AccountRepository>()));
}
@override
void bindingsRepository() {}
@override
void bindingsRepositoryImpl() {}
}
@@ -2,8 +2,6 @@ import 'package:core/utils/app_logger.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.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/mailto/presentation/model/mailto_arguments.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
@@ -12,14 +10,6 @@ import 'package:tmail_ui_user/main/routes/route_utils.dart';
class MailtoUrlController extends ReloadableController {
MailtoUrlController(
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor,
) : super(
getAuthenticatedAccountInteractor,
updateAuthenticationAccountInteractor
);
@override
void onReady() {
super.onReady();
@@ -1,8 +1,5 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/bottom_popup/confirmation_dialog_action_sheet_builder.dart';
import 'package:core/presentation/views/dialog/confirmation_dialog_builder.dart';
import 'package:core/utils/app_logger.dart';
@@ -42,9 +39,6 @@ class EmailRulesController extends BaseController {
EditEmailRuleFilterInteractor? _editEmailRuleFilterInteractor;
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
final _imagePaths = Get.find<ImagePaths>();
final _appToast = Get.find<AppToast>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
final listEmailRule = <TMailRule>[].obs;
@@ -111,7 +105,7 @@ class EmailRulesController extends BaseController {
void _createNewRuleFilterSuccess(CreateNewRuleFilterSuccess success) {
if (success.newListRules.isNotEmpty == true) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).newFilterWasCreated);
}
@@ -152,7 +146,7 @@ class EmailRulesController extends BaseController {
void _editEmailRuleFilterSuccess(EditEmailRuleFilterSuccess success) {
if (success.listRulesUpdated.isNotEmpty == true) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).yourFilterHasBeenUpdated);
}
@@ -162,7 +156,7 @@ class EmailRulesController extends BaseController {
}
void deleteEmailRule(BuildContext context, TMailRule emailRule) {
if (_responsiveUtils.isMobile(context)) {
if (responsiveUtils.isMobile(context)) {
(ConfirmationDialogActionSheetBuilder(context)
..messageText(AppLocalizations.of(context).messageConfirmationDialogDeleteEmailRule(emailRule.name))
..onCancelAction(AppLocalizations.of(context).cancel, () =>
@@ -176,10 +170,10 @@ class EmailRulesController extends BaseController {
context: context,
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (BuildContext context) =>
PointerInterceptor(child: (ConfirmDialogBuilder(_imagePaths)
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
..title(AppLocalizations.of(context).deleteEmailRule)
..content(AppLocalizations.of(context).messageConfirmationDialogDeleteEmailRule(emailRule.name))
..addIcon(SvgPicture.asset(_imagePaths.icRemoveDialog,
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog,
fit: BoxFit.fill))
..marginIcon(EdgeInsets.zero)
..colorConfirmButton(AppColor.colorConfirmActionDialog)
@@ -236,7 +230,7 @@ class EmailRulesController extends BaseController {
void _handleDeleteEmailRuleSuccess(DeleteEmailRuleSuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toastMessageDeleteEmailRuleSuccessfully);
}
@@ -267,7 +261,7 @@ class EmailRulesController extends BaseController {
return (EmailRuleBottomSheetActionTileBuilder(
const Key('delete_emailRule_action'),
SvgPicture.asset(
_imagePaths.icDeleteComposer,
imagePaths.icDeleteComposer,
colorFilter: AppColor.colorActionDeleteConfirmDialog.asFilter()),
AppLocalizations.of(context).deleteRule,
rule,
@@ -284,7 +278,7 @@ class EmailRulesController extends BaseController {
Widget _editEmailRuleActionTile(BuildContext context, TMailRule rule) {
return (EmailRuleBottomSheetActionTileBuilder(
const Key('edit_emailRule_action'),
SvgPicture.asset(_imagePaths.icEdit),
SvgPicture.asset(imagePaths.icEdit),
AppLocalizations.of(context).editRule,
rule,
iconLeftPadding: const EdgeInsets.only(left: 12, right: 16),
@@ -8,31 +8,29 @@ import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/w
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
class EmailRulesView extends GetWidget<EmailRulesController> with AppLoaderMixin {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
EmailRulesView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: _responsiveUtils.isWebDesktop(context)
backgroundColor: controller.responsiveUtils.isWebDesktop(context)
? AppColor.colorBgDesktop
: Colors.white,
body: Container(
width: double.infinity,
margin: SettingsUtils.getMarginViewForSettingDetails(context, _responsiveUtils),
margin: SettingsUtils.getMarginViewForSettingDetails(context, controller.responsiveUtils),
child: SingleChildScrollView(
physics: const ClampingScrollPhysics(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
EmailRulesHeaderWidget(
imagePaths: _imagePaths,
responsiveUtils: _responsiveUtils,
imagePaths: controller.imagePaths,
responsiveUtils: controller.responsiveUtils,
createRule: () => controller.goToCreateNewRule(context),
),
SizedBox(height: _responsiveUtils.isWebDesktop(context) ? 24 : 16),
SizedBox(height: controller.responsiveUtils.isWebDesktop(context) ? 24 : 16),
_buildLoadingView(),
const ListEmailRulesWidget()
],
@@ -1,8 +1,6 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/presentation/utils/keyboard_utils.dart';
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart';
@@ -41,8 +39,6 @@ class ForwardController extends BaseController {
EditLocalCopyInForwardingInteractor? _editLocalCopyInForwardingInteractor;
final accountDashBoardController = Get.find<ManageAccountDashBoardController>();
final _imagePaths = Get.find<ImagePaths>();
final _appToast = Get.find<AppToast>();
final selectionMode = Rx<SelectMode>(SelectMode.INACTIVE);
final listRecipientForward = RxList<RecipientForward>();
@@ -120,7 +116,7 @@ class ForwardController extends BaseController {
AppLocalizations.of(context).remove,
onConfirmAction: () => _handleDeleteRecipientAction({emailAddress}),
showAsBottomSheet: true,
icon: SvgPicture.asset(_imagePaths.icDeleteDialogRecipients, fit: BoxFit.fill),
icon: SvgPicture.asset(imagePaths.icDeleteDialogRecipients, fit: BoxFit.fill),
titleStyle: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
@@ -153,7 +149,7 @@ class ForwardController extends BaseController {
void _handleDeleteRecipientSuccess(DeleteRecipientInForwardingSuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toastMessageDeleteRecipientSuccessfully);
}
@@ -205,7 +201,7 @@ class ForwardController extends BaseController {
AppLocalizations.of(currentContext!).remove,
onConfirmAction: () => _handleDeleteRecipientAction(listEmailAddress),
showAsBottomSheet: true,
icon: SvgPicture.asset(_imagePaths.icDeleteDialogRecipients, fit: BoxFit.fill),
icon: SvgPicture.asset(imagePaths.icDeleteDialogRecipients, fit: BoxFit.fill),
titleStyle: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
@@ -255,7 +251,7 @@ class ForwardController extends BaseController {
void _handleAddRecipientsSuccess(AddRecipientsInForwardingSuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toastMessageAddRecipientsSuccessfully);
}
@@ -281,7 +277,7 @@ class ForwardController extends BaseController {
void _handleEditLocalCopySuccess(EditLocalCopyInForwardingSuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
success.forward.localCopy
? AppLocalizations.of(currentContext!).toastMessageLocalCopyEnable
@@ -306,11 +302,11 @@ class ForwardController extends BaseController {
void handleExceptionCallback(BuildContext context, bool isListEmailEmpty) {
if (isListEmailEmpty) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
context,
AppLocalizations.of(context).emptyListEmailForward);
} else {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
context,
AppLocalizations.of(context).incorrectEmailFormat);
}
@@ -1,7 +1,5 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/utils/style_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
@@ -15,33 +13,31 @@ import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class ForwardView extends GetWidget<ForwardController> with AppLoaderMixin {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
ForwardView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: SettingsUtils.getBackgroundColor(context, _responsiveUtils),
backgroundColor: SettingsUtils.getBackgroundColor(context, controller.responsiveUtils),
body: Container(
width: double.infinity,
height: double.infinity,
color: SettingsUtils.getContentBackgroundColor(context, _responsiveUtils),
decoration: SettingsUtils.getBoxDecorationForContent(context, _responsiveUtils),
margin: SettingsUtils.getMarginViewForForwardSettingDetails(context, _responsiveUtils),
color: SettingsUtils.getContentBackgroundColor(context, controller.responsiveUtils),
decoration: SettingsUtils.getBoxDecorationForContent(context, controller.responsiveUtils),
margin: SettingsUtils.getMarginViewForForwardSettingDetails(context, controller.responsiveUtils),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (_responsiveUtils.isWebDesktop(context))
if (controller.responsiveUtils.isWebDesktop(context))
...[
ForwardHeaderWidget(imagePaths: _imagePaths, responsiveUtils: _responsiveUtils),
ForwardHeaderWidget(imagePaths: controller.imagePaths, responsiveUtils: controller.responsiveUtils),
const Divider(height: 1, color: AppColor.colorDividerHeaderSetting)
],
Expanded(child: SingleChildScrollView(
physics: const ClampingScrollPhysics(),
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
if (!_responsiveUtils.isWebDesktop(context))
if (!controller.responsiveUtils.isWebDesktop(context))
_buildTitleHeader(context),
_buildKeepLocalSwitchButton(context),
Obx(() => controller.currentForward.value != null
@@ -51,7 +47,7 @@ class ForwardView extends GetWidget<ForwardController> with AppLoaderMixin {
_buildLoadingView(),
Obx(() {
if (controller.listRecipientForward.isNotEmpty) {
return ListEmailForwardsWidget();
return const ListEmailForwardsWidget();
} else {
return const SizedBox.shrink();
}
@@ -68,7 +64,7 @@ class ForwardView extends GetWidget<ForwardController> with AppLoaderMixin {
return Container(
color: Colors.transparent,
width: double.infinity,
padding: SettingsUtils.getPaddingTitleHeaderForwarding(context, _responsiveUtils),
padding: SettingsUtils.getPaddingTitleHeaderForwarding(context, controller.responsiveUtils),
child: Text(
AppLocalizations.of(context).forwardingSettingExplanation,
style: const TextStyle(
@@ -85,7 +81,7 @@ class ForwardView extends GetWidget<ForwardController> with AppLoaderMixin {
return controller.listRecipientForward.isNotEmpty
? Container(
color: Colors.transparent,
padding: SettingsUtils.getPaddingKeepLocalSwitchButtonForwarding(context, _responsiveUtils),
padding: SettingsUtils.getPaddingKeepLocalSwitchButtonForwarding(context, controller.responsiveUtils),
child: Row(children: [
Padding(
padding: const EdgeInsets.only(right: 16),
@@ -93,8 +89,8 @@ class ForwardView extends GetWidget<ForwardController> with AppLoaderMixin {
onTap: controller.handleEditLocalCopy,
child: SvgPicture.asset(
controller.currentForwardLocalCopyState
? _imagePaths.icSwitchOn
: _imagePaths.icSwitchOff,
? controller.imagePaths.icSwitchOn
: controller.imagePaths.icSwitchOff,
fit: BoxFit.fill,
width: 36,
height: 24))),
@@ -1,6 +1,4 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/button/icon_button_web.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
@@ -15,16 +13,13 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class ListEmailForwardsWidget extends GetWidget<ForwardController> {
final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
ListEmailForwardsWidget({Key? key}) : super(key: key);
const ListEmailForwardsWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
color: Colors.transparent,
padding: SettingsUtils.getPaddingListRecipientForwarding(context, _responsiveUtils),
padding: SettingsUtils.getPaddingListRecipientForwarding(context, controller.responsiveUtils),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
@@ -106,7 +101,7 @@ class ListEmailForwardsWidget extends GetWidget<ForwardController> {
children: [
buildIconWeb(
icon: SvgPicture.asset(
_imagePaths.icClose,
controller.imagePaths.icClose,
colorFilter: AppColor.colorTextButton.asFilter(),
fit: BoxFit.fill),
tooltip: AppLocalizations.of(context).cancel,
@@ -1,6 +1,5 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_portal/flutter_portal.dart';
import 'package:get/get.dart';
@@ -12,24 +11,22 @@ import 'package:tmail_ui_user/main/utils/app_utils.dart';
class LanguageAndRegionView extends GetWidget<LanguageAndRegionController> {
final _responsiveUtils = Get.find<ResponsiveUtils>();
LanguageAndRegionView({Key? key}) : super(key: key);
const LanguageAndRegionView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Portal(
child: Scaffold(
backgroundColor: _responsiveUtils.isWebDesktop(context)
backgroundColor: controller.responsiveUtils.isWebDesktop(context)
? AppColor.colorBgDesktop
: Colors.white,
body: Container(
width: double.infinity,
margin: _responsiveUtils.isWebDesktop(context)
margin: controller.responsiveUtils.isWebDesktop(context)
? const EdgeInsets.all(24)
: EdgeInsets.symmetric(horizontal: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)),
color: _responsiveUtils.isWebDesktop(context) ? null : Colors.white,
decoration: _responsiveUtils.isWebDesktop(context)
: EdgeInsets.symmetric(horizontal: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)),
color: controller.responsiveUtils.isWebDesktop(context) ? null : Colors.white,
decoration: controller.responsiveUtils.isWebDesktop(context)
? BoxDecoration(
borderRadius: BorderRadius.circular(20),
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
@@ -37,15 +34,15 @@ class LanguageAndRegionView extends GetWidget<LanguageAndRegionController> {
: null,
child: ClipRRect(
borderRadius: BorderRadius.circular(
_responsiveUtils.isWebDesktop(context) ? 20 : 0),
controller.responsiveUtils.isWebDesktop(context) ? 20 : 0),
child: Padding(
padding: EdgeInsets.only(
right: AppUtils.isDirectionRTL(context)
? _responsiveUtils.isWebDesktop(context) ? 24 : 0
? controller.responsiveUtils.isWebDesktop(context) ? 24 : 0
: 0,
left: AppUtils.isDirectionRTL(context)
? 0
: _responsiveUtils.isWebDesktop(context) ? 24 : 0,
: controller.responsiveUtils.isWebDesktop(context) ? 24 : 0,
top: 24
),
child: Column(
@@ -1,7 +1,5 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/material.dart';
@@ -40,8 +38,6 @@ class MailboxVisibilityController extends BaseMailboxController {
SubscribeMailboxInteractor? _subscribeMailboxInteractor;
SubscribeMultipleMailboxInteractor? _subscribeMultipleMailboxInteractor;
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
final _appToast = Get.find<AppToast>();
final _imagePaths = Get.find<ImagePaths>();
final mailboxListScrollController = ScrollController();
MailboxVisibilityController(
@@ -221,7 +217,7 @@ class MailboxVisibilityController extends BaseMailboxController {
{List<MailboxId>? listDescendantMailboxIds}
) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toastMsgHideFolderSuccess,
actionName: AppLocalizations.of(currentContext!).undo,
@@ -233,10 +229,10 @@ class MailboxVisibilityController extends BaseMailboxController {
)
),
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),
);
}
}
@@ -1,7 +1,5 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/list/tree_view.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -21,19 +19,16 @@ class MailboxVisibilityView extends GetWidget<MailboxVisibilityController>
with AppLoaderMixin,
MailboxWidgetMixin {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
MailboxVisibilityView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return SettingDetailViewBuilder(
responsiveUtils: _responsiveUtils,
responsiveUtils: controller.responsiveUtils,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (_responsiveUtils.isWebDesktop(context))
if (controller.responsiveUtils.isWebDesktop(context))
...[
const SizedBox(height: 24),
const MailboxVisibilityHeaderWidget(),
@@ -46,7 +41,7 @@ class MailboxVisibilityView extends GetWidget<MailboxVisibilityController>
],
_buildLoadingView(),
Expanded(child: Padding(
padding: MailboxVisibilityUtils.getPaddingListView(context, _responsiveUtils),
padding: MailboxVisibilityUtils.getPaddingListView(context, controller.responsiveUtils),
child: _buildListMailbox(context)
))
]
@@ -100,8 +95,8 @@ class MailboxVisibilityView extends GetWidget<MailboxVisibilityController>
return Column(children: [
buildHeaderMailboxCategory(
context,
_responsiveUtils,
_imagePaths,
controller.responsiveUtils,
controller.imagePaths,
categories,
controller,
padding: const EdgeInsets.all(8),
@@ -139,7 +134,7 @@ class MailboxVisibilityView extends GetWidget<MailboxVisibilityController>
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
paddingChild: const EdgeInsetsDirectional.only(start: 10),
parent: MailBoxVisibilityFolderTileBuilder(
_imagePaths,
controller.imagePaths,
mailboxNode,
onClickExpandMailboxNodeAction: (mailboxNode) {
controller.toggleMailboxFolder(mailboxNode, controller.mailboxListScrollController);
@@ -148,7 +143,7 @@ class MailboxVisibilityView extends GetWidget<MailboxVisibilityController>
),
children: _buildListChildTileWidget(context, mailboxNode)).build()
: MailBoxVisibilityFolderTileBuilder(
_imagePaths,
controller.imagePaths,
mailboxNode,
onClickExpandMailboxNodeAction: (mailboxNode) {
controller.toggleMailboxFolder(mailboxNode, controller.mailboxListScrollController);
@@ -1,8 +1,5 @@
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/base_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/manage_account/data/datasource/manage_account_datasource.dart';
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
@@ -26,10 +23,7 @@ class ManageAccountDashBoardBindings extends BaseBindings {
@override
void bindingsController() {
Get.put(ManageAccountDashBoardController(
Get.find<GetAuthenticatedAccountInteractor>(),
Get.find<UpdateAuthenticationAccountInteractor>()
));
Get.put(ManageAccountDashBoardController());
}
@override
@@ -45,9 +39,7 @@ class ManageAccountDashBoardBindings extends BaseBindings {
}
@override
void bindingsInteractor() {
Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find<AccountRepository>()));
}
void bindingsInteractor() {}
@override
void bindingsRepository() {
@@ -1,6 +1,5 @@
import 'package:core/core.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:forward/forward/capability_forward.dart';
import 'package:get/get.dart';
@@ -13,8 +12,6 @@ import 'package:package_info_plus/package_info_plus.dart';
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.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/mailbox_dashboard/domain/state/get_user_profile_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart';
@@ -40,9 +37,6 @@ import 'package:tmail_ui_user/main/routes/route_utils.dart';
class ManageAccountDashBoardController extends ReloadableController {
final _appToast = Get.find<AppToast>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
GetAllVacationInteractor? _getAllVacationInteractor;
UpdateVacationInteractor? _updateVacationInteractor;
@@ -56,14 +50,6 @@ class ManageAccountDashBoardController extends ReloadableController {
Session? sessionCurrent;
ManageAccountDashBoardController(
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor
) : super(
getAuthenticatedAccountInteractor,
updateAuthenticationAccountInteractor
);
@override
void onReady() {
_initialPageLevel();
@@ -74,7 +60,6 @@ class ManageAccountDashBoardController extends ReloadableController {
@override
void handleSuccessViewState(Success success) {
super.handleSuccessViewState(success);
if (success is GetUserProfileSuccess) {
userProfile.value = success.userProfile;
} else if (success is GetAllVacationSuccess) {
@@ -83,13 +68,15 @@ class ManageAccountDashBoardController extends ReloadableController {
}
} else if (success is UpdateVacationSuccess) {
_handleUpdateVacationSuccess(success);
} else {
super.handleSuccessViewState(success);
}
}
@override
void handleReloaded(Session session) {
sessionCurrent = session;
accountId.value = session.accounts.keys.first;
accountId.value = session.personalAccount.accountId;
_getUserProfile();
_bindingInteractorForMenuItemView(sessionCurrent, accountId.value);
_getVacationResponse();
@@ -100,22 +87,20 @@ class ManageAccountDashBoardController extends ReloadableController {
log('ManageAccountDashBoardController::_getArguments(): $arguments');
if (arguments is ManageAccountArguments) {
sessionCurrent = arguments.session;
accountId.value = arguments.session?.accounts.keys.first;
accountId.value = arguments.session?.personalAccount.accountId;
_getUserProfile();
_bindingInteractorForMenuItemView(sessionCurrent, accountId.value);
_getVacationResponse();
if (arguments.menuSettingCurrent != null) {
_goToSettingMenuCurrent(arguments.menuSettingCurrent!);
}
} else {
if (kIsWeb) {
reload();
}
} else if (PlatformInfo.isWeb) {
reload();
}
}
void _initialPageLevel() {
if (currentContext != null && _responsiveUtils.isWebDesktop(currentContext!)) {
if (currentContext != null && responsiveUtils.isWebDesktop(currentContext!)) {
settingsPageLevel.value = SettingsPageLevel.level1;
} else {
settingsPageLevel.value = SettingsPageLevel.universal;
@@ -261,7 +246,7 @@ class ManageAccountDashBoardController extends ReloadableController {
void _handleUpdateVacationSuccess(UpdateVacationSuccess success) {
if (success.listVacationResponse.isNotEmpty) {
if (currentContext != null && currentOverlayContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).yourVacationResponderIsDisabledSuccessfully);
}
@@ -1,6 +1,5 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/image/avatar_builder.dart';
import 'package:core/presentation/views/responsive/responsive_widget.dart';
@@ -28,9 +27,6 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardController>
with UserSettingPopupMenuMixin {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
ManageAccountDashBoardView({Key? key}) : super(key: key);
@override
@@ -43,7 +39,7 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
body: GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
child: ResponsiveWidget(
responsiveUtils: _responsiveUtils,
responsiveUtils: controller.responsiveUtils,
desktop: Column(children: [
Row(children: [
Container(width: 256, color: Colors.white,
@@ -54,7 +50,7 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
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.backToMailboxDashBoard(context),
),
Obx(() {
@@ -78,7 +74,10 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
Expanded(child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(width: ResponsiveUtils.defaultSizeMenu, child: ManageAccountMenuView()),
const SizedBox(
width: ResponsiveUtils.defaultSizeMenu,
child: ManageAccountMenuView()
),
Expanded(child: Container(
color: AppColor.colorBgDesktop,
child: Column(children: [
@@ -162,7 +161,7 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
case AccountMenuItem.profiles:
return ProfilesView();
case AccountMenuItem.languageAndRegion:
return LanguageAndRegionView();
return const LanguageAndRegionView();
case AccountMenuItem.emailRules:
if(controller.isRuleFilterCapabilitySupported){
return EmailRulesView();
@@ -1,5 +1,6 @@
import 'package:core/core.dart';
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/manage_account/presentation/manage_account_dashboard_controller.dart';
@@ -9,7 +10,8 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class ManageAccountMenuController extends GetxController {
final dashBoardController = Get.find<ManageAccountDashBoardController>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
final listAccountMenuItem = RxList<AccountMenuItem>([
AccountMenuItem.profiles,
@@ -46,7 +48,7 @@ class ManageAccountMenuController extends GetxController {
listAccountMenuItem.value = newListMenuSetting;
if (listAccountMenuItem.isNotEmpty) {
if (currentContext != null && _responsiveUtils.isWebDesktop(currentContext!)) {
if (currentContext != null && responsiveUtils.isWebDesktop(currentContext!)) {
selectAccountMenuItem(listAccountMenuItem.first);
} else {
selectAccountMenuItem(AccountMenuItem.none);
@@ -10,21 +10,18 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
ManageAccountMenuView({Key? key}) : super(key: key);
const ManageAccountMenuView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Drawer(
elevation: _responsiveUtils.isDesktop(context) ? 0 : 16.0,
elevation: controller.responsiveUtils.isDesktop(context) ? 0 : 16.0,
child: Scaffold(
backgroundColor: Colors.white,
body: SafeArea(right: false, bottom: false,
child: Column(
children: [
if (!_responsiveUtils.isWebDesktop(context))
if (!controller.responsiveUtils.isWebDesktop(context))
Container(
color: Colors.white,
padding: const EdgeInsets.only(top: 16, bottom: 16, left: 16),
@@ -34,7 +31,7 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
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
),
Obx(() {
if (controller.dashBoardController.appInformation.value != null) {
@@ -52,10 +49,10 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
}),
])
),
if (!_responsiveUtils.isWebDesktop(context))
if (!controller.responsiveUtils.isWebDesktop(context))
const Divider(color: AppColor.colorDividerMailbox, height: 1),
Expanded(child: Container(
color: _responsiveUtils.isWebDesktop(context) ? AppColor.colorBgDesktop : Colors.white,
color: controller.responsiveUtils.isWebDesktop(context) ? AppColor.colorBgDesktop : Colors.white,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -65,8 +62,8 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
key: const Key('back_to_dashboard_button'),
text: AppLocalizations.of(context).back,
icon: DirectionUtils.isDirectionRTLByLanguage(context)
? _imagePaths.icArrowRight
: _imagePaths.icBack,
? controller.imagePaths.icArrowRight
: controller.imagePaths.icBack,
borderRadius: 10,
backgroundColor: AppColor.colorBgMailboxSelected,
iconColor: AppColor.colorTextButton,
@@ -133,7 +130,7 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
child: Row(children: [
SvgPicture.asset(_imagePaths.icSignOut, fit: BoxFit.fill),
SvgPicture.asset(controller.imagePaths.icSignOut, fit: BoxFit.fill),
const SizedBox(width: 12),
Expanded(child: Text(
AppLocalizations.of(context).sign_out,
@@ -1,3 +1,5 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/utils/app_logger.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
@@ -6,6 +8,8 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/setting
class SettingsController extends GetxController {
final manageAccountDashboardController = Get.find<ManageAccountDashBoardController>();
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
void selectSettings(AccountMenuItem accountMenuItem) {
log('SettingsController::selectSettings(): $accountMenuItem');
@@ -1,6 +1,4 @@
import 'package:core/presentation/extensions/color_extension.dart';
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/mailbox/presentation/widgets/user_information_widget.dart';
@@ -11,10 +9,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/account
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class SettingsFirstLevelView extends GetWidget<SettingsController> {
SettingsFirstLevelView({Key? key}) : super(key: key);
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
const SettingsFirstLevelView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
@@ -22,40 +17,40 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
child: Column(children: [
Obx(() => UserInformationWidget(
userProfile: controller.manageAccountDashboardController.userProfile.value,
padding: SettingsUtils.getPaddingInFirstLevel(context, _responsiveUtils),
padding: SettingsUtils.getPaddingInFirstLevel(context, controller.responsiveUtils),
titlePadding: const EdgeInsetsDirectional.only(start: 16))),
Divider(
color: AppColor.colorDividerComposer,
height: 1,
indent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)
indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
),
SettingFirstLevelTileBuilder(
AppLocalizations.of(context).profiles,
AccountMenuItem.profiles.getIcon(_imagePaths),
AccountMenuItem.profiles.getIcon(controller.imagePaths),
subtitle: AppLocalizations.of(context).profilesSettingExplanation,
() => controller.selectSettings(AccountMenuItem.profiles)
),
Divider(
color: AppColor.colorDividerComposer,
height: 1,
indent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)
indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
),
Obx(() {
if (controller.manageAccountDashboardController.isRuleFilterCapabilitySupported) {
return Column(children: [
SettingFirstLevelTileBuilder(
AccountMenuItem.emailRules.getName(context),
AccountMenuItem.emailRules.getIcon(_imagePaths),
AccountMenuItem.emailRules.getIcon(controller.imagePaths),
subtitle: AppLocalizations.of(context).emailRuleSettingExplanation,
() => controller.selectSettings(AccountMenuItem.emailRules)
),
Divider(
color: AppColor.colorDividerComposer,
height: 1,
indent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)
indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
),
]);
} else {
@@ -67,15 +62,15 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
return Column(children: [
SettingFirstLevelTileBuilder(
AccountMenuItem.forward.getName(context),
AccountMenuItem.forward.getIcon(_imagePaths),
AccountMenuItem.forward.getIcon(controller.imagePaths),
subtitle: AppLocalizations.of(context).forwardingSettingExplanation,
() => controller.selectSettings(AccountMenuItem.forward)
),
Divider(
color: AppColor.colorDividerComposer,
height: 1,
indent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)
indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
),
]);
} else {
@@ -87,15 +82,15 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
return Column(children: [
SettingFirstLevelTileBuilder(
AccountMenuItem.vacation.getName(context),
AccountMenuItem.vacation.getIcon(_imagePaths),
AccountMenuItem.vacation.getIcon(controller.imagePaths),
subtitle: AppLocalizations.of(context).vacationSettingExplanation,
() => controller.selectSettings(AccountMenuItem.vacation)
),
Divider(
color: AppColor.colorDividerComposer,
height: 1,
indent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)
indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
),
]);
} else {
@@ -105,31 +100,31 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
Column(children: [
SettingFirstLevelTileBuilder(
AccountMenuItem.mailboxVisibility.getName(context),
AccountMenuItem.mailboxVisibility.getIcon(_imagePaths),
AccountMenuItem.mailboxVisibility.getIcon(controller.imagePaths),
subtitle: AppLocalizations.of(context).folderVisibilitySubtitle,
() => controller.selectSettings(AccountMenuItem.mailboxVisibility)
),
Divider(
color: AppColor.colorDividerComposer,
height: 1,
indent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)
indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
),
]),
SettingFirstLevelTileBuilder(
AccountMenuItem.languageAndRegion.getName(context),
AccountMenuItem.languageAndRegion.getIcon(_imagePaths),
AccountMenuItem.languageAndRegion.getIcon(controller.imagePaths),
() => controller.selectSettings(AccountMenuItem.languageAndRegion)
),
Divider(
color: AppColor.colorDividerComposer,
height: 1,
indent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)
indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
),
SettingFirstLevelTileBuilder(
AppLocalizations.of(context).sign_out,
_imagePaths.icSignOut,
controller.imagePaths.icSignOut,
() => controller.manageAccountDashboardController.logout(
controller.manageAccountDashboardController.sessionCurrent,
controller.manageAccountDashboardController.accountId.value)
@@ -1,6 +1,4 @@
import 'package:core/presentation/extensions/color_extension.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/views/button/icon_button_web.dart';
import 'package:core/utils/direction_utils.dart';
@@ -27,10 +25,8 @@ import 'package:tmail_ui_user/main/utils/app_utils.dart';
typedef CloseSettingsViewAction = void Function();
class SettingsView extends GetWidget<SettingsController> {
SettingsView({Key? key, this.closeAction}) : super(key: key);
const SettingsView({Key? key, this.closeAction}) : super(key: key);
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
final CloseSettingsViewAction? closeAction;
@override
@@ -44,7 +40,7 @@ class SettingsView extends GetWidget<SettingsController> {
SizedBox.fromSize(
size: const Size.fromHeight(52),
child: Padding(
padding: SettingsUtils.getPaddingAppBar(context, _responsiveUtils),
padding: SettingsUtils.getPaddingAppBar(context, controller.responsiveUtils),
child: _buildAppbar(context))),
const Divider(color: AppColor.colorDividerComposer, height: 1),
Obx(() {
@@ -138,8 +134,8 @@ class SettingsView extends GetWidget<SettingsController> {
child: Row(mainAxisSize: MainAxisSize.min, children: [
SvgPicture.asset(
DirectionUtils.isDirectionRTLByLanguage(context)
? _imagePaths.icCollapseFolder
: _imagePaths.icBack,
? controller.imagePaths.icCollapseFolder
: controller.imagePaths.icBack,
colorFilter: AppColor.colorTextButton.asFilter(),
fit: BoxFit.fill),
Container(
@@ -179,7 +175,7 @@ class SettingsView extends GetWidget<SettingsController> {
Widget _buildCloseSettingButton(BuildContext context) {
return buildIconWeb(
icon: SvgPicture.asset(_imagePaths.icClose, width: 28, height: 28, fit: BoxFit.fill),
icon: SvgPicture.asset(controller.imagePaths.icClose, width: 28, height: 28, fit: BoxFit.fill),
tooltip: AppLocalizations.of(context).close,
onTap: closeAction);
}
@@ -188,7 +184,7 @@ class SettingsView extends GetWidget<SettingsController> {
return Obx(() {
switch (controller.manageAccountDashboardController.settingsPageLevel.value) {
case SettingsPageLevel.universal:
return SettingsFirstLevelView();
return const SettingsFirstLevelView();
case SettingsPageLevel.level1:
return _viewDisplayedOfAccountMenuItem();
}
@@ -201,7 +197,7 @@ class SettingsView extends GetWidget<SettingsController> {
case AccountMenuItem.profiles:
return ProfilesView();
case AccountMenuItem.languageAndRegion:
return LanguageAndRegionView();
return const LanguageAndRegionView();
case AccountMenuItem.emailRules:
if (controller.manageAccountDashboardController.isRuleFilterCapabilitySupported) {
return EmailRulesView();
@@ -1,10 +1,7 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/dialog/confirmation_dialog_builder.dart';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart';
@@ -42,9 +39,6 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class IdentitiesController extends BaseController {
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
final _appToast = Get.find<AppToast>();
final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
final CreateNewIdentityInteractor _createNewIdentityInteractor;
@@ -179,7 +173,7 @@ class IdentitiesController extends BaseController {
void _createNewIdentitySuccess(CreateNewIdentitySuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).you_have_created_a_new_identity);
}
@@ -189,7 +183,7 @@ class IdentitiesController extends BaseController {
void _createNewDefaultIdentitySuccess(CreateNewDefaultIdentitySuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).you_have_created_a_new_default_identity);
}
@@ -202,8 +196,8 @@ class IdentitiesController extends BaseController {
context: context,
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (BuildContext context) => DeleteIdentityDialogBuilder(
responsiveUtils: _responsiveUtils,
imagePaths: _imagePaths,
responsiveUtils: responsiveUtils,
imagePaths: imagePaths,
onDeleteIdentityAction: () => _deleteIdentityAction(identity),
));
}
@@ -220,10 +214,10 @@ class IdentitiesController extends BaseController {
void _deleteIdentitySuccess(DeleteIdentitySuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).identity_has_been_deleted,
leadingSVGIcon: _imagePaths.icDeleteToast);
leadingSVGIcon: imagePaths.icDeleteToast);
}
_refreshAllIdentities();
@@ -234,10 +228,10 @@ class IdentitiesController extends BaseController {
showDialog(
context: currentContext!,
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
builder: (BuildContext context) => (ConfirmDialogBuilder(_imagePaths)
builder: (BuildContext context) => (ConfirmDialogBuilder(imagePaths)
..key(const Key('dialog_message_delete_identity_failed'))
..title(AppLocalizations.of(context).delete_failed)
..addIcon(SvgPicture.asset(_imagePaths.icDeleteDialogFailed, fit: BoxFit.fill))
..addIcon(SvgPicture.asset(imagePaths.icDeleteDialogFailed, fit: BoxFit.fill))
..marginIcon(EdgeInsets.zero)
..styleTitle(const TextStyle(fontSize: 20,
fontWeight: FontWeight.bold,
@@ -291,7 +285,7 @@ class IdentitiesController extends BaseController {
void _editIdentitySuccess(EditIdentitySuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).you_are_changed_your_identity_successfully);
}
@@ -299,7 +293,5 @@ class IdentitiesController extends BaseController {
_refreshAllIdentities();
}
ImagePaths get imagePaths => _imagePaths;
bool get isSignatureShow => identitySelected.value != null;
}
@@ -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';
@@ -10,16 +8,13 @@ import 'package:tmail_ui_user/features/manage_account/presentation/profiles/iden
class IdentitiesView extends GetWidget<IdentitiesController> with PopupMenuWidgetMixin, AppLoaderMixin {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
IdentitiesView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
margin: const EdgeInsets.all(24),
child: _responsiveUtils.isWebDesktop(context)
child: controller.responsiveUtils.isWebDesktop(context)
? _buildIdentitiesViewWebDesktop(context)
: _buildIdentitiesViewMobile(context),
);
@@ -35,8 +30,8 @@ class IdentitiesView extends GetWidget<IdentitiesController> with PopupMenuWidge
const SizedBox(height: 12),
IdentitiesRadioListBuilder(
controller: controller,
responsiveUtils: _responsiveUtils,
imagePaths: _imagePaths
responsiveUtils: controller.responsiveUtils,
imagePaths: controller.imagePaths
)
],
);
@@ -55,8 +50,8 @@ class IdentitiesView extends GetWidget<IdentitiesController> with PopupMenuWidge
const SizedBox(width: 12),
Expanded(child: IdentitiesRadioListBuilder(
controller: controller,
responsiveUtils: _responsiveUtils,
imagePaths: _imagePaths
responsiveUtils: controller.responsiveUtils,
imagePaths: controller.imagePaths
)),
],
);
@@ -26,7 +26,6 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class VacationController extends BaseController {
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
final _appToast = Get.find<AppToast>();
final _settingController = Get.find<SettingsController>();
final GetAllVacationInteractor _getAllVacationInteractor;
@@ -242,7 +241,7 @@ class VacationController extends BaseController {
final fromDate = vacationPresentation.value.fromDate;
if (fromDate == null) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).errorMessageWhenStartDateVacationIsEmpty);
}
@@ -253,7 +252,7 @@ class VacationController extends BaseController {
final toDate = vacationPresentation.value.toDate;
if (vacationStopEnabled && toDate != null && toDate.isBefore(fromDate)) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).errorMessageWhenEndDateVacationIsInValid);
}
@@ -263,7 +262,7 @@ class VacationController extends BaseController {
final messageHtmlText = (PlatformInfo.isWeb ? _vacationMessageHtmlText : await _getMessageHtmlText()) ?? '';
if (messageHtmlText.isEmpty && context.mounted) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).errorMessageWhenMessageVacationIsEmpty);
}
@@ -299,7 +298,7 @@ class VacationController extends BaseController {
void _handleUpdateVacationSuccess(UpdateVacationSuccess success) {
if (success.listVacationResponse.isNotEmpty) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).vacationSettingSaved);
}
@@ -22,9 +22,6 @@ import 'package:tmail_ui_user/main/utils/app_utils.dart';
class VacationView extends GetWidget<VacationController> with RichTextButtonMixin {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
VacationView({Key? key}) : super(key: key);
@override
@@ -52,18 +49,18 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
Widget _buildVacationFormView(BuildContext context) {
return SettingDetailViewBuilder(
responsiveUtils: _responsiveUtils,
responsiveUtils: controller.responsiveUtils,
padding: const EdgeInsets.symmetric(horizontal: 4),
onTapGestureDetector: () => controller.clearFocusEditor(context),
child: SingleChildScrollView(
physics: const ClampingScrollPhysics(),
controller: controller.scrollController,
child: Padding(
padding: VacationUtils.getPaddingView(context, _responsiveUtils),
padding: VacationUtils.getPaddingView(context, controller.responsiveUtils),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (_responsiveUtils.isWebDesktop(context))
if (controller.responsiveUtils.isWebDesktop(context))
...[
Text(
AppLocalizations.of(context).vacation,
@@ -94,7 +91,9 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
controller.updateVacationPresentation(newStatus: newStatus);
},
child: SvgPicture.asset(
controller.isVacationDeactivated ? _imagePaths.icSwitchOff : _imagePaths.icSwitchOn,
controller.isVacationDeactivated
? controller.imagePaths.icSwitchOff
: controller.imagePaths.icSwitchOn,
fit: BoxFit.fill,
width: 24,
height: 24
@@ -121,7 +120,7 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
absorbing: controller.isVacationDeactivated,
child: Opacity(
opacity: controller.isVacationDeactivated ? 0.3 : 1.0,
child: _responsiveUtils.isPortraitMobile(context)
child: controller.responsiveUtils.isPortraitMobile(context)
? Column(children: [
BorderButtonField<DateTime>(
label: AppLocalizations.of(context).startDate,
@@ -175,8 +174,8 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
},
child: SvgPicture.asset(
controller.vacationPresentation.value.vacationStopEnabled
? _imagePaths.icSwitchOn
: _imagePaths.icSwitchOff,
? controller.imagePaths.icSwitchOn
: controller.imagePaths.icSwitchOff,
fit: BoxFit.fill,
width: 24,
height: 24
@@ -201,7 +200,7 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
absorbing: !controller.canChangeEndDate,
child: Opacity(
opacity: !controller.canChangeEndDate ? 0.3 : 1.0,
child: _responsiveUtils.isPortraitMobile(context)
child: controller.responsiveUtils.isPortraitMobile(context)
? Column(children: [
BorderButtonField<DateTime>(
label: AppLocalizations.of(context).endDate,
@@ -245,7 +244,7 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
const SizedBox(height: 24),
Obx(() => AbsorbPointer(
absorbing: controller.isVacationDeactivated,
child: _responsiveUtils.isPortraitMobile(context)
child: controller.responsiveUtils.isPortraitMobile(context)
? Opacity(
opacity: controller.isVacationDeactivated ? 0.3 : 1.0,
child: TextInputFieldBuilder(
@@ -289,7 +288,7 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
}
Widget _buildListButtonAction(BuildContext context) {
if (_responsiveUtils.isWebDesktop(context)) {
if (controller.responsiveUtils.isWebDesktop(context)) {
return Align(
alignment: Alignment.centerRight,
child: buildTextButton(
@@ -305,7 +304,7 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
onTap: () => controller.saveVacation(context)),
);
} else {
if (_responsiveUtils.isPortraitMobile(context)) {
if (controller.responsiveUtils.isPortraitMobile(context)) {
return Row(children: [
Expanded(
child: buildTextButton(
@@ -1,6 +1,4 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
@@ -15,8 +13,6 @@ import 'package:tmail_ui_user/main/error/capability_validator.dart';
class QuotasController extends BaseController {
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
final GetQuotasInteractor _getQuotasInteractor;
@@ -1,5 +1,4 @@
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/presentation/utils/keyboard_utils.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
@@ -47,8 +46,6 @@ import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/r
class RulesFilterCreatorController extends BaseMailboxController {
final _appToast = Get.find<AppToast>();
final GetAllMailboxInteractor _getAllMailboxInteractor;
GetAllRulesInteractor? _getAllRulesInteractor;
@@ -373,7 +370,7 @@ class RulesFilterCreatorController extends BaseMailboxController {
}
final int duplicatedIndex = listEmailRuleFilterActionSelected.indexWhere((filterAction) => filterAction.action == newAction);
if (duplicatedIndex != -1) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).duplicatedActionError,
);
@@ -440,7 +437,7 @@ class RulesFilterCreatorController extends BaseMailboxController {
if (listRuleCondition.isEmpty == true || listEmailRuleFilterActionSelected.isEmpty == true) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).toastErrorMessageWhenCreateNewRule);
}
@@ -454,7 +451,7 @@ class RulesFilterCreatorController extends BaseMailboxController {
log('RulesFilterCreatorController::createNewRuleFilter:errorAction: $errorAction');
if (errorAction?.isNotEmpty == true) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).notSelectedMailboxToMoveMessage);
}
@@ -23,9 +23,6 @@ import 'model/rule_filter_condition_type.dart';
class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
@override
final controller = Get.find<RulesFilterCreatorController>();
@@ -35,7 +32,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
Widget build(BuildContext context) {
return PointerInterceptor(
child: ResponsiveWidget(
responsiveUtils: _responsiveUtils,
responsiveUtils: controller.responsiveUtils,
mobile: Scaffold(
backgroundColor: PlatformInfo.isWeb
? Colors.black.withAlpha(24)
@@ -75,7 +72,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
topRight: Radius.circular(16),
)),
width: double.infinity,
height: _responsiveUtils.getSizeScreenHeight(context) * 0.7,
height: controller.responsiveUtils.getSizeScreenHeight(context) * 0.7,
child: ClipRRect(
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(16),
@@ -97,8 +94,8 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(16))),
width: _responsiveUtils.getSizeScreenWidth(context) * 0.6,
height: _responsiveUtils.getSizeScreenHeight(context) * 0.7,
width: controller.responsiveUtils.getSizeScreenWidth(context) * 0.6,
height: controller.responsiveUtils.getSizeScreenHeight(context) * 0.7,
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(16)),
child: _buildRulesFilterFormOnDesktop(context)
@@ -153,7 +150,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SvgPicture.asset(
_imagePaths.icAddNewFolder,
controller.imagePaths.icAddNewFolder,
fit: BoxFit.fill,
),
const SizedBox(width: 15,),
@@ -182,7 +179,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
const SizedBox(height: 24),
Obx(() {
return RuleFilterActionListWidget(
responsiveUtils: _responsiveUtils,
responsiveUtils: controller.responsiveUtils,
actionList: controller.listEmailRuleFilterActionSelected,
onActionChanged: (newAction, index) {
controller.selectEmailRuleFilterAction(newAction, index);
@@ -195,7 +192,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
controller.selectMailbox(context, index);
},
tapRemoveCallback: (index) => controller.tapRemoveAction(index),
imagePaths: _imagePaths,
imagePaths: controller.imagePaths,
errorForwardEmail: controller.errorForwardEmailValue.value,
errorMailboxSelected: controller.errorMailboxSelectedValue.value,
);
@@ -210,7 +207,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SvgPicture.asset(
_imagePaths.icAddNewFolder,
controller.imagePaths.icAddNewFolder,
fit: BoxFit.fill,
),
const SizedBox(width: 15,),
@@ -264,7 +261,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
Positioned(top: 8, right: 8,
child: buildIconWeb(
icon: SvgPicture.asset(
_imagePaths.icCircleClose,
controller.imagePaths.icCircleClose,
fit: BoxFit.fill),
tooltip: AppLocalizations.of(context).close,
onTap: () => controller.closeView(context)))
@@ -314,7 +311,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SvgPicture.asset(
_imagePaths.icAddNewFolder,
controller.imagePaths.icAddNewFolder,
fit: BoxFit.fill,
),
const SizedBox(width: 15,),
@@ -343,7 +340,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
const SizedBox(height: 24),
Obx(() {
return RuleFilterActionListWidget(
responsiveUtils: _responsiveUtils,
responsiveUtils: controller.responsiveUtils,
actionList: controller.listEmailRuleFilterActionSelected,
onActionChanged: (newAction, index) {
controller.selectEmailRuleFilterAction(newAction, index);
@@ -356,7 +353,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
controller.selectMailbox(context, index);
},
tapRemoveCallback: (index) => controller.tapRemoveAction(index),
imagePaths: _imagePaths,
imagePaths: controller.imagePaths,
errorForwardEmail: controller.errorForwardEmailValue.value,
errorMailboxSelected: controller.errorMailboxSelectedValue.value,
);
@@ -371,7 +368,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SvgPicture.asset(
_imagePaths.icAddNewFolder,
controller.imagePaths.icAddNewFolder,
fit: BoxFit.fill,
),
const SizedBox(width: 15,),
@@ -424,7 +421,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
Positioned(top: 8, right: 8,
child: buildIconWeb(
icon: SvgPicture.asset(
_imagePaths.icCircleClose,
controller.imagePaths.icCircleClose,
fit: BoxFit.fill),
tooltip: AppLocalizations.of(context).close,
onTap: () => controller.closeView(context)))
@@ -489,7 +486,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
mainAxisAlignment: MainAxisAlignment.center,
children: [
SvgPicture.asset(
_imagePaths.icAddNewFolder,
controller.imagePaths.icAddNewFolder,
fit: BoxFit.fill,
),
const SizedBox(width: 15,),
@@ -523,7 +520,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
const SizedBox(height: 24),
Obx(() {
return RuleFilterActionListWidget(
responsiveUtils: _responsiveUtils,
responsiveUtils: controller.responsiveUtils,
actionList: controller.listEmailRuleFilterActionSelected,
onActionChangeMobile: (currentAction, index) {
KeyboardUtils.hideKeyboard(context);
@@ -544,7 +541,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
controller.selectMailbox(context, index);
},
tapRemoveCallback: (index) => controller.tapRemoveAction(index),
imagePaths: _imagePaths,
imagePaths: controller.imagePaths,
errorForwardEmail: controller.errorForwardEmailValue.value,
errorMailboxSelected: controller.errorMailboxSelectedValue.value,
);
@@ -560,7 +557,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
mainAxisAlignment: MainAxisAlignment.center,
children: [
SvgPicture.asset(
_imagePaths.icAddNewFolder,
controller.imagePaths.icAddNewFolder,
fit: BoxFit.fill,
),
const SizedBox(width: 15,),
@@ -613,7 +610,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
Positioned(top: 8, right: 8,
child: buildIconWeb(
icon: SvgPicture.asset(
_imagePaths.icCircleClose,
controller.imagePaths.icCircleClose,
fit: BoxFit.fill),
tooltip: AppLocalizations.of(context).close,
onTap: () => controller.closeView(context)))
@@ -634,7 +631,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
key: ValueKey(controller.listRuleConditionValueArguments[index].focusNode),
ruleFilterConditionScreenType: ruleFilterConditionScreenType,
ruleCondition: controller.listRuleCondition[index],
imagePaths: _imagePaths,
imagePaths: controller.imagePaths,
conditionValueErrorText: controller.listRuleConditionValueArguments[index].errorText,
conditionValueFocusNode: controller.listRuleConditionValueArguments[index].focusNode,
conditionValueEditingController: controller.listRuleConditionValueArguments[index].controller,
@@ -702,7 +699,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
iconLeftPadding: const EdgeInsets.only(left: 12, right: 16),
iconRightPadding: const EdgeInsets.only(right: 12),
actionSelected: SvgPicture.asset(
_imagePaths.icFilterSelected,
controller.imagePaths.icFilterSelected,
width: 20,
height: 20,
fit: BoxFit.fill))
@@ -737,7 +734,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
iconLeftPadding: const EdgeInsets.only(left: 12, right: 16),
iconRightPadding: const EdgeInsets.only(right: 12),
actionSelected: SvgPicture.asset(
_imagePaths.icFilterSelected,
controller.imagePaths.icFilterSelected,
width: 20,
height: 20,
fit: BoxFit.fill))
@@ -770,7 +767,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
iconLeftPadding: const EdgeInsets.only(left: 12, right: 16),
iconRightPadding: const EdgeInsets.only(right: 12),
actionSelected: SvgPicture.asset(
_imagePaths.icFilterSelected,
controller.imagePaths.icFilterSelected,
width: 20,
height: 20,
fit: BoxFit.fill))
@@ -808,7 +805,7 @@ class RuleFilterCreatorView extends GetWidget<RulesFilterCreatorController> {
iconLeftPadding: const EdgeInsets.only(left: 12, right: 16),
iconRightPadding: const EdgeInsets.only(right: 12),
actionSelected: SvgPicture.asset(
_imagePaths.icFilterSelected,
controller.imagePaths.icFilterSelected,
width: 20,
height: 20,
fit: BoxFit.fill))
@@ -1,7 +1,5 @@
import 'package:core/presentation/extensions/color_extension.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/views/button/icon_button_web.dart';
import 'package:core/presentation/views/text/text_field_builder.dart';
@@ -35,14 +33,11 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class SearchEmailView extends GetWidget<SearchEmailController>
with AppLoaderMixin {
final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
SearchEmailView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
if (_responsiveUtils.isWebDesktop(context)) {
if (controller.responsiveUtils.isWebDesktop(context)) {
WidgetsBinding.instance.addPostFrameCallback((_) {
controller.closeSearchView(context);
});
@@ -57,7 +52,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
Container(
height: 52,
color: Colors.white,
padding: SearchEmailUtils.getPaddingAppBar(context, _responsiveUtils),
padding: SearchEmailUtils.getPaddingAppBar(context, controller.responsiveUtils),
child: Obx(() {
if (controller.selectionMode.value == SelectMode.ACTIVE) {
return AppBarSelectionMode(
@@ -110,7 +105,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
children: [
buildIconWeb(
icon: SvgPicture.asset(
DirectionUtils.isDirectionRTLByLanguage(context) ? _imagePaths.icCollapseFolder : _imagePaths.icBack,
DirectionUtils.isDirectionRTLByLanguage(context) ? controller.imagePaths.icCollapseFolder : controller.imagePaths.icBack,
colorFilter: AppColor.colorTextButton.asFilter(),
fit: BoxFit.fill
),
@@ -138,7 +133,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
return
buildIconWeb(
icon: SvgPicture.asset(
_imagePaths.icClearTextSearch,
controller.imagePaths.icClearTextSearch,
width: 18,
height: 18,
fit: BoxFit.fill),
@@ -154,8 +149,8 @@ class SearchEmailView extends GetWidget<SearchEmailController>
Widget _buildListSearchFilterAction(BuildContext context) {
return Container(
margin: SearchEmailUtils.getMarginSearchFilterButton(context, _responsiveUtils),
padding: SearchEmailUtils.getPaddingSearchFilterButton(context, _responsiveUtils),
margin: SearchEmailUtils.getMarginSearchFilterButton(context, controller.responsiveUtils),
padding: SearchEmailUtils.getPaddingSearchFilterButton(context, controller.responsiveUtils),
height: 60,
child: ListView(
scrollDirection: Axis.horizontal,
@@ -181,7 +176,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
onTap: () {
if (filter != QuickSearchFilter.last7Days) {
controller.selectQuickSearchFilter(context, filter);
} else if (_responsiveUtils.isMobile(context)) {
} else if (controller.responsiveUtils.isMobile(context)) {
controller.openContextMenuAction(
context,
_emailReceiveTimeCupertinoActionTile(
@@ -192,7 +187,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
},
onTapDown: (detail) {
if (filter == QuickSearchFilter.last7Days &&
!_responsiveUtils.isMobile(context)) {
!controller.responsiveUtils.isMobile(context)) {
final screenSize = MediaQuery.of(context).size;
final offset = detail.globalPosition;
final position = RelativeRect.fromLTRB(
@@ -218,7 +213,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
SvgPicture.asset(
filter.getIcon(_imagePaths, isFilterSelected: filterSelected),
filter.getIcon(controller.imagePaths, isFilterSelected: filterSelected),
width: 16,
height: 16,
fit: BoxFit.fill),
@@ -239,7 +234,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
... [
const SizedBox(width: 4),
SvgPicture.asset(
_imagePaths.icChevronDownOutline,
controller.imagePaths.icChevronDownOutline,
colorFilter: filterSelected
? AppColor.primaryColor.asFilter()
: AppColor.colorDefaultRichTextButton.asFilter(),
@@ -278,14 +273,14 @@ class SearchEmailView extends GetWidget<SearchEmailController>
timeType.getTitle(context),
timeType,
timeTypeCurrent: receiveTimeSelected,
iconLeftPadding: _responsiveUtils.isMobile(context)
iconLeftPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsets.only(left: 12, right: 16)
: const EdgeInsets.only(right: 12),
iconRightPadding: _responsiveUtils.isMobile(context)
iconRightPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsets.only(right: 12)
: EdgeInsets.zero,
actionSelected: SvgPicture.asset(
_imagePaths.icFilterSelected,
controller.imagePaths.icFilterSelected,
width: 20,
height: 20,
fit: BoxFit.fill))
@@ -306,7 +301,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
}
},
child: Padding(
padding: SearchEmailUtils.getPaddingShowAllResultButton(context, _responsiveUtils),
padding: SearchEmailUtils.getPaddingShowAllResultButton(context, controller.responsiveUtils),
child: Row(children: [
Text(AppLocalizations.of(context).showingResultsFor,
style: const TextStyle(fontSize: 13.0,
@@ -331,7 +326,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
) {
return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Padding(
padding: SearchEmailUtils.getPaddingSearchRecentTitle(context, _responsiveUtils),
padding: SearchEmailUtils.getPaddingSearchRecentTitle(context, controller.responsiveUtils),
child: Text(AppLocalizations.of(context).recent,
style: const TextStyle(fontSize: 13.0,
color: AppColor.colorTextButtonHeaderThread,
@@ -349,7 +344,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
child: InkWell(
child: RecentSearchItemTileWidget(
recentSearch,
contentPadding: SearchEmailUtils.getPaddingListRecentSearch(context, _responsiveUtils)),
contentPadding: SearchEmailUtils.getPaddingListRecentSearch(context, controller.responsiveUtils)),
onTap: () => controller.searchEmailByRecentAction(context, recentSearch),
),
);
@@ -372,7 +367,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
child: EmailQuickSearchItemTileWidget(
listSuggestionSearch[index],
controller.currentMailbox,
contentPadding: SearchEmailUtils.getPaddingSearchSuggestionList(context, _responsiveUtils)),
contentPadding: SearchEmailUtils.getPaddingSearchSuggestionList(context, controller.responsiveUtils)),
onTap: () {
final emailPreview = listSuggestionSearch[index];
final mailboxContain = emailPreview
@@ -395,7 +390,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
? EmptyEmailsWidget(
key: const Key('empty_search_email_view'),
title: AppLocalizations.of(context).no_emails_matching_your_search,
iconSVG: _imagePaths.icEmptyEmail
iconSVG: controller.imagePaths.icEmptyEmail
)
: const SizedBox.shrink())
);
@@ -426,12 +421,12 @@ class SearchEmailView extends GetWidget<SearchEmailController>
controller.searchQuery,
controller.mailboxDashBoardController.selectedEmail.value?.id == currentPresentationEmail.id,
isSearchEmailRunning: true,
padding: SearchEmailUtils.getPaddingSearchResultList(context, _responsiveUtils),
paddingDivider: SearchEmailUtils.getPaddingDividerSearchResultList(context, _responsiveUtils),
padding: SearchEmailUtils.getPaddingSearchResultList(context, controller.responsiveUtils),
paddingDivider: SearchEmailUtils.getPaddingDividerSearchResultList(context, controller.responsiveUtils),
mailboxContain: currentPresentationEmail.mailboxContain)
..addOnPressEmailActionClick((action, email) =>
controller.pressEmailAction(context, action, email, mailboxContain: currentPresentationEmail.mailboxContain))
..addOnMoreActionClick((email, position) => _responsiveUtils.isScreenWithShortestSide(context)
..addOnMoreActionClick((email, position) => controller.responsiveUtils.isScreenWithShortestSide(context)
? controller.openContextMenuAction(context, _contextMenuActionTile(context, email))
: controller.openPopupMenuAction(context, position, _popupMenuActionTile(context, email)))
).build());
@@ -441,7 +436,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
double? _getItemExtent(BuildContext context) {
if (PlatformInfo.isWeb) {
return _responsiveUtils.isDesktop(context) ? 52 : 95;
return controller.responsiveUtils.isDesktop(context) ? 52 : 95;
} else {
return null;
}
@@ -469,7 +464,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
return (EmailActionCupertinoActionSheetActionBuilder(
const Key('mark_as_spam_or_un_spam_action'),
SvgPicture.asset(
mailboxContain?.isSpam == true ? _imagePaths.icNotSpam : _imagePaths.icSpam,
mailboxContain?.isSpam == true ? controller.imagePaths.icNotSpam : controller.imagePaths.icSpam,
width: 28,
height: 28,
fit: BoxFit.fill,
@@ -478,10 +473,10 @@ class SearchEmailView extends GetWidget<SearchEmailController>
? AppLocalizations.of(context).remove_from_spam
: AppLocalizations.of(context).mark_as_spam,
email,
iconLeftPadding: _responsiveUtils.isMobile(context)
iconLeftPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsets.only(left: 12, right: 16)
: const EdgeInsets.only(right: 12),
iconRightPadding: _responsiveUtils.isMobile(context)
iconRightPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsets.only(right: 12)
: EdgeInsets.zero)
..onActionClick((email) => controller.pressEmailAction(context,
@@ -531,7 +526,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
SvgPicture.asset(
filterSelected ? _imagePaths.icSelectedSB : _imagePaths.icFolderMailbox,
filterSelected ? controller.imagePaths.icSelectedSB : controller.imagePaths.icFolderMailbox,
width: 16,
height: 16,
fit: BoxFit.fill),
@@ -555,7 +550,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
),
const SizedBox(width: 4),
SvgPicture.asset(
_imagePaths.icChevronDownOutline,
controller.imagePaths.icChevronDownOutline,
colorFilter: filterSelected
? AppColor.primaryColor.asFilter()
: AppColor.colorDefaultRichTextButton.asFilter(),
@@ -585,7 +580,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
SvgPicture.asset(
filterSelected ? _imagePaths.icSelectedSB : _imagePaths.icUserSB,
filterSelected ? controller.imagePaths.icSelectedSB : controller.imagePaths.icUserSB,
width: 16,
height: 16,
fit: BoxFit.fill),
@@ -609,7 +604,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
),
const SizedBox(width: 4),
SvgPicture.asset(
_imagePaths.icChevronDownOutline,
controller.imagePaths.icChevronDownOutline,
colorFilter: filterSelected
? AppColor.primaryColor.asFilter()
: AppColor.colorDefaultRichTextButton.asFilter(),
@@ -1,11 +1,8 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/presentation/utils/keyboard_utils.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:debounce_throttle/debounce_throttle.dart';
@@ -69,7 +66,6 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:uuid/uuid.dart';
class SearchMailboxController extends BaseMailboxController with MailboxActionHandlerMixin {
@@ -82,10 +78,6 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
final CreateNewMailboxInteractor _createNewMailboxInteractor;
final dashboardController = Get.find<MailboxDashBoardController>();
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
final _appToast = Get.find<AppToast>();
final _uuid = Get.find<Uuid>();
final currentSearchQuery = RxString('');
final listMailboxSearched = RxList<PresentationMailbox>();
@@ -387,7 +379,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
void _moveMailboxSuccess(MoveMailboxSuccess success) {
if (success.moveAction == MoveAction.moving && currentOverlayContext != null && currentContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).movedToFolder(success.destinationMailboxDisplayName ?? AppLocalizations.of(currentContext!).allFolders),
actionName: AppLocalizations.of(currentContext!).undo,
@@ -449,7 +441,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
void _deleteMultipleMailboxSuccess(List<MailboxId> listMailboxIdDeleted, jmap.State? currentMailboxState) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).deleteFoldersSuccessfully);
}
@@ -464,7 +456,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
void _deleteMailboxFailure(DeleteMultipleMailboxFailure failure) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).deleteFoldersFailure);
}
@@ -563,7 +555,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
{List<MailboxId>? listDescendantMailboxIds}
) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastMessage(
appToast.showToastMessage(
currentOverlayContext!,
subscribeAction.getToastMessageSuccess(currentContext!),
actionName: AppLocalizations.of(currentContext!).undo,
@@ -683,7 +675,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
: await push(AppRoutes.mailboxCreator, arguments: arguments);
if (result != null && result is NewMailboxArguments) {
final generateCreateId = Id(_uuid.v1());
final generateCreateId = Id(uuid.v1());
_createNewMailboxAction(session, accountId, CreateNewMailboxRequest(
generateCreateId,
result.newName,
@@ -698,7 +690,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
void _createNewMailboxSuccess(CreateNewMailboxSuccess success) {
if (currentOverlayContext != null && currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).createFolderSuccessfullyMessage(success.newMailbox.name?.name ?? ''),
leadingSVGIconColor: Colors.white,
@@ -715,7 +707,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
if (exception is ErrorMethodResponse) {
messageError = exception.description ?? AppLocalizations.of(currentContext!).createNewFolderFailure;
}
_appToast.showToastErrorMessage(currentOverlayContext!, messageError);
appToast.showToastErrorMessage(currentOverlayContext!, messageError);
}
}
@@ -1,9 +1,7 @@
import 'package:core/utils/app_logger.dart';
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
@@ -53,8 +51,6 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
final dashboardController = Get.find<MailboxDashBoardController>();
final _networkConnectionController = Get.find<NetworkConnectionController>();
final _sendingQueueIsolateManager = getBinding<SendingQueueIsolateManager>();
final _imagePaths = Get.find<ImagePaths>();
final _appToast = Get.find<AppToast>();
final listSendingEmailController = ScrollController();
@@ -210,7 +206,7 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
AppLocalizations.of(context).messageDialogDeleteSendingEmail,
AppLocalizations.of(currentContext!).delete,
title: AppLocalizations.of(currentContext!).deleteOfflineEmail,
icon: SvgPicture.asset(_imagePaths.icDeleteDialogRecipients),
icon: SvgPicture.asset(imagePaths.icDeleteDialogRecipients),
alignCenter: true,
messageStyle: const TextStyle(
color: AppColor.colorTitleSendingItem,
@@ -259,7 +255,7 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
}
if (currentContext != null && currentOverlayContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).messageHaveBeenDeletedSuccessfully);
}
@@ -329,7 +325,7 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
}
if (currentContext != null && currentOverlayContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).messagesHaveBeenResent);
}
@@ -1,7 +1,5 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:dartz/dartz.dart';
@@ -85,8 +83,6 @@ typedef EndRangeSelection = int;
class ThreadController extends BaseController with EmailActionController {
final _imagePaths = Get.find<ImagePaths>();
final _appToast = Get.find<AppToast>();
final networkConnectionController = Get.find<NetworkConnectionController>();
final GetEmailsInMailboxInteractor _getEmailsInMailboxInteractor;
@@ -377,6 +373,14 @@ class ThreadController extends BaseController with EmailActionController {
await cachingManager.clearEmailCacheAndAllStateCache();
}
_getAllEmailAction();
} else if (error is MethodLevelErrors) {
if (currentOverlayContext != null && error.message?.isNotEmpty == true) {
appToast.showToastErrorMessage(
currentOverlayContext!,
error.message!
);
}
clearState();
}
}
@@ -683,10 +687,10 @@ class ThreadController extends BaseController with EmailActionController {
mailboxDashBoardController.filterMessageOption.value = newFilterOption;
_appToast.showToastMessage(
appToast.showToastMessage(
context,
newFilterOption.getMessageToast(context),
leadingSVGIcon: newFilterOption.getIconToast(_imagePaths),
leadingSVGIcon: newFilterOption.getIconToast(imagePaths),
);
if (searchController.isSearchEmailRunning) {
@@ -1060,7 +1064,7 @@ class ThreadController extends BaseController with EmailActionController {
if (success.newListRules.isNotEmpty == true &&
currentOverlayContext != null &&
currentContext != null) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).newFilterWasCreated
);
@@ -44,9 +44,6 @@ class ThreadView extends GetWidget<ThreadController>
FilterEmailPopupMenuMixin,
PopupMenuWidgetMixin {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final _imagePaths = Get.find<ImagePaths>();
ThreadView({Key? key}) : super(key: key);
@override
@@ -63,12 +60,12 @@ class ThreadView extends GetWidget<ThreadController>
if (supportVerticalDivider(context))
const VerticalDivider(color: AppColor.colorDividerVertical, width: 1),
Expanded(child: SafeArea(
right: _responsiveUtils.isLandscapeMobile(context),
left: _responsiveUtils.isLandscapeMobile(context),
right: controller.responsiveUtils.isLandscapeMobile(context),
left: controller.responsiveUtils.isLandscapeMobile(context),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (!_responsiveUtils.isWebDesktop(context))
if (!controller.responsiveUtils.isWebDesktop(context))
... [
Obx(() {
return AppBarThreadWidget(
@@ -86,13 +83,13 @@ class ThreadView extends GetWidget<ThreadController>
selectionEmail
);
},
onContextMenuFilterEmailAction: _responsiveUtils.isScreenWithShortestSide(context)
onContextMenuFilterEmailAction: controller.responsiveUtils.isScreenWithShortestSide(context)
? (filterOption) => controller.openContextMenuAction(
context,
_filterMessagesCupertinoActionTile(context, filterOption)
)
: null,
onPopupMenuFilterEmailAction: !_responsiveUtils.isScreenWithShortestSide(context)
onPopupMenuFilterEmailAction: !controller.responsiveUtils.isScreenWithShortestSide(context)
? (filterOption, position) => controller.openPopupMenuAction(
context,
position,
@@ -148,7 +145,7 @@ class ThreadView extends GetWidget<ThreadController>
return const SizedBox.shrink();
}
}),
if (!_responsiveUtils.isDesktop(context))
if (!controller.responsiveUtils.isDesktop(context))
_buildMarkAsMailboxReadLoading(context),
Obx(() => ThreadViewLoadingBarWidget(viewState: controller.viewState.value)),
Expanded(child: _buildListEmail(context)),
@@ -167,9 +164,9 @@ class ThreadView extends GetWidget<ThreadController>
child: ScrollToTopButtonWidget(
scrollController: controller.listEmailController,
onTap: controller.scrollToTop,
responsiveUtils: _responsiveUtils,
responsiveUtils: controller.responsiveUtils,
icon: SvgPicture.asset(
_imagePaths.icArrowUpOutline,
controller.imagePaths.icArrowUpOutline,
width: ScrollToTopButtonWidgetStyles.iconWidth,
height: ScrollToTopButtonWidgetStyles.iconHeight,
fit: BoxFit.fill,
@@ -188,11 +185,11 @@ class ThreadView extends GetWidget<ThreadController>
bool supportVerticalDivider(BuildContext context) {
if (PlatformInfo.isWeb) {
return _responsiveUtils.isTabletLarge(context);
return controller.responsiveUtils.isTabletLarge(context);
} else {
return _responsiveUtils.isDesktop(context) ||
_responsiveUtils.isTabletLarge(context) ||
_responsiveUtils.isLandscapeTablet(context);
return controller.responsiveUtils.isDesktop(context) ||
controller.responsiveUtils.isTabletLarge(context) ||
controller.responsiveUtils.isLandscapeTablet(context);
}
}
@@ -201,9 +198,9 @@ class ThreadView extends GetWidget<ThreadController>
color: Colors.white,
padding: EdgeInsets.symmetric(
horizontal: 16,
vertical: _responsiveUtils.isWebNotDesktop(context) ? 8 : 0),
vertical: controller.responsiveUtils.isWebNotDesktop(context) ? 8 : 0),
margin: EdgeInsets.only(bottom: PlatformInfo.isMobile ? 8 : 0),
child: SearchBarView(_imagePaths,
child: SearchBarView(controller.imagePaths,
hintTextSearch: AppLocalizations.of(context).search_emails,
onOpenSearchViewAction: controller.goToSearchView));
}
@@ -226,11 +223,11 @@ class ThreadView extends GetWidget<ThreadController>
Widget _buildListButtonSelectionForMobile(BuildContext context) {
return Obx(() {
if ((PlatformInfo.isMobile || (PlatformInfo.isWeb && controller.isSelectionEnabled()
&& controller.isSearchActive() && !_responsiveUtils.isDesktop(context)))
&& controller.isSearchActive() && !controller.responsiveUtils.isDesktop(context)))
&& controller.mailboxDashBoardController.emailsInCurrentMailbox.listEmailSelected.isNotEmpty) {
return BottomBarThreadSelectionWidget(
_imagePaths,
_responsiveUtils,
controller.imagePaths,
controller.responsiveUtils,
controller.mailboxDashBoardController.emailsInCurrentMailbox.listEmailSelected,
controller.mailboxDashBoardController.selectedMailbox.value,
onPressEmailSelectionActionClick: (actionType, selectionEmail) =>
@@ -247,7 +244,7 @@ class ThreadView extends GetWidget<ThreadController>
}
Widget _buildFloatingButtonCompose(BuildContext context) {
if (_responsiveUtils.isWebDesktop(context)) {
if (controller.responsiveUtils.isWebDesktop(context)) {
return const SizedBox.shrink();
}
@@ -255,7 +252,7 @@ class ThreadView extends GetWidget<ThreadController>
if (controller.isAllSearchInActive) {
return Container(
padding: PlatformInfo.isMobile && controller.listEmailSelected.isNotEmpty
? EdgeInsets.only(bottom: _responsiveUtils.isTabletLarge(context) ? 85 : 70)
? EdgeInsets.only(bottom: controller.responsiveUtils.isTabletLarge(context) ? 85 : 70)
: EdgeInsets.zero,
child: ComposeFloatingButton(
scrollController: controller.listEmailController,
@@ -278,7 +275,7 @@ class ThreadView extends GetWidget<ThreadController>
return listFilter.map((filter) => (FilterMessageCupertinoActionSheetActionBuilder(
Key('filter_email_${filter.name}'),
SvgPicture.asset(
filter.getIcon(_imagePaths),
filter.getIcon(controller.imagePaths),
width: 20,
height: 20,
fit: BoxFit.fill,
@@ -288,14 +285,14 @@ class ThreadView extends GetWidget<ThreadController>
filter.getName(context),
filter,
optionCurrent: optionCurrent,
iconLeftPadding: _responsiveUtils.isMobile(context)
iconLeftPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsets.only(left: 12, right: 16)
: const EdgeInsets.only(right: 12),
iconRightPadding: _responsiveUtils.isMobile(context)
iconRightPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsets.only(right: 12)
: EdgeInsets.zero,
actionSelected: SvgPicture.asset(
_imagePaths.icFilterSelected,
controller.imagePaths.icFilterSelected,
width: 20,
height: 20,
fit: BoxFit.fill))
@@ -305,7 +302,7 @@ class ThreadView extends GetWidget<ThreadController>
Widget _buildListEmail(BuildContext context) {
return Container(
margin: PlatformInfo.isWeb && _responsiveUtils.isDesktop(context)
margin: PlatformInfo.isWeb && controller.responsiveUtils.isDesktop(context)
? const EdgeInsets.symmetric(horizontal: 4)
: EdgeInsets.zero,
alignment: Alignment.center,
@@ -371,7 +368,7 @@ class ThreadView extends GetWidget<ThreadController>
}
Widget _buildEmailItem(BuildContext context, PresentationEmail presentationEmail) {
if (_responsiveUtils.isWebDesktop(context)) {
if (controller.responsiveUtils.isWebDesktop(context)) {
return _buildEmailItemDraggable(context, presentationEmail);
} else {
return _buildEmailItemNotDraggable(context, presentationEmail);
@@ -421,7 +418,7 @@ class ThreadView extends GetWidget<ThreadController>
return Dismissible(
key: ValueKey<EmailId?>(presentationEmail.id),
direction: controller.getSwipeDirection(_responsiveUtils.isWebDesktop(context), selectModeAll),
direction: controller.getSwipeDirection(controller.responsiveUtils.isWebDesktop(context), selectModeAll),
background: Container(
color: AppColor.colorItemRecipientSelected,
child: Padding(
@@ -435,11 +432,11 @@ class ThreadView extends GetWidget<ThreadController>
radius: 24,
child: !presentationEmail.hasRead
? SvgPicture.asset(
_imagePaths.icMarkAsRead,
controller.imagePaths.icMarkAsRead,
fit: BoxFit.fill,
)
: SvgPicture.asset(
_imagePaths.icUnreadEmail,
controller.imagePaths.icUnreadEmail,
fit: BoxFit.fill,
colorFilter: AppColor.primaryColor.asFilter(),
),
@@ -493,7 +490,7 @@ class ThreadView extends GetWidget<ThreadController>
PresentationEmail presentationEmail,
RelativeRect? position
) {
if (_responsiveUtils.isScreenWithShortestSide(context)) {
if (controller.responsiveUtils.isScreenWithShortestSide(context)) {
controller.openContextMenuAction(
context,
_contextMenuActionTile(context, presentationEmail)
@@ -519,7 +516,7 @@ class ThreadView extends GetWidget<ThreadController>
child: Row(
children: [
SvgPicture.asset(
_imagePaths.icFilterMessageAll,
controller.imagePaths.icFilterMessageAll,
width: 24,
height: 24,
fit: BoxFit.fill,
@@ -546,7 +543,7 @@ class ThreadView extends GetWidget<ThreadController>
double? _getItemExtent(BuildContext context) {
if (PlatformInfo.isWeb) {
return _responsiveUtils.isDesktop(context) ? 52 : 98;
return controller.responsiveUtils.isDesktop(context) ? 52 : 98;
} else {
return null;
}
@@ -559,7 +556,7 @@ class ThreadView extends GetWidget<ThreadController>
? EmptyEmailsWidget(
key: const Key('empty_thread_view'),
title: _getMessageEmptyEmail(context),
iconSVG: _imagePaths.icEmptyEmail,
iconSVG: controller.imagePaths.icEmptyEmail,
subTitle: _getSubMessageEmptyEmail(context),
onCreateFiltersActionCallback: controller.isNewFolderCreated
? controller.goToCreateEmailRuleView
@@ -612,7 +609,7 @@ class ThreadView extends GetWidget<ThreadController>
return (EmailActionCupertinoActionSheetActionBuilder(
const Key('mark_as_spam_or_un_spam_action'),
SvgPicture.asset(
mailboxContain?.isSpam == true ? _imagePaths.icNotSpam : _imagePaths.icSpam,
mailboxContain?.isSpam == true ? controller.imagePaths.icNotSpam : controller.imagePaths.icSpam,
width: 24,
height: 24,
fit: BoxFit.fill,
@@ -621,10 +618,10 @@ class ThreadView extends GetWidget<ThreadController>
? AppLocalizations.of(context).remove_from_spam
: AppLocalizations.of(context).mark_as_spam,
email,
iconLeftPadding: _responsiveUtils.isMobile(context)
iconLeftPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsets.only(left: 12, right: 16)
: const EdgeInsets.only(right: 12),
iconRightPadding: _responsiveUtils.isMobile(context)
iconRightPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsets.only(right: 12)
: EdgeInsets.zero)
..onActionClick((email) => controller.pressEmailAction(context,
@@ -639,17 +636,17 @@ class ThreadView extends GetWidget<ThreadController>
return (EmailActionCupertinoActionSheetActionBuilder(
const Key('open_in_new_tab_action'),
SvgPicture.asset(
_imagePaths.icOpenInNewTab,
controller.imagePaths.icOpenInNewTab,
width: 24,
height: 24,
fit: BoxFit.fill,
colorFilter: AppColor.colorTextButton.asFilter()),
AppLocalizations.of(context).openInNewTab,
email,
iconLeftPadding: _responsiveUtils.isMobile(context)
iconLeftPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsets.only(left: 12, right: 16)
: const EdgeInsets.only(right: 12),
iconRightPadding: _responsiveUtils.isMobile(context)
iconRightPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsets.only(right: 12)
: EdgeInsets.zero)
..onActionClick((email) {
@@ -677,7 +674,7 @@ class ThreadView extends GetWidget<ThreadController>
return PopupMenuItem(
padding: EdgeInsets.zero,
child: popupItem(
mailboxContain?.isSpam == true ? _imagePaths.icNotSpam : _imagePaths.icSpam,
mailboxContain?.isSpam == true ? controller.imagePaths.icNotSpam : controller.imagePaths.icSpam,
mailboxContain?.isSpam == true
? AppLocalizations.of(context).remove_from_spam
: AppLocalizations.of(context).mark_as_spam,
@@ -705,7 +702,7 @@ class ThreadView extends GetWidget<ThreadController>
return PopupMenuItem(
padding: EdgeInsets.zero,
child: popupItem(
_imagePaths.icOpenInNewTab,
controller.imagePaths.icOpenInNewTab,
AppLocalizations.of(context).openInNewTab,
colorIcon: AppColor.colorTextButton,
styleName: const TextStyle(
@@ -730,19 +727,19 @@ class ThreadView extends GetWidget<ThreadController>
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();
@@ -1,10 +1,8 @@
import 'package:async/async.dart';
import 'package:collection/collection.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart';
import 'package:dio/dio.dart';
@@ -27,13 +25,9 @@ import 'package:tmail_ui_user/features/upload/presentation/model/upload_file_sta
import 'package:tmail_ui_user/features/upload/presentation/model/upload_file_status.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:uuid/uuid.dart';
class UploadController extends BaseController {
final _imagePaths = Get.find<ImagePaths>();
final _appToast = Get.find<AppToast>();
final _uuid = Get.find<Uuid>();
final _mailboxDashBoardController = Get.find<MailboxDashBoardController>();
final UploadAttachmentInteractor _uploadAttachmentInteractor;
@@ -130,11 +124,11 @@ class UploadController extends BaseController {
_deleteInlineFileUploaded(failure.uploadId);
if (currentContext != null && currentOverlayContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).thisImageCannotBeAdded,
leadingSVGIconColor: Colors.white,
leadingSVGIcon: _imagePaths.icInsertImage);
leadingSVGIcon: imagePaths.icInsertImage);
}
}
},
@@ -158,7 +152,7 @@ class UploadController extends BaseController {
log('UploadController::_handleProgressUploadInlineImageStateStream():succeed[${success.uploadId}]');
final inlineAttachment = success.attachment.toAttachmentWithDisposition(
disposition: ContentDisposition.inline,
cid: _uuid.v1()
cid: uuid.v1()
);
final uploadFileState = _uploadingStateInlineFiles.getUploadFileStateById(success.uploadId);
@@ -256,21 +250,21 @@ class UploadController extends BaseController {
void _handleUploadAttachmentsFailure(ErrorAttachmentUploadState failure) {
if (currentContext != null && currentOverlayContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
'${AppLocalizations.of(currentContext!).can_not_upload_this_file_as_attachments}. ${failure.exception ?? ''}',
leadingSVGIconColor: Colors.white,
leadingSVGIcon: _imagePaths.icAttachment);
leadingSVGIcon: imagePaths.icAttachment);
}
}
void _handleUploadAttachmentsSuccess(SuccessAttachmentUploadState success) {
if (currentContext != null && currentOverlayContext != null && _uploadingStateFiles.allSuccess) {
_appToast.showToastSuccessMessage(
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).attachments_uploaded_successfully,
leadingSVGIconColor: Colors.white,
leadingSVGIcon: _imagePaths.icAttachment);
leadingSVGIcon: imagePaths.icAttachment);
}
}
@@ -361,19 +355,19 @@ class UploadController extends BaseController {
if (failure is UploadAttachmentFailure) {
if (failure.isInline) {
if (currentContext != null && currentOverlayContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).thisImageCannotBeAdded,
leadingSVGIconColor: Colors.white,
leadingSVGIcon: _imagePaths.icInsertImage);
leadingSVGIcon: imagePaths.icInsertImage);
}
} else {
if (currentContext != null && currentOverlayContext != null) {
_appToast.showToastErrorMessage(
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).can_not_upload_this_file_as_attachments,
leadingSVGIconColor: Colors.white,
leadingSVGIcon: _imagePaths.icAttachment);
leadingSVGIcon: imagePaths.icAttachment);
}
}
}
@@ -27,6 +27,7 @@ import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_i
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_credential_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_stored_token_oidc_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
@@ -59,6 +60,7 @@ class CredentialBindings extends InteractorsBindings {
Get.find<CredentialRepository>(),
Get.find<AccountRepository>()
));
Get.put(UpdateAuthenticationAccountInteractor(Get.find<AccountRepository>()));
}
@override