TF-1427 Remove object do not used
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
import 'package:core/presentation/extensions/color_extension.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
|
import 'package:core/presentation/views/responsive/responsive_widget.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
|
||||||
@@ -27,60 +28,62 @@ class BackgroundWidgetBuilder extends StatelessWidget {
|
|||||||
key: const Key('background_widget'),
|
key: const Key('background_widget'),
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
width: maxWidth ?? 360,
|
width: maxWidth ?? 360,
|
||||||
child: CustomScrollView(
|
child: ResponsiveWidget(
|
||||||
slivers: [
|
mobile: CustomScrollView(slivers: [
|
||||||
SliverFillRemaining(
|
SliverFillRemaining(child: _buildMessageBody(context))
|
||||||
child: Container(
|
]),
|
||||||
color: Colors.transparent,
|
landscapeMobile: SingleChildScrollView(child: _buildMessageBody(context)),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
responsiveUtils: responsiveUtils,
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
|
||||||
children: [
|
|
||||||
if (iconSVG != null)
|
|
||||||
SvgPicture.asset(
|
|
||||||
iconSVG!,
|
|
||||||
width: responsiveUtils.isLandscapeMobile(context)
|
|
||||||
? 120
|
|
||||||
: 212,
|
|
||||||
height: responsiveUtils.isLandscapeMobile(context)
|
|
||||||
? 120
|
|
||||||
: 212,
|
|
||||||
fit: BoxFit.fill
|
|
||||||
),
|
|
||||||
Padding(
|
|
||||||
padding: EdgeInsets.only(top: iconSVG != null ? 12 : 0),
|
|
||||||
child: Text(
|
|
||||||
title,
|
|
||||||
style: const TextStyle(
|
|
||||||
color: Colors.black,
|
|
||||||
fontSize: 20,
|
|
||||||
fontWeight: FontWeight.normal
|
|
||||||
),
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
if (subTitle != null)
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 12),
|
|
||||||
child: Text(
|
|
||||||
subTitle!,
|
|
||||||
style: const TextStyle(
|
|
||||||
color: AppColor.colorSubtitle,
|
|
||||||
fontSize: 15,
|
|
||||||
fontWeight: FontWeight.normal
|
|
||||||
),
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
height: MediaQuery.of(context).size.height,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
]
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildMessageBody(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
color: Colors.transparent,
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: responsiveUtils.isLandscapeMobile(context)
|
||||||
|
? MainAxisAlignment.start
|
||||||
|
: MainAxisAlignment.center,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
if (iconSVG != null)
|
||||||
|
SvgPicture.asset(
|
||||||
|
iconSVG!,
|
||||||
|
width: 212,
|
||||||
|
height: 212,
|
||||||
|
fit: BoxFit.fill
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.only(top: iconSVG != null ? 12 : 0),
|
||||||
|
child: Text(
|
||||||
|
title,
|
||||||
|
style: const TextStyle(
|
||||||
|
color: Colors.black,
|
||||||
|
fontSize: 20,
|
||||||
|
fontWeight: FontWeight.normal
|
||||||
|
),
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (subTitle != null)
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 12),
|
||||||
|
child: Text(
|
||||||
|
subTitle!,
|
||||||
|
style: const TextStyle(
|
||||||
|
color: AppColor.colorSubtitle,
|
||||||
|
fontSize: 15,
|
||||||
|
fontWeight: FontWeight.normal
|
||||||
|
),
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
height: MediaQuery.of(context).size.height,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -173,13 +173,13 @@ abstract class BaseMailboxController extends BaseController {
|
|||||||
}).toList();
|
}).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get defaultMailboxHasChild =>
|
bool get defaultMailboxIsNotEmpty =>
|
||||||
defaultMailboxTree.value.root.childrenItems?.isNotEmpty ?? false;
|
defaultMailboxTree.value.root.childrenItems?.isNotEmpty ?? false;
|
||||||
|
|
||||||
bool get personalMailboxHasChild =>
|
bool get personalMailboxIsNotEmpty =>
|
||||||
personalMailboxTree.value.root.childrenItems?.isNotEmpty ?? false;
|
personalMailboxTree.value.root.childrenItems?.isNotEmpty ?? false;
|
||||||
|
|
||||||
bool get teamMailboxesHasChild {
|
bool get teamMailboxesIsNotEmpty {
|
||||||
return (teamMailboxesTree.value.root.childrenItems?.isNotEmpty ?? false)
|
return (teamMailboxesTree.value.root.childrenItems?.isNotEmpty ?? false)
|
||||||
&& !teamMailboxesTree.value.root.item.isTeamMailboxes;
|
&& !teamMailboxesTree.value.root.item.isTeamMailboxes;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
|||||||
_buildLoadingView(),
|
_buildLoadingView(),
|
||||||
if (actions?.hasAllMailboxDefault() == true)
|
if (actions?.hasAllMailboxDefault() == true)
|
||||||
_buildAllMailboxes(context, actions, mailboxIdSelected),
|
_buildAllMailboxes(context, actions, mailboxIdSelected),
|
||||||
Obx(() => controller.defaultMailboxHasChild
|
Obx(() => controller.defaultMailboxIsNotEmpty
|
||||||
? _buildMailboxCategory(
|
? _buildMailboxCategory(
|
||||||
context,
|
context,
|
||||||
MailboxCategories.exchange,
|
MailboxCategories.exchange,
|
||||||
@@ -224,7 +224,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
|||||||
actions,
|
actions,
|
||||||
mailboxIdSelected)
|
mailboxIdSelected)
|
||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
Obx(() => controller.personalMailboxHasChild
|
Obx(() => controller.personalMailboxIsNotEmpty
|
||||||
? _buildMailboxCategory(
|
? _buildMailboxCategory(
|
||||||
context,
|
context,
|
||||||
MailboxCategories.personalMailboxes,
|
MailboxCategories.personalMailboxes,
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_i
|
|||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_multiple_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_multiple_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart';
|
||||||
@@ -52,7 +51,6 @@ class MailboxBindings extends BaseBindings {
|
|||||||
Get.find<GetAllMailboxInteractor>(),
|
Get.find<GetAllMailboxInteractor>(),
|
||||||
Get.find<RefreshAllMailboxInteractor>(),
|
Get.find<RefreshAllMailboxInteractor>(),
|
||||||
Get.find<CreateNewMailboxInteractor>(),
|
Get.find<CreateNewMailboxInteractor>(),
|
||||||
Get.find<SearchMailboxInteractor>(),
|
|
||||||
Get.find<DeleteMultipleMailboxInteractor>(),
|
Get.find<DeleteMultipleMailboxInteractor>(),
|
||||||
Get.find<RenameMailboxInteractor>(),
|
Get.find<RenameMailboxInteractor>(),
|
||||||
Get.find<MoveMailboxInteractor>(),
|
Get.find<MoveMailboxInteractor>(),
|
||||||
@@ -95,7 +93,6 @@ class MailboxBindings extends BaseBindings {
|
|||||||
Get.lazyPut(() => GetAllMailboxInteractor(Get.find<MailboxRepository>()));
|
Get.lazyPut(() => GetAllMailboxInteractor(Get.find<MailboxRepository>()));
|
||||||
Get.lazyPut(() => RefreshAllMailboxInteractor(Get.find<MailboxRepository>()));
|
Get.lazyPut(() => RefreshAllMailboxInteractor(Get.find<MailboxRepository>()));
|
||||||
Get.lazyPut(() => CreateNewMailboxInteractor(Get.find<MailboxRepository>()));
|
Get.lazyPut(() => CreateNewMailboxInteractor(Get.find<MailboxRepository>()));
|
||||||
Get.lazyPut(() => SearchMailboxInteractor());
|
|
||||||
Get.lazyPut(() => DeleteMultipleMailboxInteractor(Get.find<MailboxRepository>()));
|
Get.lazyPut(() => DeleteMultipleMailboxInteractor(Get.find<MailboxRepository>()));
|
||||||
Get.lazyPut(() => VerifyNameInteractor());
|
Get.lazyPut(() => VerifyNameInteractor());
|
||||||
Get.lazyPut(() => RenameMailboxInteractor(Get.find<MailboxRepository>()));
|
Get.lazyPut(() => RenameMailboxInteractor(Get.find<MailboxRepository>()));
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read
|
|||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/move_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/move_mailbox_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/refresh_changes_all_mailboxes_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/refresh_changes_all_mailboxes_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/rename_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/rename_mailbox_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/search_mailbox_state.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_mailbox_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_multiple_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/subscribe_multiple_mailbox_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/create_new_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/create_new_mailbox_interactor.dart';
|
||||||
@@ -50,7 +49,6 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_i
|
|||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/move_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/rename_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/search_mailbox_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_multiple_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/subscribe_multiple_mailbox_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/action/mailbox_ui_action.dart';
|
||||||
@@ -74,8 +72,6 @@ import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
|||||||
import 'package:tmail_ui_user/features/thread/domain/state/empty_trash_folder_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/empty_trash_folder_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_email_read_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/mark_as_multiple_email_read_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_state.dart';
|
|
||||||
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/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
|
||||||
@@ -94,22 +90,16 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
final GetAllMailboxInteractor _getAllMailboxInteractor;
|
final GetAllMailboxInteractor _getAllMailboxInteractor;
|
||||||
final RefreshAllMailboxInteractor _refreshAllMailboxInteractor;
|
final RefreshAllMailboxInteractor _refreshAllMailboxInteractor;
|
||||||
final CreateNewMailboxInteractor _createNewMailboxInteractor;
|
final CreateNewMailboxInteractor _createNewMailboxInteractor;
|
||||||
final SearchMailboxInteractor _searchMailboxInteractor;
|
|
||||||
final DeleteMultipleMailboxInteractor _deleteMultipleMailboxInteractor;
|
final DeleteMultipleMailboxInteractor _deleteMultipleMailboxInteractor;
|
||||||
final RenameMailboxInteractor _renameMailboxInteractor;
|
final RenameMailboxInteractor _renameMailboxInteractor;
|
||||||
final MoveMailboxInteractor _moveMailboxInteractor;
|
final MoveMailboxInteractor _moveMailboxInteractor;
|
||||||
final SubscribeMailboxInteractor _subscribeMailboxInteractor;
|
final SubscribeMailboxInteractor _subscribeMailboxInteractor;
|
||||||
final SubscribeMultipleMailboxInteractor _subscribeMultipleMailboxInteractor;
|
final SubscribeMultipleMailboxInteractor _subscribeMultipleMailboxInteractor;
|
||||||
|
|
||||||
final listMailboxSearched = <PresentationMailbox>[].obs;
|
|
||||||
final searchState = SearchState.initial().obs;
|
|
||||||
final searchQuery = SearchQuery.initial().obs;
|
|
||||||
final currentSelectMode = SelectMode.INACTIVE.obs;
|
final currentSelectMode = SelectMode.INACTIVE.obs;
|
||||||
final mailboxCategoriesExpandMode = MailboxCategoriesExpandMode.initial().obs;
|
final mailboxCategoriesExpandMode = MailboxCategoriesExpandMode.initial().obs;
|
||||||
|
|
||||||
final _openMailboxEventController = StreamController<OpenMailboxViewEvent>();
|
final _openMailboxEventController = StreamController<OpenMailboxViewEvent>();
|
||||||
final searchInputController = TextEditingController();
|
|
||||||
final searchFocus = FocusNode();
|
|
||||||
final mailboxListScrollController = ScrollController();
|
final mailboxListScrollController = ScrollController();
|
||||||
|
|
||||||
PresentationMailbox? get selectedMailbox => mailboxDashBoardController.selectedMailbox.value;
|
PresentationMailbox? get selectedMailbox => mailboxDashBoardController.selectedMailbox.value;
|
||||||
@@ -120,7 +110,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
this._getAllMailboxInteractor,
|
this._getAllMailboxInteractor,
|
||||||
this._refreshAllMailboxInteractor,
|
this._refreshAllMailboxInteractor,
|
||||||
this._createNewMailboxInteractor,
|
this._createNewMailboxInteractor,
|
||||||
this._searchMailboxInteractor,
|
|
||||||
this._deleteMultipleMailboxInteractor,
|
this._deleteMultipleMailboxInteractor,
|
||||||
this._renameMailboxInteractor,
|
this._renameMailboxInteractor,
|
||||||
this._moveMailboxInteractor,
|
this._moveMailboxInteractor,
|
||||||
@@ -133,7 +122,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
_registerObxStreamListener();
|
_registerObxStreamListener();
|
||||||
_registerSearchFocusListener();
|
|
||||||
super.onInit();
|
super.onInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,8 +137,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
searchInputController.dispose();
|
|
||||||
searchFocus.dispose();
|
|
||||||
_openMailboxEventController.close();
|
_openMailboxEventController.close();
|
||||||
mailboxListScrollController.dispose();
|
mailboxListScrollController.dispose();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
@@ -176,8 +162,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
(failure) {
|
(failure) {
|
||||||
if (failure is CreateNewMailboxFailure) {
|
if (failure is CreateNewMailboxFailure) {
|
||||||
_createNewMailboxFailure(failure);
|
_createNewMailboxFailure(failure);
|
||||||
} else if (failure is SearchMailboxFailure) {
|
|
||||||
_searchMailboxFailure(failure);
|
|
||||||
} else if (failure is DeleteMultipleMailboxFailure) {
|
} else if (failure is DeleteMultipleMailboxFailure) {
|
||||||
_deleteMailboxFailure(failure);
|
_deleteMailboxFailure(failure);
|
||||||
}
|
}
|
||||||
@@ -189,14 +173,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
_initialMailboxVariableStorage(isRefreshChange: true);
|
_initialMailboxVariableStorage(isRefreshChange: true);
|
||||||
} else if (success is CreateNewMailboxSuccess) {
|
} else if (success is CreateNewMailboxSuccess) {
|
||||||
_createNewMailboxSuccess(success);
|
_createNewMailboxSuccess(success);
|
||||||
} else if (success is SearchMailboxSuccess) {
|
|
||||||
_searchMailboxSuccess(success);
|
|
||||||
} else if (success is DeleteMultipleMailboxAllSuccess) {
|
} else if (success is DeleteMultipleMailboxAllSuccess) {
|
||||||
_deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState);
|
_deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState);
|
||||||
} else if (success is DeleteMultipleMailboxHasSomeSuccess) {
|
} else if (success is DeleteMultipleMailboxHasSomeSuccess) {
|
||||||
_deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState);
|
_deleteMultipleMailboxSuccess(success.listMailboxIdDeleted, success.currentMailboxState);
|
||||||
} else if ((success is GetAllMailboxSuccess || success is RefreshChangesAllMailboxSuccess) && isSearchActive()) {
|
|
||||||
_searchMailboxAction(allMailboxes, searchQuery.value);
|
|
||||||
} else if (success is RenameMailboxSuccess) {
|
} else if (success is RenameMailboxSuccess) {
|
||||||
refreshMailboxChanges(currentMailboxState: success.currentMailboxState);
|
refreshMailboxChanges(currentMailboxState: success.currentMailboxState);
|
||||||
} else if (success is MoveMailboxSuccess) {
|
} else if (success is MoveMailboxSuccess) {
|
||||||
@@ -291,17 +271,6 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void _registerSearchFocusListener() {
|
|
||||||
searchFocus.addListener(() {
|
|
||||||
final hasFocus = searchFocus.hasFocus;
|
|
||||||
final query = searchQuery.value.value;
|
|
||||||
log('MailboxController::_registerSearchFocusListener(): hasFocus: $hasFocus | query: $query');
|
|
||||||
if (!hasFocus && query.isEmpty) {
|
|
||||||
disableSearch();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void _initCollapseMailboxCategories() {
|
void _initCollapseMailboxCategories() {
|
||||||
if (kIsWeb && currentContext != null
|
if (kIsWeb && currentContext != null
|
||||||
&& (_responsiveUtils.isMobile(currentContext!) || _responsiveUtils.isTablet(currentContext!))) {
|
&& (_responsiveUtils.isMobile(currentContext!) || _responsiveUtils.isTablet(currentContext!))) {
|
||||||
@@ -319,14 +288,10 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
}
|
}
|
||||||
|
|
||||||
void refreshAllMailbox() {
|
void refreshAllMailbox() {
|
||||||
if (!isSearchActive()) {
|
final session = mailboxDashBoardController.sessionCurrent;
|
||||||
final session = mailboxDashBoardController.sessionCurrent;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
if (session != null && accountId != null) {
|
||||||
if (session != null && accountId != null) {
|
consumeState(_getAllMailboxInteractor.execute(session, accountId));
|
||||||
consumeState(_getAllMailboxInteractor.execute(session, accountId));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_searchMailboxAction(allMailboxes, searchQuery.value);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -594,52 +559,12 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isSearchActive() => searchState.value.searchStatus == SearchStatus.ACTIVE;
|
|
||||||
|
|
||||||
void openSearchViewAction(BuildContext context) {
|
void openSearchViewAction(BuildContext context) {
|
||||||
SearchMailboxBindings().dependencies();
|
SearchMailboxBindings().dependencies();
|
||||||
mailboxDashBoardController.searchMailboxActivated.value = true;
|
mailboxDashBoardController.searchMailboxActivated.value = true;
|
||||||
closeMailboxScreen(context);
|
closeMailboxScreen(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void disableSearch() {
|
|
||||||
_cancelSelectMailbox();
|
|
||||||
listMailboxSearched.clear();
|
|
||||||
searchState.value = searchState.value.disableSearchState();
|
|
||||||
searchQuery.value = SearchQuery.initial();
|
|
||||||
searchInputController.clear();
|
|
||||||
searchFocus.unfocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
void clearSearchText() {
|
|
||||||
searchQuery.value = SearchQuery.initial();
|
|
||||||
searchFocus.requestFocus();
|
|
||||||
listMailboxSearched.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void searchMailbox(String value) {
|
|
||||||
searchQuery.value = SearchQuery(value);
|
|
||||||
_searchMailboxAction(allMailboxes, searchQuery.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
void _searchMailboxAction(List<PresentationMailbox> allMailboxes, SearchQuery searchQuery) {
|
|
||||||
log('MailboxController::_searchMailboxAction():');
|
|
||||||
if (searchQuery.value.isNotEmpty) {
|
|
||||||
consumeState(_searchMailboxInteractor.execute(allMailboxes, searchQuery));
|
|
||||||
} else {
|
|
||||||
listMailboxSearched.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _searchMailboxSuccess(SearchMailboxSuccess success) {
|
|
||||||
final mailboxesSearchedWithPath = findMailboxPath(success.mailboxesSearched);
|
|
||||||
listMailboxSearched.value = mailboxesSearchedWithPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
void _searchMailboxFailure(SearchMailboxFailure failure) {
|
|
||||||
listMailboxSearched.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void enableSelectionMailbox() {
|
void enableSelectionMailbox() {
|
||||||
currentSelectMode.value = SelectMode.ACTIVE;
|
currentSelectMode.value = SelectMode.ACTIVE;
|
||||||
}
|
}
|
||||||
@@ -650,43 +575,25 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
|||||||
|
|
||||||
bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE;
|
bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE;
|
||||||
|
|
||||||
void selectMailboxSearched(BuildContext context, PresentationMailbox mailboxSelected) {
|
|
||||||
listMailboxSearched.value = listMailboxSearched
|
|
||||||
.map((mailbox) => mailbox.id == mailboxSelected.id ? mailbox.toggleSelectPresentationMailbox() : mailbox)
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _cancelSelectMailbox() {
|
void _cancelSelectMailbox() {
|
||||||
if (isSearchActive()) {
|
unAllSelectedMailboxNode();
|
||||||
listMailboxSearched.value = listMailboxSearched
|
|
||||||
.map((mailbox) => mailbox.toSelectedPresentationMailbox(selectMode: SelectMode.INACTIVE))
|
|
||||||
.toList();
|
|
||||||
} else {
|
|
||||||
unAllSelectedMailboxNode();
|
|
||||||
}
|
|
||||||
currentSelectMode.value = SelectMode.INACTIVE;
|
currentSelectMode.value = SelectMode.INACTIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<PresentationMailbox> get listMailboxSelected {
|
List<PresentationMailbox> get listMailboxSelected {
|
||||||
if (isSearchActive()) {
|
final defaultMailboxSelected = defaultMailboxTree.value
|
||||||
return listMailboxSearched
|
.findNodes((node) => node.selectMode == SelectMode.ACTIVE);
|
||||||
.where((mailbox) => mailbox.selectMode == SelectMode.ACTIVE)
|
|
||||||
.toList();
|
|
||||||
} else {
|
|
||||||
final defaultMailboxSelected = defaultMailboxTree.value
|
|
||||||
.findNodes((node) => node.selectMode == SelectMode.ACTIVE);
|
|
||||||
|
|
||||||
final folderMailboxSelected = personalMailboxTree.value
|
final folderMailboxSelected = personalMailboxTree.value
|
||||||
.findNodes((node) => node.selectMode == SelectMode.ACTIVE);
|
.findNodes((node) => node.selectMode == SelectMode.ACTIVE);
|
||||||
|
|
||||||
final teamMailboxesSelected = teamMailboxesTree.value
|
final teamMailboxesSelected = teamMailboxesTree.value
|
||||||
.findNodes((node) => node.selectMode == SelectMode.ACTIVE);
|
.findNodes((node) => node.selectMode == SelectMode.ACTIVE);
|
||||||
|
|
||||||
return [defaultMailboxSelected, folderMailboxSelected, teamMailboxesSelected]
|
return [defaultMailboxSelected, folderMailboxSelected, teamMailboxesSelected]
|
||||||
.expand((node) => node)
|
.expand((node) => node)
|
||||||
.map((node) => node.item)
|
.map((node) => node.item)
|
||||||
.toList();
|
.toList();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void pressMailboxSelectionAction(
|
void pressMailboxSelectionAction(
|
||||||
|
|||||||
@@ -13,10 +13,8 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.d
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_bottom_sheet_action_tile_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_bottom_sheet_action_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_search_tile_builder.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_footer_widget.dart';
|
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_footer_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/search_app_bar_widget.dart';
|
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
class MailboxView extends GetWidget<MailboxController> {
|
class MailboxView extends GetWidget<MailboxController> {
|
||||||
@@ -47,14 +45,8 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
Expanded(
|
Expanded(
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
_buildHeaderMailbox(context),
|
_buildHeaderMailbox(context),
|
||||||
Obx(() => controller.isSearchActive()
|
Expanded(child: Container(
|
||||||
? SafeArea(bottom: false, top: false, right: false,
|
color: Colors.white,
|
||||||
child: _buildInputSearchFormWidget(context))
|
|
||||||
: const SizedBox.shrink()),
|
|
||||||
Expanded(child: Obx(() => Container(
|
|
||||||
color: controller.isSearchActive()
|
|
||||||
? Colors.white
|
|
||||||
: AppColor.colorBgMailbox,
|
|
||||||
child: RefreshIndicator(
|
child: RefreshIndicator(
|
||||||
color: AppColor.primaryColor,
|
color: AppColor.primaryColor,
|
||||||
onRefresh: () async => controller.refreshAllMailbox(),
|
onRefresh: () async => controller.refreshAllMailbox(),
|
||||||
@@ -62,19 +54,16 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
top: false,
|
top: false,
|
||||||
right: false,
|
right: false,
|
||||||
bottom: false,
|
bottom: false,
|
||||||
child: controller.isSearchActive()
|
child: _buildListMailbox(context)
|
||||||
? _buildListMailboxSearched(context)
|
|
||||||
: _buildListMailbox(context)
|
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
))),
|
)),
|
||||||
Obx(() => controller.isSelectionEnabled()
|
Obx(() => controller.isSelectionEnabled()
|
||||||
? _buildOptionSelectionMailbox(context)
|
? _buildOptionSelectionMailbox(context)
|
||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
Obx(() => controller.isMailboxListScrollable.isTrue
|
Obx(() => controller.isMailboxListScrollable.isTrue
|
||||||
&& !controller.isSearchActive()
|
|
||||||
&& !controller.isSelectionEnabled()
|
&& !controller.isSelectionEnabled()
|
||||||
? const QuotasFooterWidget()
|
? const QuotasFooterWidget()
|
||||||
: const SizedBox.shrink(),
|
: const SizedBox.shrink(),
|
||||||
@@ -82,7 +71,6 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
Obx(() {
|
Obx(() {
|
||||||
final appInformation = controller.mailboxDashBoardController.appInformation.value;
|
final appInformation = controller.mailboxDashBoardController.appInformation.value;
|
||||||
if (appInformation != null
|
if (appInformation != null
|
||||||
&& !controller.isSearchActive()
|
|
||||||
&& !controller.isSelectionEnabled()) {
|
&& !controller.isSelectionEnabled()) {
|
||||||
if (_responsiveUtils.isLandscapeMobile(context)) {
|
if (_responsiveUtils.isLandscapeMobile(context)) {
|
||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
@@ -111,19 +99,12 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 10),
|
padding: const EdgeInsets.only(left: 10),
|
||||||
child: _buildCloseScreenButton(context)),
|
child: _buildCloseScreenButton(context)),
|
||||||
|
SizedBox(width: controller.isSelectionEnabled() ? 49 : 40),
|
||||||
Expanded(child: Text(
|
Expanded(child: Text(
|
||||||
AppLocalizations.of(context).folders,
|
AppLocalizations.of(context).folders,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: const TextStyle(fontSize: 21, color: Colors.black, fontWeight: FontWeight.bold))),
|
style: const TextStyle(fontSize: 21, color: Colors.black, fontWeight: FontWeight.bold))),
|
||||||
Obx(() {
|
Obx(() => _buildEditMailboxButton(context, controller.isSelectionEnabled()))
|
||||||
if (controller.isSearchActive()) {
|
|
||||||
return controller.listMailboxSearched.isNotEmpty
|
|
||||||
? _buildEditMailboxButton(context, controller.isSelectionEnabled())
|
|
||||||
: const SizedBox(width: 60);
|
|
||||||
} else {
|
|
||||||
return _buildEditMailboxButton(context, controller.isSelectionEnabled());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
@@ -205,9 +186,20 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
return _buildUserInformation(context);
|
return _buildUserInformation(context);
|
||||||
}),
|
}),
|
||||||
_buildLoadingView(),
|
_buildLoadingView(),
|
||||||
Obx(() => controller.defaultMailboxTree.value.root.childrenItems?.isNotEmpty ?? false
|
Obx(() {
|
||||||
? _buildMailboxCategory(context, MailboxCategories.exchange, controller.defaultMailboxTree.value.root)
|
if (controller.defaultMailboxIsNotEmpty) {
|
||||||
: const SizedBox.shrink()),
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 16),
|
||||||
|
child: _buildMailboxCategory(
|
||||||
|
context,
|
||||||
|
MailboxCategories.exchange,
|
||||||
|
controller.defaultRootNode
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
}),
|
||||||
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
|
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
|
||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
Container(
|
Container(
|
||||||
@@ -233,7 +225,7 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
color: AppColor.colorTextButton,
|
color: AppColor.colorTextButton,
|
||||||
fit: BoxFit.fill
|
fit: BoxFit.fill
|
||||||
),
|
),
|
||||||
tooltip: AppLocalizations.of(context).search_folder,
|
tooltip: AppLocalizations.of(context).searchForMailboxes,
|
||||||
onTap: () => controller.openSearchViewAction(context)
|
onTap: () => controller.openSearchViewAction(context)
|
||||||
),
|
),
|
||||||
buildIconWeb(
|
buildIconWeb(
|
||||||
@@ -249,19 +241,36 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Obx(() => controller.personalMailboxTree.value.root.childrenItems?.isNotEmpty ?? false
|
Obx(() {
|
||||||
? _buildMailboxCategory(context, MailboxCategories.personalMailboxes, controller.personalMailboxTree.value.root)
|
if (controller.personalMailboxIsNotEmpty) {
|
||||||
: const SizedBox.shrink()),
|
return _buildMailboxCategory(
|
||||||
|
context,
|
||||||
|
MailboxCategories.personalMailboxes,
|
||||||
|
controller.personalRootNode
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
}),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Obx(() => controller.teamMailboxesTree.value.root.childrenItems?.isNotEmpty ?? false
|
Obx(() {
|
||||||
? _buildMailboxCategory(context, MailboxCategories.teamMailboxes, controller.teamMailboxesTree.value.root)
|
if (controller.teamMailboxesIsNotEmpty) {
|
||||||
: const SizedBox.shrink()),
|
return _buildMailboxCategory(
|
||||||
Obx(() => controller.isMailboxListScrollable.isFalse
|
context,
|
||||||
&& !controller.isSearchActive()
|
MailboxCategories.teamMailboxes,
|
||||||
&& !controller.isSelectionEnabled()
|
controller.teamMailboxesRootNode
|
||||||
? const QuotasFooterWidget()
|
);
|
||||||
: const SizedBox.shrink(),
|
} else {
|
||||||
),
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
Obx(() {
|
||||||
|
if (controller.isMailboxListScrollable.isFalse) {
|
||||||
|
return const QuotasFooterWidget();
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
}),
|
||||||
])
|
])
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -410,71 +419,6 @@ class MailboxView extends GetWidget<MailboxController> {
|
|||||||
).toList() ?? <Widget>[];
|
).toList() ?? <Widget>[];
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildInputSearchFormWidget(BuildContext context) {
|
|
||||||
return Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 16, bottom: 16),
|
|
||||||
child: Row(
|
|
||||||
children: [
|
|
||||||
_buildBackSearchButton(context),
|
|
||||||
Expanded(child: (SearchAppBarWidget(
|
|
||||||
_imagePaths,
|
|
||||||
controller.searchQuery.value,
|
|
||||||
controller.searchFocus,
|
|
||||||
controller.searchInputController,
|
|
||||||
hasBackButton: false,
|
|
||||||
hasSearchButton: true)
|
|
||||||
..addPadding(EdgeInsets.zero)
|
|
||||||
..setMargin(const EdgeInsets.only(right: 16))
|
|
||||||
..addDecoration(BoxDecoration(borderRadius: BorderRadius.circular(12), color: AppColor.colorBgSearchBar))
|
|
||||||
..addIconClearText(SvgPicture.asset(_imagePaths.icClearTextSearch, width: 18, height: 18, fit: BoxFit.fill))
|
|
||||||
..setHintText(AppLocalizations.of(context).hint_search_mailboxes)
|
|
||||||
..addOnClearTextSearchAction(() => controller.clearSearchText())
|
|
||||||
..addOnTextChangeSearchAction((query) => controller.searchMailbox(query))
|
|
||||||
..addOnSearchTextAction((query) => controller.searchMailbox(query)))
|
|
||||||
.build())
|
|
||||||
]
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _buildBackSearchButton(BuildContext context) {
|
|
||||||
return Padding(
|
|
||||||
padding: EdgeInsets.only(left: _responsiveUtils.isLandscapeMobile(context) ? 0 : 5),
|
|
||||||
child: buildIconWeb(
|
|
||||||
onTap: () => controller.disableSearch(),
|
|
||||||
icon: SvgPicture.asset(_imagePaths.icBack, color: AppColor.colorTextButton),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _buildListMailboxSearched(BuildContext context) {
|
|
||||||
return Obx(() => Container(
|
|
||||||
margin: _responsiveUtils.isDesktop(context)
|
|
||||||
? const EdgeInsets.only(left: 16, right: 16)
|
|
||||||
: EdgeInsets.zero,
|
|
||||||
decoration: _responsiveUtils.isDesktop(context)
|
|
||||||
? BoxDecoration(borderRadius: BorderRadius.circular(14), color: Colors.white)
|
|
||||||
: null,
|
|
||||||
child: ListView.builder(
|
|
||||||
padding: EdgeInsets.only(left: _responsiveUtils.isLandscapeMobile(context) ? 0 : 16, right: 8),
|
|
||||||
key: const Key('list_mailbox_searched'),
|
|
||||||
itemCount: controller.listMailboxSearched.length,
|
|
||||||
shrinkWrap: true,
|
|
||||||
primary: false,
|
|
||||||
itemBuilder: (context, index) =>
|
|
||||||
Obx(() => (MailboxSearchTileBuilder(
|
|
||||||
context,
|
|
||||||
_imagePaths,
|
|
||||||
_responsiveUtils,
|
|
||||||
controller.listMailboxSearched[index],
|
|
||||||
allSelectMode: controller.currentSelectMode.value,
|
|
||||||
lastMailboxIdInSearchedList: controller.listMailboxSearched.last.id)
|
|
||||||
..addOnOpenMailboxAction((mailbox) => controller.openMailbox(context, mailbox))
|
|
||||||
..addOnSelectMailboxAction((mailbox) => controller.selectMailboxSearched(context, mailbox)))
|
|
||||||
.build())
|
|
||||||
)
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _buildOptionSelectionMailbox(BuildContext context) {
|
Widget _buildOptionSelectionMailbox(BuildContext context) {
|
||||||
return Column(children: [
|
return Column(children: [
|
||||||
const Divider(color: AppColor.lineItemListColor, height: 1, thickness: 0.2),
|
const Divider(color: AppColor.lineItemListColor, height: 1, thickness: 0.2),
|
||||||
|
|||||||
@@ -13,11 +13,9 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_catego
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_bottom_sheet_action_tile_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_bottom_sheet_action_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_search_tile_builder.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/app_dashboard/app_list_dashboard_item.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/app_dashboard/app_list_dashboard_item.dart';
|
||||||
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_footer_widget.dart';
|
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_footer_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/search_app_bar_widget.dart';
|
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||||
|
|
||||||
@@ -47,26 +45,16 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
color: _responsiveUtils.isDesktop(context)
|
color: _responsiveUtils.isDesktop(context)
|
||||||
? AppColor.colorBgDesktop
|
? AppColor.colorBgDesktop
|
||||||
: Colors.white,
|
: Colors.white,
|
||||||
child: Column(children: [
|
child: Container(
|
||||||
Obx(() => controller.isSearchActive()
|
color: _responsiveUtils.isDesktop(context)
|
||||||
? _buildInputSearchFormWidget(context)
|
? AppColor.colorBgDesktop
|
||||||
: const SizedBox.shrink()),
|
: Colors.white,
|
||||||
Expanded(child: Obx(() {
|
child: RefreshIndicator(
|
||||||
return Container(
|
color: AppColor.primaryColor,
|
||||||
color: _responsiveUtils.isDesktop(context)
|
onRefresh: () async => controller.refreshAllMailbox(),
|
||||||
? AppColor.colorBgDesktop
|
child: _buildListMailbox(context)
|
||||||
: Colors.white,
|
),
|
||||||
padding: EdgeInsets.zero,
|
),
|
||||||
child: RefreshIndicator(
|
|
||||||
color: AppColor.primaryColor,
|
|
||||||
onRefresh: () async => controller.refreshAllMailbox(),
|
|
||||||
child: controller.isSearchActive()
|
|
||||||
? _buildListMailboxSearched(
|
|
||||||
context, controller.listMailboxSearched)
|
|
||||||
: _buildListMailbox(context)),
|
|
||||||
);
|
|
||||||
})),
|
|
||||||
]),
|
|
||||||
)),
|
)),
|
||||||
const QuotasFooterWidget(),
|
const QuotasFooterWidget(),
|
||||||
]),
|
]),
|
||||||
@@ -132,9 +120,17 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
])
|
])
|
||||||
: const SizedBox.shrink(),
|
: const SizedBox.shrink(),
|
||||||
Obx(() => controller.defaultMailboxHasChild
|
Obx(() {
|
||||||
? _buildMailboxCategory(context, MailboxCategories.exchange, controller.defaultRootNode)
|
if (controller.defaultMailboxIsNotEmpty) {
|
||||||
: const SizedBox.shrink()),
|
return _buildMailboxCategory(
|
||||||
|
context,
|
||||||
|
MailboxCategories.exchange,
|
||||||
|
controller.defaultRootNode
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
}),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
|
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
|
||||||
const SizedBox(height: 13),
|
const SizedBox(height: 13),
|
||||||
@@ -175,7 +171,7 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Obx(() => controller.personalMailboxHasChild
|
Obx(() => controller.personalMailboxIsNotEmpty
|
||||||
? Column(
|
? Column(
|
||||||
children: [
|
children: [
|
||||||
_buildHeaderMailboxCategory(context, MailboxCategories.personalMailboxes),
|
_buildHeaderMailboxCategory(context, MailboxCategories.personalMailboxes),
|
||||||
@@ -184,7 +180,7 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
)
|
)
|
||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Obx(() => controller.teamMailboxesHasChild
|
Obx(() => controller.teamMailboxesIsNotEmpty
|
||||||
? Column(
|
? Column(
|
||||||
children: [
|
children: [
|
||||||
_buildHeaderMailboxCategory(context, MailboxCategories.teamMailboxes),
|
_buildHeaderMailboxCategory(context, MailboxCategories.teamMailboxes),
|
||||||
@@ -335,74 +331,6 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildInputSearchFormWidget(BuildContext context) {
|
|
||||||
return Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 16),
|
|
||||||
child: Transform(
|
|
||||||
transform: Matrix4.translationValues(
|
|
||||||
_responsiveUtils.isDesktop(context) ? -10.0 : 0.0,
|
|
||||||
0.0,
|
|
||||||
0.0),
|
|
||||||
child: Row(
|
|
||||||
children: [
|
|
||||||
if (!_responsiveUtils.isDesktop(context))
|
|
||||||
const SizedBox(width: 10),
|
|
||||||
buildIconWeb(
|
|
||||||
iconPadding: EdgeInsets.zero,
|
|
||||||
minSize: 40,
|
|
||||||
splashRadius: 15,
|
|
||||||
icon: SvgPicture.asset(_imagePaths.icBack, color: AppColor.colorTextButton),
|
|
||||||
onTap: () => controller.disableSearch()),
|
|
||||||
Expanded(child: (SearchAppBarWidget(
|
|
||||||
_imagePaths,
|
|
||||||
controller.searchQuery.value,
|
|
||||||
controller.searchFocus,
|
|
||||||
controller.searchInputController,
|
|
||||||
hasBackButton: false,
|
|
||||||
hasSearchButton: true)
|
|
||||||
..addPadding(EdgeInsets.zero)
|
|
||||||
..setMargin(EdgeInsets.only(right: _responsiveUtils.isDesktop(context) ? 8 : 16))
|
|
||||||
..addDecoration(BoxDecoration(borderRadius: BorderRadius.circular(12), color: AppColor.colorBgSearchBar))
|
|
||||||
..addIconClearText(SvgPicture.asset(_imagePaths.icClearTextSearch, width: 16, height: 16, fit: BoxFit.fill))
|
|
||||||
..setHintText(AppLocalizations.of(context).hint_search_mailboxes)
|
|
||||||
..addOnClearTextSearchAction(() => controller.clearSearchText())
|
|
||||||
..addOnTextChangeSearchAction((query) => controller.searchMailbox(query))
|
|
||||||
..addOnSearchTextAction((query) => controller.searchMailbox(query)))
|
|
||||||
.build())
|
|
||||||
]
|
|
||||||
),
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _buildListMailboxSearched(BuildContext context, List<PresentationMailbox> listMailbox) {
|
|
||||||
return Container(
|
|
||||||
margin: EdgeInsets.zero,
|
|
||||||
color: _responsiveUtils.isDesktop(context) ? AppColor.colorBgDesktop : Colors.white,
|
|
||||||
child: ListView.builder(
|
|
||||||
padding: EdgeInsets.only(
|
|
||||||
right: 16,
|
|
||||||
left: _responsiveUtils.isDesktop(context) ? 0 : 16,
|
|
||||||
bottom: 16,
|
|
||||||
top: _responsiveUtils.isDesktop(context) ? 0 : 16),
|
|
||||||
key: const Key('list_mailbox_searched'),
|
|
||||||
itemCount: listMailbox.length,
|
|
||||||
shrinkWrap: true,
|
|
||||||
primary: false,
|
|
||||||
itemBuilder: (context, index) =>
|
|
||||||
Obx(() => (MailboxSearchTileBuilder(
|
|
||||||
context,
|
|
||||||
_imagePaths,
|
|
||||||
_responsiveUtils,
|
|
||||||
listMailbox[index])
|
|
||||||
..addOnDragEmailToMailboxAccepted(controller.mailboxDashBoardController.dragSelectedMultipleEmailToMailboxAction)
|
|
||||||
..addOnOpenMailboxAction((mailbox) => controller.openMailbox(context, mailbox))
|
|
||||||
..addOnMenuActionClick((position, mailbox) => _openMailboxMenuAction(context, position, mailbox))
|
|
||||||
..addOnSelectMailboxAction((mailbox) => controller.selectMailboxSearched(context, mailbox)))
|
|
||||||
.build()))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _buildVersionInformation(BuildContext context, PackageInfo packageInfo) {
|
Widget _buildVersionInformation(BuildContext context, PackageInfo packageInfo) {
|
||||||
return Container(
|
return Container(
|
||||||
padding: const EdgeInsets.only(top: 4),
|
padding: const EdgeInsets.only(top: 4),
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/extensions/list_mailbox_node_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/extensions/list_mailbox_node_extension.dart';
|
||||||
@@ -36,4 +38,16 @@ class MailboxUtils {
|
|||||||
log('MailboxUtils::generateMapDescendantIdsAndMailboxIdList(): mapDescendantIds: $mapDescendantIds');
|
log('MailboxUtils::generateMapDescendantIdsAndMailboxIdList(): mapDescendantIds: $mapDescendantIds');
|
||||||
return Tuple2(mapDescendantIds, allMailboxIds);
|
return Tuple2(mapDescendantIds, allMailboxIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static EdgeInsets getPaddingListViewMailboxSearched(BuildContext context, ResponsiveUtils responsiveUtils) {
|
||||||
|
if (responsiveUtils.isWebDesktop(context)) {
|
||||||
|
return const EdgeInsets.only(left: 16, right: 16, bottom: 16);
|
||||||
|
} else {
|
||||||
|
if (responsiveUtils.isScreenWithShortestSide(context)) {
|
||||||
|
return const EdgeInsets.all(16);
|
||||||
|
} else {
|
||||||
|
return const EdgeInsets.symmetric(horizontal: 32, vertical: 16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -41,7 +41,7 @@ class BottomBarSelectionMailboxWidget {
|
|||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Expanded(child: (ButtonBuilder(_imagePaths.icMove)
|
Expanded(child: (ButtonBuilder(_imagePaths.icMoveMailbox)
|
||||||
..key(const Key('button_move_all_mailbox'))
|
..key(const Key('button_move_all_mailbox'))
|
||||||
..paddingIcon(const EdgeInsets.all(8))
|
..paddingIcon(const EdgeInsets.all(8))
|
||||||
..textStyle(TextStyle(
|
..textStyle(TextStyle(
|
||||||
@@ -77,7 +77,7 @@ class BottomBarSelectionMailboxWidget {
|
|||||||
})
|
})
|
||||||
..text(AppLocalizations.of(_context).rename, isVertical: true))
|
..text(AppLocalizations.of(_context).rename, isVertical: true))
|
||||||
.build()),
|
.build()),
|
||||||
Expanded(child: (ButtonBuilder(_imagePaths.icRead)
|
Expanded(child: (ButtonBuilder(_imagePaths.icMarkAsRead)
|
||||||
..key(const Key('button_mark_read_all_mailbox'))
|
..key(const Key('button_mark_read_all_mailbox'))
|
||||||
..paddingIcon(const EdgeInsets.all(8))
|
..paddingIcon(const EdgeInsets.all(8))
|
||||||
..textStyle(TextStyle(
|
..textStyle(TextStyle(
|
||||||
@@ -95,7 +95,7 @@ class BottomBarSelectionMailboxWidget {
|
|||||||
})
|
})
|
||||||
..text(AppLocalizations.of(_context).mark_as_read, isVertical: true))
|
..text(AppLocalizations.of(_context).mark_as_read, isVertical: true))
|
||||||
.build()),
|
.build()),
|
||||||
Expanded(child: (ButtonBuilder(_imagePaths.icDelete)
|
Expanded(child: (ButtonBuilder(_imagePaths.icDeleteMailbox)
|
||||||
..key(const Key('button_delete_all_mailbox'))
|
..key(const Key('button_delete_all_mailbox'))
|
||||||
..paddingIcon(const EdgeInsets.all(8))
|
..paddingIcon(const EdgeInsets.all(8))
|
||||||
..textStyle(TextStyle(
|
..textStyle(TextStyle(
|
||||||
|
|||||||
@@ -72,14 +72,20 @@ class MailBoxFolderTileBuilder {
|
|||||||
_onLongPressMailboxNodeAction = onLongPressMailboxNodeAction;
|
_onLongPressMailboxNodeAction = onLongPressMailboxNodeAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget build() => DragTarget<List<PresentationEmail>>(
|
Widget build() {
|
||||||
builder: (context, _, __,) {
|
if (BuildUtils.isWeb) {
|
||||||
|
return DragTarget<List<PresentationEmail>>(
|
||||||
|
builder: (context, _, __,) {
|
||||||
|
return _buildMailboxItem();
|
||||||
|
},
|
||||||
|
onAccept: (emails) {
|
||||||
|
_onDragItemAccepted?.call(emails, _mailboxNode.item);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} else {
|
||||||
return _buildMailboxItem();
|
return _buildMailboxItem();
|
||||||
},
|
}
|
||||||
onAccept: (emails) {
|
}
|
||||||
_onDragItemAccepted?.call(emails, _mailboxNode.item);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
Widget _buildMailboxItem() {
|
Widget _buildMailboxItem() {
|
||||||
if (mailboxDisplayed == MailboxDisplayed.mailbox) {
|
if (mailboxDisplayed == MailboxDisplayed.mailbox) {
|
||||||
@@ -124,35 +130,39 @@ class MailBoxFolderTileBuilder {
|
|||||||
absorbing: !_mailboxNode.isActivated,
|
absorbing: !_mailboxNode.isActivated,
|
||||||
child: Opacity(
|
child: Opacity(
|
||||||
opacity: _mailboxNode.isActivated ? 1.0 : 0.3,
|
opacity: _mailboxNode.isActivated ? 1.0 : 0.3,
|
||||||
child: InkWell(
|
child: Material(
|
||||||
onLongPress: () => _onLongPressMailboxFolderClick?.call(_mailboxNode),
|
color: Colors.transparent,
|
||||||
onTap: () => allSelectMode == SelectMode.ACTIVE
|
child: InkWell(
|
||||||
? _onSelectMailboxFolderClick?.call(_mailboxNode)
|
onLongPress: () => _onLongPressMailboxFolderClick?.call(_mailboxNode),
|
||||||
: _onOpenMailboxFolderClick?.call(_mailboxNode),
|
onTap: () => allSelectMode == SelectMode.ACTIVE
|
||||||
child: ClipRRect(
|
? _onSelectMailboxFolderClick?.call(_mailboxNode)
|
||||||
borderRadius: const BorderRadius.all(Radius.circular(14)),
|
: _onOpenMailboxFolderClick?.call(_mailboxNode),
|
||||||
child: Column(
|
borderRadius: const BorderRadius.all(Radius.circular(8)),
|
||||||
mainAxisSize: MainAxisSize.min,
|
child: ClipRRect(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
borderRadius: const BorderRadius.all(Radius.circular(14)),
|
||||||
children: [
|
child: Column(
|
||||||
Padding(
|
mainAxisSize: MainAxisSize.min,
|
||||||
padding: EdgeInsets.symmetric(
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
vertical: _mailboxNode.hasChildren() ? 8 : 15),
|
children: [
|
||||||
child: Row(
|
Padding(
|
||||||
crossAxisAlignment: _mailboxNode.item.isTeamMailboxes
|
padding: EdgeInsets.symmetric(
|
||||||
? CrossAxisAlignment.start
|
vertical: _mailboxNode.hasChildren() ? 8 : 15),
|
||||||
: CrossAxisAlignment.center,
|
child: Row(
|
||||||
children: [
|
crossAxisAlignment: _mailboxNode.item.isTeamMailboxes
|
||||||
_buildLeadingMailboxItem(),
|
? CrossAxisAlignment.start
|
||||||
const SizedBox(width: 8),
|
: CrossAxisAlignment.center,
|
||||||
Expanded(child: _buildTitleFolderItem()),
|
children: [
|
||||||
_buildSelectedIcon(),
|
_buildLeadingMailboxItem(),
|
||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
_buildTrailingMailboxItem()
|
Expanded(child: _buildTitleFolderItem()),
|
||||||
]),
|
_buildSelectedIcon(),
|
||||||
),
|
const SizedBox(width: 8),
|
||||||
]
|
_buildTrailingMailboxItem()
|
||||||
)
|
]),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -148,8 +148,8 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
|
|||||||
}
|
}
|
||||||
|
|
||||||
void refreshMailboxChanges({jmap.State? mailboxState}) {
|
void refreshMailboxChanges({jmap.State? mailboxState}) {
|
||||||
|
dashboardController.dispatchMailboxUIAction(RefreshChangeMailboxAction(null));
|
||||||
final newMailboxState = mailboxState ?? currentMailboxState;
|
final newMailboxState = mailboxState ?? currentMailboxState;
|
||||||
dashboardController.dispatchMailboxUIAction(RefreshChangeMailboxAction(newMailboxState));
|
|
||||||
final accountId = dashboardController.accountId.value;
|
final accountId = dashboardController.accountId.value;
|
||||||
final session = dashboardController.sessionCurrent;
|
final session = dashboardController.sessionCurrent;
|
||||||
if (session != null && accountId != null && newMailboxState != null) {
|
if (session != null && accountId != null && newMailboxState != null) {
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
|
|
||||||
import 'package:core/core.dart';
|
|
||||||
import 'package:core/presentation/extensions/color_extension.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
import 'package:core/presentation/views/button/icon_button_web.dart';
|
import 'package:core/presentation/views/button/icon_button_web.dart';
|
||||||
import 'package:core/presentation/views/text/text_field_builder.dart';
|
import 'package:core/presentation/views/text/text_field_builder.dart';
|
||||||
|
|||||||
@@ -20,9 +20,7 @@ class SpamReportBannerWidget extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
return Container(
|
return Container(
|
||||||
height: 124,
|
height: 124,
|
||||||
margin: const EdgeInsets.only(
|
margin: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
|
||||||
top: 12, left: 16, right: 16, bottom: 16
|
|
||||||
),
|
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(12),
|
borderRadius: BorderRadius.circular(12),
|
||||||
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
|
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
|
||||||
|
|||||||
Reference in New Issue
Block a user