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

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

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 21ac80615f7bc9e832fd72cb8ae6875c967d3cea)
This commit is contained in:
dab246
2023-11-14 17:33:17 +07:00
committed by Dat Vu
parent 4ff601b4fc
commit fb47832225
57 changed files with 727 additions and 958 deletions
@@ -1,5 +1,3 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
@@ -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