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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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>();
|
||||
}
|
||||
+2
-8
@@ -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(
|
||||
|
||||
+54
-66
@@ -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,
|
||||
|
||||
+2
-4
@@ -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),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
+11
-14
@@ -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))),
|
||||
|
||||
+3
-8
@@ -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,
|
||||
|
||||
+9
-12
@@ -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(
|
||||
|
||||
+3
-7
@@ -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),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+7
-12
@@ -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');
|
||||
|
||||
+23
-28
@@ -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();
|
||||
|
||||
+9
-17
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user