From 3c44d9aa93b08a85bacd7cb62e499873b634e20d Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 22 Apr 2022 10:47:52 +0700 Subject: [PATCH] TF-495 Implement linter for mailbox view --- .../state_datasource_impl.dart | 2 +- .../list_mailbox_cache_extension.dart | 5 +- .../mailbox/data/network/mailbox_api.dart | 4 +- .../extensions/list_mailbox_extension.dart | 2 +- .../state/create_new_mailbox_state.dart | 2 +- .../state/delete_multiple_mailbox_state.dart | 2 +- .../domain/state/get_all_mailboxes_state.dart | 2 +- .../refresh_changes_all_mailboxes_state.dart | 2 +- .../domain/state/rename_mailbox_state.dart | 2 +- .../domain/state/search_mailbox_state.dart | 2 +- .../presentation/mailbox_bindings.dart | 2 +- .../presentation/mailbox_controller.dart | 33 ++--- .../mailbox/presentation/mailbox_view.dart | 130 +++++++++--------- .../presentation/mailbox_view_web.dart | 80 +++++------ .../presentation/model/mailbox_node.dart | 16 +-- .../presentation/model/mailbox_tree.dart | 2 +- .../model/mailbox_tree_builder.dart | 24 ++-- .../bottom_bar_selection_mailbox_widget.dart | 20 +-- .../mailbox_button_new_folder_builder.dart | 12 +- .../widgets/mailbox_folder_tile_builder.dart | 30 ++-- .../widgets/mailbox_search_tile_builder.dart | 16 +-- .../widgets/search_form_widget_builder.dart | 14 +- .../widgets/storage_widget_builder.dart | 10 +- .../user_information_widget_builder.dart | 12 +- 24 files changed, 207 insertions(+), 219 deletions(-) diff --git a/lib/features/mailbox/data/datasource_impl/state_datasource_impl.dart b/lib/features/mailbox/data/datasource_impl/state_datasource_impl.dart index a320308b4..49171a8fc 100644 --- a/lib/features/mailbox/data/datasource_impl/state_datasource_impl.dart +++ b/lib/features/mailbox/data/datasource_impl/state_datasource_impl.dart @@ -16,7 +16,7 @@ class StateDataSourceImpl extends StateDataSource { Future getState(StateType stateType) { return Future.sync(() async { final stateCache = await _stateCacheClient.getItem(stateType.value); - return stateCache != null ? stateCache.toState() : null; + return stateCache?.toState(); }).catchError((error) { throw error; }); diff --git a/lib/features/mailbox/data/extensions/list_mailbox_cache_extension.dart b/lib/features/mailbox/data/extensions/list_mailbox_cache_extension.dart index 692baa1cf..de46791e7 100644 --- a/lib/features/mailbox/data/extensions/list_mailbox_cache_extension.dart +++ b/lib/features/mailbox/data/extensions/list_mailbox_cache_extension.dart @@ -3,9 +3,6 @@ import 'package:tmail_ui_user/features/mailbox/data/model/mailbox_cache.dart'; extension ListMailboxCacheExtension on List { Map toMap() { - return Map.fromIterable( - this, - key: (mailboxCache) => mailboxCache.id, - value: (mailboxCache) => mailboxCache); + return { for (var mailboxCache in this) mailboxCache.id : mailboxCache }; } } \ No newline at end of file diff --git a/lib/features/mailbox/data/network/mailbox_api.dart b/lib/features/mailbox/data/network/mailbox_api.dart index a1b5cf567..617bffd6b 100644 --- a/lib/features/mailbox/data/network/mailbox_api.dart +++ b/lib/features/mailbox/data/network/mailbox_api.dart @@ -158,14 +158,14 @@ class MailboxAPI { final requestBuilder = JmapRequestBuilder(httpClient, ProcessingInvocation()); final currentSetMailboxInvocations = currentExecuteList.map((mailboxId) { return SetMailboxMethod(accountId) - ..addDestroy(Set.of([mailboxId.id])) + ..addDestroy({mailboxId.id}) ..addOnDestroyRemoveEmails(true); }) .map(requestBuilder.invocation) .toList(); final response = await (requestBuilder - ..usings(Set.of([CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail]))) + ..usings({CapabilityIdentifier.jmapCore, CapabilityIdentifier.jmapMail})) .build() .execute(); diff --git a/lib/features/mailbox/domain/extensions/list_mailbox_extension.dart b/lib/features/mailbox/domain/extensions/list_mailbox_extension.dart index 17eff905d..d1827ca6b 100644 --- a/lib/features/mailbox/domain/extensions/list_mailbox_extension.dart +++ b/lib/features/mailbox/domain/extensions/list_mailbox_extension.dart @@ -4,7 +4,7 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/model.dart'; extension ListMailboxExtensions on List { - Tuple2, List> splitMailboxList(bool test(Mailbox element)) { + Tuple2, List> splitMailboxList(bool Function(Mailbox element) test) { final validBuilder = ListBuilder(); final invalidBuilder = ListBuilder(); forEach((element) { diff --git a/lib/features/mailbox/domain/state/create_new_mailbox_state.dart b/lib/features/mailbox/domain/state/create_new_mailbox_state.dart index 69ade3235..c61bd6148 100644 --- a/lib/features/mailbox/domain/state/create_new_mailbox_state.dart +++ b/lib/features/mailbox/domain/state/create_new_mailbox_state.dart @@ -12,7 +12,7 @@ class CreateNewMailboxSuccess extends UIState { } class CreateNewMailboxFailure extends FeatureFailure { - final exception; + final dynamic exception; CreateNewMailboxFailure(this.exception); diff --git a/lib/features/mailbox/domain/state/delete_multiple_mailbox_state.dart b/lib/features/mailbox/domain/state/delete_multiple_mailbox_state.dart index 129890176..c72f25ff0 100644 --- a/lib/features/mailbox/domain/state/delete_multiple_mailbox_state.dart +++ b/lib/features/mailbox/domain/state/delete_multiple_mailbox_state.dart @@ -12,7 +12,7 @@ class DeleteMultipleMailboxSuccess extends UIState { } class DeleteMultipleMailboxFailure extends FeatureFailure { - final exception; + final dynamic exception; DeleteMultipleMailboxFailure(this.exception); diff --git a/lib/features/mailbox/domain/state/get_all_mailboxes_state.dart b/lib/features/mailbox/domain/state/get_all_mailboxes_state.dart index 6dc18cb45..1c5d4ac02 100644 --- a/lib/features/mailbox/domain/state/get_all_mailboxes_state.dart +++ b/lib/features/mailbox/domain/state/get_all_mailboxes_state.dart @@ -16,7 +16,7 @@ class GetAllMailboxSuccess extends UIState { } class GetAllMailboxFailure extends FeatureFailure { - final exception; + final dynamic exception; GetAllMailboxFailure(this.exception); diff --git a/lib/features/mailbox/domain/state/refresh_changes_all_mailboxes_state.dart b/lib/features/mailbox/domain/state/refresh_changes_all_mailboxes_state.dart index 2a5285d75..4444d4137 100644 --- a/lib/features/mailbox/domain/state/refresh_changes_all_mailboxes_state.dart +++ b/lib/features/mailbox/domain/state/refresh_changes_all_mailboxes_state.dart @@ -16,7 +16,7 @@ class RefreshChangesAllMailboxSuccess extends UIState { } class RefreshChangesAllMailboxFailure extends FeatureFailure { - final exception; + final dynamic exception; RefreshChangesAllMailboxFailure(this.exception); diff --git a/lib/features/mailbox/domain/state/rename_mailbox_state.dart b/lib/features/mailbox/domain/state/rename_mailbox_state.dart index c83d68639..ca6a69ee8 100644 --- a/lib/features/mailbox/domain/state/rename_mailbox_state.dart +++ b/lib/features/mailbox/domain/state/rename_mailbox_state.dart @@ -9,7 +9,7 @@ class RenameMailboxSuccess extends UIState { } class RenameMailboxFailure extends FeatureFailure { - final exception; + final dynamic exception; RenameMailboxFailure(this.exception); diff --git a/lib/features/mailbox/domain/state/search_mailbox_state.dart b/lib/features/mailbox/domain/state/search_mailbox_state.dart index 110764aff..533ccd795 100644 --- a/lib/features/mailbox/domain/state/search_mailbox_state.dart +++ b/lib/features/mailbox/domain/state/search_mailbox_state.dart @@ -12,7 +12,7 @@ class SearchMailboxSuccess extends UIState { } class SearchMailboxFailure extends FeatureFailure { - final exception; + final dynamic exception; SearchMailboxFailure(this.exception); diff --git a/lib/features/mailbox/presentation/mailbox_bindings.dart b/lib/features/mailbox/presentation/mailbox_bindings.dart index c98d74324..b3c846aa1 100644 --- a/lib/features/mailbox/presentation/mailbox_bindings.dart +++ b/lib/features/mailbox/presentation/mailbox_bindings.dart @@ -35,7 +35,7 @@ class MailboxBindings extends BaseBindings { void _bindingsUtils() { Get.lazyPut(() => TreeBuilder()); - Get.lazyPut(() => Uuid()); + Get.lazyPut(() => const Uuid()); } @override diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 67c5ae928..de9542cbc 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -8,7 +8,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; -import 'package:jmap_dart_client/jmap/core/state.dart' as jmapState; +import 'package:jmap_dart_client/jmap/core/state.dart' as jmap_state; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:model/model.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; @@ -89,7 +89,7 @@ class MailboxController extends BaseMailboxController { final searchFocus = FocusNode(); final mailboxListScrollController = ScrollController(); - jmapState.State? currentMailboxState; + jmap_state.State? currentMailboxState; List listMailboxNameAsStringExist = []; MailboxController( @@ -154,7 +154,7 @@ class MailboxController extends BaseMailboxController { ); }); - _openMailboxEventController.stream.throttleTime(Duration(milliseconds: 800)).listen((event) { + _openMailboxEventController.stream.throttleTime(const Duration(milliseconds: 800)).listen((event) { _handleOpenMailbox(event.buildContext, event.presentationMailbox); }); @@ -253,20 +253,11 @@ class MailboxController extends BaseMailboxController { void _setUpMapMailboxIdDefault(List allMailbox, MailboxTree defaultTree, MailboxTree folderTree) { - final mapDefaultMailboxId = Map.fromIterable( - defaultTree.root.childrenItems ?? List.empty(), - key: (mailboxNode) => mailboxNode.item.role!, - value: (mailboxNode) => mailboxNode.item.id); + final mapDefaultMailboxId = { for (var mailboxNode in defaultTree.root.childrenItems ?? List.empty()) mailboxNode.item.role! : mailboxNode.item.id }; - final mapDefaultMailbox = Map.fromIterable( - defaultTree.root.childrenItems ?? List.empty(), - key: (mailboxNode) => mailboxNode.item.role!, - value: (mailboxNode) => mailboxNode.item); + final mapDefaultMailbox = { for (var mailboxNode in defaultTree.root.childrenItems ?? List.empty()) mailboxNode.item.role! : mailboxNode.item }; - final mapMailbox = Map.fromIterable( - allMailbox, - key: (presentationMailbox) => presentationMailbox.id, - value: (presentationMailbox) => presentationMailbox); + final mapMailbox = { for (var presentationMailbox in allMailbox) presentationMailbox.id : presentationMailbox }; mailboxDashBoardController.setMapDefaultMailboxId(mapDefaultMailboxId); @@ -499,12 +490,12 @@ class MailboxController extends BaseMailboxController { context: context, barrierColor: AppColor.colorDefaultCupertinoActionSheet, builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(_imagePaths) - ..key(Key('confirm_dialog_delete_mailbox')) + ..key(const Key('confirm_dialog_delete_mailbox')) ..title(AppLocalizations.of(context).delete_mailboxes) ..content(AppLocalizations.of(context).message_confirmation_dialog_delete_mailbox(presentationMailbox.name?.name ?? '')) ..addIcon(SvgPicture.asset(_imagePaths.icRemoveDialog, fit: BoxFit.fill)) ..colorConfirmButton(AppColor.colorConfirmActionDialog) - ..styleTextConfirmButton(TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorActionDeleteConfirmDialog)) + ..styleTextConfirmButton(const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorActionDeleteConfirmDialog)) ..onCloseButtonAction(() => popBack()) ..onConfirmButtonAction(AppLocalizations.of(context).delete, () => _deleteMailboxAction(presentationMailbox)) ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())) @@ -552,7 +543,7 @@ class MailboxController extends BaseMailboxController { void _switchBackToMailboxDefault() { final inboxMailbox = findMailboxNodeByRole(PresentationMailbox.roleInbox); mailboxDashBoardController.setSelectedMailbox(inboxMailbox?.item); - mailboxListScrollController.animateTo(0, duration: Duration(milliseconds: 500), curve: Curves.fastOutSlowIn); + mailboxListScrollController.animateTo(0, duration: const Duration(milliseconds: 500), curve: Curves.fastOutSlowIn); } void _deleteMailboxFailure(DeleteMultipleMailboxFailure failure) { @@ -569,11 +560,11 @@ class MailboxController extends BaseMailboxController { if (_responsiveUtils.isMobile(context)) { (EditTextModalSheetBuilder() - ..key(Key('rename_mailbox_modal_sheet')) + ..key(const Key('rename_mailbox_modal_sheet')) ..title(AppLocalizations.of(context).rename_mailbox) ..cancelText(AppLocalizations.of(context).cancel) ..boxConstraints(_responsiveUtils.isMobileDevice(context) && _responsiveUtils.isLandscape(context) - ? BoxConstraints(maxWidth: 400) + ? const BoxConstraints(maxWidth: 400) : null) ..onConfirmAction(AppLocalizations.of(context).rename, (value) => _renameMailboxAction(presentationMailbox, value)) @@ -593,7 +584,7 @@ class MailboxController extends BaseMailboxController { barrierColor: AppColor.colorDefaultCupertinoActionSheet, builder: (BuildContext context) => PointerInterceptor(child: (EditTextDialogBuilder() - ..key(Key('rename_mailbox_dialog')) + ..key(const Key('rename_mailbox_dialog')) ..title(AppLocalizations.of(context).rename_mailbox) ..cancelText(AppLocalizations.of(context).cancel) ..setErrorString((value) => getErrorInputNameStringRenameMailbox(context, value)) diff --git a/lib/features/mailbox/presentation/mailbox_view.dart b/lib/features/mailbox/presentation/mailbox_view.dart index 0be86d4ad..c6cb9a2b4 100644 --- a/lib/features/mailbox/presentation/mailbox_view.dart +++ b/lib/features/mailbox/presentation/mailbox_view.dart @@ -20,6 +20,8 @@ class MailboxView extends GetWidget { final _imagePaths = Get.find(); final _responsiveUtils = Get.find(); + MailboxView({Key? key}) : super(key: key); + @override Widget build(BuildContext context) { return _buildBodyMailbox(context); @@ -29,8 +31,8 @@ class MailboxView extends GetWidget { return SafeArea(bottom: false, left: false, right: false, top: _responsiveUtils.isMobile(context), child: ClipRRect( borderRadius: _responsiveUtils.isMobile(context) && _responsiveUtils.isPortrait(context) - ? BorderRadius.only(topRight: Radius.circular(14), topLeft: Radius.circular(14)) - : BorderRadius.all(Radius.zero), + ? const BorderRadius.only(topRight: Radius.circular(14), topLeft: Radius.circular(14)) + : const BorderRadius.all(Radius.zero), child: Drawer( child: Scaffold( backgroundColor: _responsiveUtils.isDesktop(context) ? AppColor.colorBgDesktop : Colors.white, @@ -44,10 +46,10 @@ class MailboxView extends GetWidget { Expanded(child: _buildSearchBarWidget(context)), _buildAddNewFolderButton(context), ]) - : SizedBox.shrink()), + : const SizedBox.shrink()), Obx(() => controller.isSearchActive() ? SafeArea(bottom: false, top: false, right: false, child: _buildInputSearchFormWidget(context)) - : SizedBox.shrink()), + : const SizedBox.shrink()), Expanded(child: Obx(() => Container( color: _responsiveUtils.isDesktop(context) ? Colors.transparent @@ -69,19 +71,19 @@ class MailboxView extends GetWidget { child: _buildListMailbox(context))) ), ))), - Obx(() => controller.isSelectionEnabled() ? _buildOptionSelectionMailbox(context) : SizedBox.shrink()), + Obx(() => controller.isSelectionEnabled() ? _buildOptionSelectionMailbox(context) : const SizedBox.shrink()), ]), Obx(() { if (controller.mailboxDashBoardController.appInformation.value != null && !controller.isSearchActive() && !controller.isSelectionEnabled()) { if (_responsiveUtils.isMobile(context) && _responsiveUtils.isLandscape(context)) { - return SizedBox.shrink(); + return const SizedBox.shrink(); } return Align( alignment: Alignment.bottomCenter, child: _buildVersionInformation(context, controller.mailboxDashBoardController.appInformation.value!)); } else { - return SizedBox.shrink(); + return const SizedBox.shrink(); } }) ]), @@ -94,11 +96,11 @@ class MailboxView extends GetWidget { Widget _buildLogoApp(BuildContext context) { return Container( color: Colors.white, - padding: EdgeInsets.only(left: 32, top: 20, bottom: 24), + padding: const EdgeInsets.only(left: 32, top: 20, bottom: 24), child: (SloganBuilder(arrangedByHorizontal: true) ..setSloganText(AppLocalizations.of(context).app_name) ..setSloganTextAlign(TextAlign.center) - ..setSloganTextStyle(TextStyle(color: Colors.black, fontSize: 25, fontWeight: FontWeight.bold)) + ..setSloganTextStyle(const TextStyle(color: Colors.black, fontSize: 25, fontWeight: FontWeight.bold)) ..setSizeLogo(24) ..setLogo(_imagePaths.icLogoTMail)) .build()); @@ -114,13 +116,13 @@ class MailboxView extends GetWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ _responsiveUtils.isMobile(context) || _responsiveUtils.isTablet(context) - ? Padding(padding: EdgeInsets.only(left: 10), child: _buildCloseScreenButton(context)) - : SizedBox(width: 50), + ? Padding(padding: const EdgeInsets.only(left: 10), child: _buildCloseScreenButton(context)) + : const SizedBox(width: 50), Obx(() { if (controller.isSearchActive()) { return controller.listMailboxSearched.isNotEmpty ? SizedBox(width: controller.isSelectionEnabled() ? 49 : 40) - : SizedBox.shrink(); + : const SizedBox.shrink(); } else { return SizedBox(width: controller.isSelectionEnabled() ? 49 : 40); } @@ -128,22 +130,22 @@ class MailboxView extends GetWidget { Expanded(child: Text( AppLocalizations.of(context).folders, textAlign: TextAlign.center, - style: TextStyle(fontSize: 21, color: Colors.black, fontWeight: FontWeight.bold))), + style: const TextStyle(fontSize: 21, color: Colors.black, fontWeight: FontWeight.bold))), Obx(() { if (controller.isSearchActive()) { return controller.listMailboxSearched.isNotEmpty ? _buildEditMailboxButton(context, controller.isSelectionEnabled()) - : SizedBox(width: 25); + : const SizedBox(width: 25); } else { return _buildEditMailboxButton(context, controller.isSelectionEnabled()); } }), - Padding(padding: EdgeInsets.only(right: 5), child: _buildAddNewFolderButton(context)), + Padding(padding: const EdgeInsets.only(right: 5), child: _buildAddNewFolderButton(context)), ] ) ), if (!_responsiveUtils.isTabletLarge(context)) - Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2), + const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2), ] ); } @@ -151,19 +153,19 @@ class MailboxView extends GetWidget { Widget _buildComposerButton(BuildContext context) { return Row(children: [ Expanded(child: Container( - padding: EdgeInsets.only(top: 16, left: 20), + padding: const EdgeInsets.only(top: 16, left: 20), color: AppColor.colorBgDesktop, alignment: Alignment.centerLeft, child: (ButtonBuilder(_imagePaths.icCompose) - ..key(Key('button_compose_email')) + ..key(const Key('button_compose_email')) ..decoration(BoxDecoration(borderRadius: BorderRadius.circular(25), color: AppColor.colorTextButton)) - ..paddingIcon(EdgeInsets.only(right: 8)) + ..paddingIcon(const EdgeInsets.only(right: 8)) ..iconColor(Colors.white) ..maxWidth(140) ..size(20) ..radiusSplash(10) - ..padding(EdgeInsets.symmetric(vertical: 13)) - ..textStyle(TextStyle(fontSize: 15, color: Colors.white, fontWeight: FontWeight.w500)) + ..padding(const EdgeInsets.symmetric(vertical: 13)) + ..textStyle(const TextStyle(fontSize: 15, color: Colors.white, fontWeight: FontWeight.w500)) ..onPressActionClick(() => controller.mailboxDashBoardController.composeEmailAction()) ..text(AppLocalizations.of(context).compose, isVertical: false)) .build()) @@ -172,12 +174,12 @@ class MailboxView extends GetWidget { if (controller.isSearchActive()) { return controller.listMailboxSearched.isNotEmpty ? Padding( - padding: EdgeInsets.only(top: 16), + padding: const EdgeInsets.only(top: 16), child: _buildEditMailboxButton(context, controller.isSelectionEnabled())) - : SizedBox.shrink(); + : const SizedBox.shrink(); } else { return Padding( - padding: EdgeInsets.only(top: 16), + padding: const EdgeInsets.only(top: 16), child: _buildEditMailboxButton(context, controller.isSelectionEnabled())); } }) @@ -200,12 +202,12 @@ class MailboxView extends GetWidget { Widget _buildEditMailboxButton(BuildContext context, bool isSelectionEnabled) { return Material( - shape: CircleBorder(), + shape: const CircleBorder(), color: Colors.transparent, child: TextButton( child: Text( !isSelectionEnabled ? AppLocalizations.of(context).edit : AppLocalizations.of(context).cancel, - style: TextStyle(fontSize: 17, color: AppColor.colorTextButton, fontWeight: FontWeight.normal)), + style: const TextStyle(fontSize: 17, color: AppColor.colorTextButton, fontWeight: FontWeight.normal)), onPressed: () => !isSelectionEnabled ? controller.enableSelectionMailbox() : controller.disableSelectionMailbox() @@ -214,18 +216,16 @@ class MailboxView extends GetWidget { } Widget _buildUserInformation(BuildContext context) { - return Container( - child: Column(children: [ - Padding( - padding: EdgeInsets.only( - left: _responsiveUtils.isMobile(context) && _responsiveUtils.isLandscape(context) ? 0 : 16, - right: 16), - child: (UserInformationWidgetBuilder(_imagePaths, context, controller.mailboxDashBoardController.userProfile.value) - ..addOnLogoutAction(() => controller.mailboxDashBoardController.logoutAction())) - .build()), - Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2) - ]), - ); + return Column(children: [ + Padding( + padding: EdgeInsets.only( + left: _responsiveUtils.isMobile(context) && _responsiveUtils.isLandscape(context) ? 0 : 16, + right: 16), + child: (UserInformationWidgetBuilder(_imagePaths, context, controller.mailboxDashBoardController.userProfile.value) + ..addOnLogoutAction(() => controller.mailboxDashBoardController.logoutAction())) + .build()), + const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2) + ]); } Widget _buildSearchBarWidget(BuildContext context) { @@ -243,21 +243,21 @@ class MailboxView extends GetWidget { Widget _buildLoadingView() { return Obx(() => controller.viewState.value.fold( - (failure) => SizedBox.shrink(), + (failure) => const SizedBox.shrink(), (success) => success is LoadingState - ? Center(child: Padding( + ? const Center(child: Padding( padding: EdgeInsets.only(top: 16), child: SizedBox( width: 24, height: 24, child: CupertinoActivityIndicator(color: AppColor.colorTextButton)))) - : SizedBox.shrink())); + : const SizedBox.shrink())); } Widget _buildListMailbox(BuildContext context) { return ListView( controller: controller.mailboxListScrollController, - key: PageStorageKey('mailbox_list'), + key: const PageStorageKey('mailbox_list'), primary: false, shrinkWrap: true, padding: EdgeInsets.only(bottom: controller.isSelectionEnabled() ? 16 : 0), @@ -267,7 +267,7 @@ class MailboxView extends GetWidget { && _responsiveUtils.isMobile(context) && _responsiveUtils.isLandscape(context)) || _responsiveUtils.isDesktop(context)) { - return SizedBox.shrink(); + return const SizedBox.shrink(); } return _buildUserInformation(context); }), @@ -275,11 +275,11 @@ class MailboxView extends GetWidget { _buildLoadingView(), Obx(() => controller.defaultMailboxTree.value.root.childrenItems?.isNotEmpty ?? false ? _buildMailboxCategory(context, MailboxCategories.exchange, controller.defaultMailboxTree.value.root) - : SizedBox.shrink()), - SizedBox(height: 12), + : const SizedBox.shrink()), + const SizedBox(height: 12), Obx(() => controller.folderMailboxTree.value.root.childrenItems?.isNotEmpty ?? false ? _buildMailboxCategory(context, MailboxCategories.folders, controller.folderMailboxTree.value.root) - : SizedBox.shrink()), + : const SizedBox.shrink()), ] ); } @@ -293,7 +293,7 @@ class MailboxView extends GetWidget { Expanded(child: Text(categories.getTitle(context), maxLines: 1, overflow: TextOverflow.ellipsis, - style: TextStyle(fontSize: 20, color: Colors.black, fontWeight: FontWeight.bold))), + style: const TextStyle(fontSize: 20, color: Colors.black, fontWeight: FontWeight.bold))), buildIconWeb( icon: SvgPicture.asset( categories.getExpandMode(controller.mailboxCategoriesExpandMode.value) == ExpandMode.EXPAND @@ -313,7 +313,7 @@ class MailboxView extends GetWidget { margin: EdgeInsets.only( left: _responsiveUtils.isMobile(context) && _responsiveUtils.isLandscape(context) ? 0 : 16, right: 16), - padding: EdgeInsets.only(left: 12, right: 8), + padding: const EdgeInsets.only(left: 12, right: 8), child: TreeView( key: Key('${categories.keyValue}_mailbox_list'), children: _buildListChildTileWidget(context, mailboxNode, lastNode: lastNode))); @@ -323,10 +323,10 @@ class MailboxView extends GetWidget { return Column(children: [ _buildHeaderMailboxCategory(context, categories), AnimatedContainer( - duration: Duration(milliseconds: 400), + duration: const Duration(milliseconds: 400), child: categories.getExpandMode(controller.mailboxCategoriesExpandMode.value) == ExpandMode.EXPAND ? _buildBodyMailboxCategory(context, categories, mailboxNode) - : Offstage()) + : const Offstage()) ]); } @@ -335,7 +335,7 @@ class MailboxView extends GetWidget { ?.map((mailboxNode) => mailboxNode.hasChildren() ? TreeViewChild( context, - key: Key('children_tree_mailbox_child'), + key: const Key('children_tree_mailbox_child'), isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND, parent: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode, allSelectMode: controller.currentSelectMode.value) @@ -355,7 +355,7 @@ class MailboxView extends GetWidget { Widget _buildInputSearchFormWidget(BuildContext context) { return Padding( - padding: EdgeInsets.only(top: 16, bottom: 16), + padding: const EdgeInsets.only(top: 16, bottom: 16), child: Row( children: [ _buildBackSearchButton(context), @@ -369,7 +369,7 @@ class MailboxView extends GetWidget { hasBackButton: false, hasSearchButton: true) ..addPadding(EdgeInsets.zero) - ..setMargin(EdgeInsets.only(right: 16)) + ..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) @@ -384,9 +384,9 @@ class MailboxView extends GetWidget { Widget _buildBackSearchButton(BuildContext context) { return Padding( - padding: EdgeInsets.only(left: 5), + padding: const EdgeInsets.only(left: 5), child: Material( - shape: CircleBorder(), + shape: const CircleBorder(), color: Colors.transparent, child: IconButton( splashRadius: 20, @@ -400,14 +400,14 @@ class MailboxView extends GetWidget { Widget _buildListMailboxSearched(BuildContext context) { return Obx(() => Container( margin: _responsiveUtils.isDesktop(context) - ? EdgeInsets.only(left: 16, right: 16) + ? 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: 16, right: 8), - key: Key('list_mailbox_searched'), + padding: const EdgeInsets.only(left: 16, right: 8), + key: const Key('list_mailbox_searched'), itemCount: controller.listMailboxSearched.length, shrinkWrap: true, primary: false, @@ -429,20 +429,20 @@ class MailboxView extends GetWidget { return Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(16), - boxShadow: [BoxShadow(color: AppColor.colorEmailAddressTag, spreadRadius: 1, blurRadius: 1, offset: Offset(0, 0.5))], + boxShadow: const [BoxShadow(color: AppColor.colorEmailAddressTag, spreadRadius: 1, blurRadius: 1, offset: Offset(0, 0.5))], color: Colors.white), - margin: EdgeInsets.only(left: 10, bottom: 10, right: 10), - padding: EdgeInsets.all(8), + margin: const EdgeInsets.only(left: 10, bottom: 10, right: 10), + padding: const EdgeInsets.all(8), child: (BottomBarSelectionMailboxWidget(context, _imagePaths, controller.listMailboxSelected) ..addOnMailboxActionsClick((actions, listMailboxSelected) => controller.pressMailboxSelectionAction(context, actions, listMailboxSelected))) .build(), ); } else { return Column(children: [ - Divider(color: AppColor.lineItemListColor, height: 1, thickness: 0.2), + const Divider(color: AppColor.lineItemListColor, height: 1, thickness: 0.2), SafeArea( child: Padding( - padding: EdgeInsets.symmetric(vertical: 8), + padding: const EdgeInsets.symmetric(vertical: 8), child: (BottomBarSelectionMailboxWidget(context, _imagePaths, controller.listMailboxSelected) ..addOnMailboxActionsClick((actions, listMailboxSelected) => controller.pressMailboxSelectionAction(context, actions, listMailboxSelected))) .build())) @@ -452,11 +452,11 @@ class MailboxView extends GetWidget { Widget _buildVersionInformation(BuildContext context, PackageInfo packageInfo) { return SafeArea(child: Container( - padding: EdgeInsets.symmetric(vertical: 16, horizontal: 16), + padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 16), child: Text( '${AppLocalizations.of(context).version} ${packageInfo.version}', textAlign: TextAlign.center, - style: TextStyle(fontSize: 16, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500), + style: const TextStyle(fontSize: 16, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500), ), )); } diff --git a/lib/features/mailbox/presentation/mailbox_view_web.dart b/lib/features/mailbox/presentation/mailbox_view_web.dart index d3c3f7107..e8822ca58 100644 --- a/lib/features/mailbox/presentation/mailbox_view_web.dart +++ b/lib/features/mailbox/presentation/mailbox_view_web.dart @@ -20,6 +20,8 @@ class MailboxView extends GetWidget { final _imagePaths = Get.find(); final _responsiveUtils = Get.find(); + MailboxView({Key? key}) : super(key: key); + @override Widget build(BuildContext context) { return Drawer( @@ -28,13 +30,13 @@ class MailboxView extends GetWidget { body: Column( children: [ _buildLogoApp(context), - if (!_responsiveUtils.isDesktop(context)) Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2), + if (!_responsiveUtils.isDesktop(context)) const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2), Expanded(child: Container( padding: EdgeInsets.zero, color: _responsiveUtils.isDesktop(context) ? AppColor.colorBgDesktop : Colors.white, child: Column(children: [ if (_responsiveUtils.isDesktop(context)) _buildComposerButton(context), - Obx(() => controller.isSearchActive() ? _buildInputSearchFormWidget(context) : SizedBox.shrink()), + Obx(() => controller.isSearchActive() ? _buildInputSearchFormWidget(context) : const SizedBox.shrink()), Expanded(child: Obx(() => Container( color: _responsiveUtils.isDesktop(context) ? AppColor.colorBgDesktop : Colors.white, padding: EdgeInsets.zero, @@ -52,11 +54,11 @@ class MailboxView extends GetWidget { if (controller.isSearchActive()) { return controller.listPresentationMailboxSelected.isNotEmpty ? _buildOptionSelectionMailbox(context) - : SizedBox.shrink(); + : const SizedBox.shrink(); } else { return controller.listMailboxNodeSelected.isNotEmpty ? _buildOptionSelectionMailbox(context) - : SizedBox.shrink(); + : const SizedBox.shrink(); } }), ] @@ -76,7 +78,7 @@ class MailboxView extends GetWidget { (SloganBuilder(arrangedByHorizontal: true) ..setSloganText(AppLocalizations.of(context).app_name) ..setSloganTextAlign(TextAlign.center) - ..setSloganTextStyle(TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold)) + ..setSloganTextStyle(const TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold)) ..setSizeLogo(24) ..setLogo(_imagePaths.icLogoTMail)) .build(), @@ -84,7 +86,7 @@ class MailboxView extends GetWidget { if (controller.mailboxDashBoardController.appInformation.value != null) { return _buildVersionInformation(context, controller.mailboxDashBoardController.appInformation.value!); } else { - return SizedBox.shrink(); + return const SizedBox.shrink(); } }), ]) @@ -93,19 +95,19 @@ class MailboxView extends GetWidget { Widget _buildComposerButton(BuildContext context) { return Container( - padding: EdgeInsets.only(top: 16, right: 16, left: 20), + padding: const EdgeInsets.only(top: 16, right: 16, left: 20), color: AppColor.colorBgDesktop, alignment: Alignment.centerLeft, child: (ButtonBuilder(_imagePaths.icCompose) - ..key(Key('button_compose_email')) + ..key(const Key('button_compose_email')) ..decoration(BoxDecoration(borderRadius: BorderRadius.circular(25), color: AppColor.colorTextButton)) - ..paddingIcon(EdgeInsets.only(right: 8)) + ..paddingIcon(const EdgeInsets.only(right: 8)) ..iconColor(Colors.white) ..maxWidth(140) ..size(20) ..radiusSplash(10) - ..padding(EdgeInsets.symmetric(vertical: 13)) - ..textStyle(TextStyle(fontSize: 15, color: Colors.white, fontWeight: FontWeight.w500)) + ..padding(const EdgeInsets.symmetric(vertical: 13)) + ..textStyle(const TextStyle(fontSize: 15, color: Colors.white, fontWeight: FontWeight.w500)) ..onPressActionClick(() => controller.mailboxDashBoardController.composeEmailAction()) ..text(AppLocalizations.of(context).compose, isVertical: false)) .build()); @@ -122,21 +124,21 @@ class MailboxView extends GetWidget { Widget _buildLoadingView() { return Obx(() => controller.viewState.value.fold( - (failure) => SizedBox.shrink(), + (failure) => const SizedBox.shrink(), (success) => success is LoadingState - ? Center(child: Padding( + ? const Center(child: Padding( padding: EdgeInsets.only(top: 16), child: SizedBox( width: 24, height: 24, child: CupertinoActivityIndicator(color: AppColor.colorTextButton)))) - : SizedBox.shrink())); + : const SizedBox.shrink())); } Widget _buildListMailbox(BuildContext context) { return ListView( controller: controller.mailboxListScrollController, - key: PageStorageKey('mailbox_list'), + key: const PageStorageKey('mailbox_list'), primary: false, shrinkWrap: true, padding: EdgeInsets.only( @@ -148,30 +150,30 @@ class MailboxView extends GetWidget { && _responsiveUtils.isMobile(context) && _responsiveUtils.isLandscape(context)) || _responsiveUtils.isDesktop(context)) { - return SizedBox.shrink(); + return const SizedBox.shrink(); } return _buildUserInformation(context); }), _buildLoadingView(), Obx(() => controller.defaultMailboxTree.value.root.childrenItems?.isNotEmpty ?? false ? _buildMailboxCategory(context, MailboxCategories.exchange, controller.defaultMailboxTree.value.root) - : SizedBox.shrink()), - SizedBox(height: 8), + : const SizedBox.shrink()), + const SizedBox(height: 8), Obx(() => controller.folderMailboxTree.value.root.childrenItems?.isNotEmpty ?? false - ? Column(children: [ + ? Column(children: const [ Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2), SizedBox(height: 8), ]) - : SizedBox.shrink()), + : const SizedBox.shrink()), Obx(() => controller.folderMailboxTree.value.root.childrenItems?.isNotEmpty ?? false ? _buildMailboxCategory(context, MailboxCategories.folders, controller.folderMailboxTree.value.root) - : SizedBox.shrink()), - SizedBox(height: 8), - Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2), + : const SizedBox.shrink()), + const SizedBox(height: 8), + const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2), Row(children: [ Expanded(child: _buildSearchBarWidget(context)), Padding( - padding: EdgeInsets.only(right: 8), + padding: const EdgeInsets.only(right: 8), child: buildIconWeb( icon: SvgPicture.asset(_imagePaths.icAddNewFolder, color: AppColor.colorTextButton, fit: BoxFit.fill), tooltip: AppLocalizations.of(context).new_mailbox, @@ -183,14 +185,14 @@ class MailboxView extends GetWidget { Widget _buildUserInformation(BuildContext context) { return Container( - padding: EdgeInsets.symmetric(vertical: 10), + padding: const EdgeInsets.symmetric(vertical: 10), child: Column(children: [ Padding( - padding: EdgeInsets.only(left: 16, bottom: 10), + padding: const EdgeInsets.only(left: 16, bottom: 10), child: (UserInformationWidgetBuilder(_imagePaths, context, controller.mailboxDashBoardController.userProfile.value) ..addOnLogoutAction(() => controller.mailboxDashBoardController.logoutAction())) .build()), - Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2) + const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2) ]), ); } @@ -202,7 +204,7 @@ class MailboxView extends GetWidget { Expanded(child: Text(categories.getTitle(context), maxLines: 1, overflow: TextOverflow.ellipsis, - style: TextStyle(fontSize: 17, color: Colors.black, fontWeight: FontWeight.bold))), + style: const TextStyle(fontSize: 17, color: Colors.black, fontWeight: FontWeight.bold))), buildIconWeb( splashRadius: 12, icon: SvgPicture.asset( @@ -230,10 +232,10 @@ class MailboxView extends GetWidget { return Column(children: [ _buildHeaderMailboxCategory(context, categories), AnimatedContainer( - duration: Duration(milliseconds: 400), + duration: const Duration(milliseconds: 400), child: categories.getExpandMode(controller.mailboxCategoriesExpandMode.value) == ExpandMode.EXPAND ? _buildBodyMailboxCategory(context, categories, mailboxNode) - : Offstage()) + : const Offstage()) ]); } @@ -242,7 +244,7 @@ class MailboxView extends GetWidget { ?.map((mailboxNode) => mailboxNode.hasChildren() ? TreeViewChild( context, - key: Key('children_tree_mailbox_child'), + key: const Key('children_tree_mailbox_child'), isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND, parent: Obx(() => (MailBoxFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode, mailboxNodeSelected: controller.mailboxDashBoardController.selectedMailbox.value) @@ -262,7 +264,7 @@ class MailboxView extends GetWidget { Widget _buildInputSearchFormWidget(BuildContext context) { return Padding( - padding: EdgeInsets.only(left: 8, top: 16), + padding: const EdgeInsets.only(left: 8, top: 16), child: Row( children: [ buildIconWeb( @@ -271,7 +273,7 @@ class MailboxView extends GetWidget { Expanded(child: (SearchAppBarWidget(context, _imagePaths, _responsiveUtils, controller.searchQuery.value, controller.searchFocus, controller.searchInputController, hasBackButton: false, hasSearchButton: true) ..addPadding(EdgeInsets.zero) - ..setMargin(EdgeInsets.only(right: 16)) + ..setMargin(const EdgeInsets.only(right: 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) @@ -289,8 +291,8 @@ class MailboxView extends GetWidget { margin: EdgeInsets.zero, color: _responsiveUtils.isDesktop(context) ? AppColor.colorBgDesktop : Colors.white, child: ListView.builder( - padding: EdgeInsets.only(left: 16, right: 8), - key: Key('list_mailbox_searched'), + padding: const EdgeInsets.only(left: 16, right: 8), + key: const Key('list_mailbox_searched'), itemCount: listMailbox.length, shrinkWrap: true, primary: false, @@ -307,9 +309,9 @@ class MailboxView extends GetWidget { Widget _buildOptionSelectionMailbox(BuildContext context) { return Column(children: [ - Divider(color: AppColor.lineItemListColor, height: 1, thickness: 0.2), + const Divider(color: AppColor.lineItemListColor, height: 1, thickness: 0.2), Padding( - padding: EdgeInsets.symmetric(vertical: 16), + padding: const EdgeInsets.symmetric(vertical: 16), child: (BottomBarSelectionMailboxWidget(context, _imagePaths, controller.listMailboxSelected) ..addOnMailboxActionsClick((actions, listMailboxSelected) => controller.pressMailboxSelectionAction(context, actions, listMailboxSelected))) .build() @@ -319,11 +321,11 @@ class MailboxView extends GetWidget { Widget _buildVersionInformation(BuildContext context, PackageInfo packageInfo) { return Container( - padding: EdgeInsets.only(top: 4), + padding: const EdgeInsets.only(top: 4), child: Text( 'v.${packageInfo.version}', textAlign: TextAlign.center, - style: TextStyle(fontSize: 13, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500), + style: const TextStyle(fontSize: 13, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500), ), ); } diff --git a/lib/features/mailbox/presentation/model/mailbox_node.dart b/lib/features/mailbox/presentation/model/mailbox_node.dart index a7a29f0cd..cc31ccbc9 100644 --- a/lib/features/mailbox/presentation/model/mailbox_node.dart +++ b/lib/features/mailbox/presentation/model/mailbox_node.dart @@ -6,7 +6,7 @@ import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/select_mode.dart'; class MailboxNode with EquatableMixin{ - static PresentationMailbox _root = PresentationMailbox(MailboxId(Id('root'))); + static final PresentationMailbox _root = PresentationMailbox(MailboxId(Id('root'))); PresentationMailbox item; List? childrenItems; @@ -29,14 +29,12 @@ class MailboxNode with EquatableMixin{ ); void addChildNode(MailboxNode node) { - if (childrenItems == null) { - childrenItems = []; - } + childrenItems ??= []; childrenItems?.add(node); } List? updateNode(MailboxId mailboxId, MailboxNode newNode, {MailboxNode? parent}) { - List? _children = parent == null ? this.childrenItems : parent.childrenItems; + List? _children = parent == null ? childrenItems : parent.childrenItems; return _children?.map((MailboxNode child) { if (child.item.id == mailboxId) { return newNode; @@ -66,15 +64,15 @@ class MailboxNode with EquatableMixin{ listOfNodes.add(node); List? childrenItems = node.childrenItems; if (childrenItems != null) { - childrenItems.forEach((child) { + for (var child in childrenItems) { _appendDescendants(child, listOfNodes); - }); + } } } } List? toggleSelectNode(MailboxNode selectedMailboxMode, {MailboxNode? parent}) { - List? _children = parent == null ? this.childrenItems : parent.childrenItems; + List? _children = parent == null ? childrenItems : parent.childrenItems; return _children?.map((MailboxNode child) { if (child.item.id == selectedMailboxMode.item.id) { return child.toggleSelectMailboxNode(); @@ -88,7 +86,7 @@ class MailboxNode with EquatableMixin{ } List? toSelectedNode({required SelectMode selectMode, ExpandMode? newExpandMode, MailboxNode? parent}) { - List? _children = parent == null ? this.childrenItems : parent.childrenItems; + List? _children = parent == null ? childrenItems : parent.childrenItems; return _children?.map((MailboxNode child) { if (child.hasChildren()) { return child.copyWith( diff --git a/lib/features/mailbox/presentation/model/mailbox_tree.dart b/lib/features/mailbox/presentation/model/mailbox_tree.dart index c61c7577f..1e70b43f4 100644 --- a/lib/features/mailbox/presentation/model/mailbox_tree.dart +++ b/lib/features/mailbox/presentation/model/mailbox_tree.dart @@ -15,7 +15,7 @@ class MailboxTree with EquatableMixin { MailboxTree(this.root); MailboxNode? findNode(NodeQuery nodeQuery) { - var result; + MailboxNode? result; final queue = ListQueue(); queue.addLast(root); while (queue.isNotEmpty) { diff --git a/lib/features/mailbox/presentation/model/mailbox_tree_builder.dart b/lib/features/mailbox/presentation/model/mailbox_tree_builder.dart index 612217ff4..baf5af765 100644 --- a/lib/features/mailbox/presentation/model/mailbox_tree_builder.dart +++ b/lib/features/mailbox/presentation/model/mailbox_tree_builder.dart @@ -13,10 +13,10 @@ class TreeBuilder { final Map mailboxDictionary = HashMap(); final tree = MailboxTree(MailboxNode.root()); - mailboxesList.forEach((mailbox) { + for (var mailbox in mailboxesList) { mailboxDictionary[mailbox.id] = MailboxNode(mailbox); - }); - mailboxesList.forEach((mailbox) { + } + for (var mailbox in mailboxesList) { final parentId = mailbox.parentId; final parentNode = mailboxDictionary[parentId]; final node = mailboxDictionary[mailbox.id]; @@ -35,7 +35,7 @@ class TreeBuilder { ); } } - }); + } return tree; } @@ -45,11 +45,11 @@ class TreeBuilder { final defaultTree = MailboxTree(MailboxNode.root()); final folderTree = MailboxTree(MailboxNode.root()); - allMailboxes.forEach((mailbox) { + for (var mailbox in allMailboxes) { mailboxDictionary[mailbox.id] = MailboxNode(mailbox); - }); + } - allMailboxes.forEach((mailbox) { + for (var mailbox in allMailboxes) { final parentId = mailbox.parentId; final parentNode = mailboxDictionary[parentId]; final node = mailboxDictionary[mailbox.id]; @@ -70,7 +70,7 @@ class TreeBuilder { ); } } - }); + } defaultTree.root.childrenItems?.sort((thisMailbox, thatMailbox) => thisMailbox.compareTo(thatMailbox)); return Tuple2(defaultTree, folderTree); @@ -86,7 +86,7 @@ class TreeBuilder { final newDefaultTree = MailboxTree(MailboxNode.root()); final newFolderTree = MailboxTree(MailboxNode.root()); - allMailboxes.forEach((mailbox) { + for (var mailbox in allMailboxes) { final mailboxNodeBeforeChanges = defaultTreeBeforeChanges.findNode((node) => node.item.id == mailbox.id) ?? folderTreeBeforeChanges.findNode((node) => node.item.id == mailbox.id); if (mailboxNodeBeforeChanges != null) { @@ -97,9 +97,9 @@ class TreeBuilder { } else { mailboxDictionary[mailbox.id] = MailboxNode(mailbox); } - }); + } - allMailboxes.forEach((mailbox) { + for (var mailbox in allMailboxes) { final parentId = mailbox.parentId; final parentNode = mailboxDictionary[parentId]; final node = mailboxDictionary[mailbox.id]; @@ -120,7 +120,7 @@ class TreeBuilder { ); } } - }); + } newDefaultTree.root.childrenItems?.sort((thisMailbox, thatMailbox) => thisMailbox.compareTo(thatMailbox)); return Tuple2(newDefaultTree, newFolderTree); diff --git a/lib/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart b/lib/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart index 7b57615f2..08a371650 100644 --- a/lib/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart +++ b/lib/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart @@ -26,11 +26,11 @@ class BottomBarSelectionMailboxWidget { Widget build() { return Container( - key: Key('bottom_bar_selection_mailbox_widget'), + key: const Key('bottom_bar_selection_mailbox_widget'), alignment: Alignment.center, color: Colors.white, child: MediaQuery( - data: MediaQueryData(padding: EdgeInsets.zero), + data: const MediaQueryData(padding: EdgeInsets.zero), child: SafeArea(child: _buildListOptionButton()) ) ); @@ -42,16 +42,16 @@ class BottomBarSelectionMailboxWidget { crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded(child: (ButtonBuilder(_imagePaths.icMove) - ..key(Key('button_move_all_mailbox')) - ..paddingIcon(EdgeInsets.all(8)) + ..key(const Key('button_move_all_mailbox')) + ..paddingIcon(const EdgeInsets.all(8)) ..textStyle(TextStyle(fontSize: 12, color: AppColor.colorTextButton.withOpacity(0.3))) ..iconColor(AppColor.colorTextButton.withOpacity(0.3)) ..onPressActionClick(() => {}) ..text(AppLocalizations.of(_context).move, isVertical: true)) .build()), Expanded(child: (ButtonBuilder(_imagePaths.icRenameMailbox) - ..key(Key('button_rename_mailbox')) - ..paddingIcon(EdgeInsets.all(8)) + ..key(const Key('button_rename_mailbox')) + ..paddingIcon(const EdgeInsets.all(8)) ..textStyle(TextStyle( fontSize: 12, color: _isRenameMailboxValid ? AppColor.colorTextButton : AppColor.colorTextButton.withOpacity(0.3))) @@ -64,16 +64,16 @@ class BottomBarSelectionMailboxWidget { ..text(AppLocalizations.of(_context).rename, isVertical: true)) .build()), Expanded(child: (ButtonBuilder(_imagePaths.icRead) - ..key(Key('button_mark_read_all_mailbox')) - ..paddingIcon(EdgeInsets.all(8)) + ..key(const Key('button_mark_read_all_mailbox')) + ..paddingIcon(const EdgeInsets.all(8)) ..textStyle(TextStyle(fontSize: 12, color: AppColor.colorTextButton.withOpacity(0.3))) ..iconColor(AppColor.colorTextButton.withOpacity(0.3)) ..onPressActionClick(() => {}) ..text(AppLocalizations.of(_context).mark_as_read, isVertical: true)) .build()), Expanded(child: (ButtonBuilder(_imagePaths.icDelete) - ..key(Key('button_delete_all_mailbox')) - ..paddingIcon(EdgeInsets.all(8)) + ..key(const Key('button_delete_all_mailbox')) + ..paddingIcon(const EdgeInsets.all(8)) ..textStyle(TextStyle( fontSize: 12, color: _isDeleteMailboxValid ? AppColor.colorTextButton : AppColor.colorTextButton.withOpacity(0.3))) diff --git a/lib/features/mailbox/presentation/widgets/mailbox_button_new_folder_builder.dart b/lib/features/mailbox/presentation/widgets/mailbox_button_new_folder_builder.dart index 8c5475d93..5cdbd4a41 100644 --- a/lib/features/mailbox/presentation/widgets/mailbox_button_new_folder_builder.dart +++ b/lib/features/mailbox/presentation/widgets/mailbox_button_new_folder_builder.dart @@ -32,13 +32,13 @@ class MailboxNewFolderTileBuilder { splashColor: Colors.transparent, highlightColor: Colors.transparent), child: Container( - key: Key('mailbox_new_folder_tile'), + key: const Key('mailbox_new_folder_tile'), alignment: Alignment.center, decoration: BoxDecoration( borderRadius: BorderRadius.circular(16), color: AppColor.mailboxBackgroundColor), child: MediaQuery( - data: MediaQueryData(padding: EdgeInsets.zero), + data: const MediaQueryData(padding: EdgeInsets.zero), child: ListTile( contentPadding: EdgeInsets.zero, onTap: () => { @@ -47,16 +47,16 @@ class MailboxNewFolderTileBuilder { } }, leading: Padding( - padding: EdgeInsets.only(left: 34), + padding: const EdgeInsets.only(left: 34), child: _icon != null ? SvgPicture.asset(_icon!, width: 24, height: 24, color: AppColor.mailboxIconColor, fit: BoxFit.fill) - : SizedBox.shrink()), + : const SizedBox.shrink()), title: Padding( - padding: EdgeInsets.only(left: 8), + padding: const EdgeInsets.only(left: 8), child: Text( _name ?? '', maxLines: 1, - style: TextStyle(fontSize: 15, color: AppColor.mailboxTextColor, fontWeight: FontWeight.bold), + style: const TextStyle(fontSize: 15, color: AppColor.mailboxTextColor, fontWeight: FontWeight.bold), )), ) ) diff --git a/lib/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart b/lib/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart index 67604bee8..13a2f5240 100644 --- a/lib/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart +++ b/lib/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart @@ -44,15 +44,15 @@ class MailBoxFolderTileBuilder { ); void addOnExpandFolderActionClick(OnExpandFolderActionClick onExpandFolderActionClick) { - this._onExpandFolderActionClick = onExpandFolderActionClick; + _onExpandFolderActionClick = onExpandFolderActionClick; } void addOnOpenMailboxFolderClick(OnOpenMailboxFolderClick onOpenMailboxFolderClick) { - this._onOpenMailboxFolderClick = onOpenMailboxFolderClick; + _onOpenMailboxFolderClick = onOpenMailboxFolderClick; } void addOnSelectMailboxFolderClick(OnSelectMailboxFolderClick onSelectMailboxFolderClick) { - this._onSelectMailboxFolderClick = onSelectMailboxFolderClick; + _onSelectMailboxFolderClick = onSelectMailboxFolderClick; } Widget build() { @@ -61,14 +61,14 @@ class MailBoxFolderTileBuilder { splashColor: Colors.transparent, highlightColor: Colors.transparent), child: Container( - key: Key('mailbox_folder_tile'), + key: const Key('mailbox_folder_tile'), decoration: BoxDecoration( borderRadius: BorderRadius.circular(kIsWeb ? 10 : 0), color: backgroundColorItem ), - padding: kIsWeb ? EdgeInsets.only(left: 8, right: 4) : EdgeInsets.zero, + padding: kIsWeb ? const EdgeInsets.only(left: 8, right: 4) : EdgeInsets.zero, child: MediaQuery( - data: MediaQueryData(padding: EdgeInsets.zero), + data: const MediaQueryData(padding: EdgeInsets.zero), child: Column(children: [ ListTile( hoverColor: Colors.transparent, @@ -92,13 +92,13 @@ class MailBoxFolderTileBuilder { : _mailboxNode.item.getCountUnReadEmails().isNotEmpty && mailboxDisplayed == MailboxDisplayed.mailbox && !_mailboxNode.hasChildren() - ? SizedBox(width: 40) - : SizedBox.shrink() + ? const SizedBox(width: 40) + : const SizedBox.shrink() ), if (lastNode?.item.id != _mailboxNode.item.id && !kIsWeb) Padding( padding: EdgeInsets.only(left: allSelectMode == SelectMode.ACTIVE ? 50 : 35), - child: Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)), + child: const Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)), ]) ) ) @@ -123,10 +123,10 @@ class MailBoxFolderTileBuilder { Expanded(child: Transform( transform: Matrix4.translationValues(allSelectMode == SelectMode.ACTIVE ? -16.0 : -20.0, 0.0, 0.0), child: Text( - '${_mailboxNode.item.name?.name ?? ''}', + _mailboxNode.item.name?.name ?? '', maxLines: 1, overflow: TextOverflow.ellipsis, - style: TextStyle(fontSize: 15, color: AppColor.colorNameEmail, fontWeight: FontWeight.normal), + style: const TextStyle(fontSize: 15, color: AppColor.colorNameEmail, fontWeight: FontWeight.normal), ))), if (_mailboxNode.item.getCountUnReadEmails().isNotEmpty && mailboxDisplayed == MailboxDisplayed.mailbox) Transform(transform: Matrix4.translationValues(25.0, 0.0, 0.0), child: _buildCounter()) @@ -136,10 +136,10 @@ class MailBoxFolderTileBuilder { Widget _buildCounter() { return Text( - '${_mailboxNode.item.getCountUnReadEmails()}', + _mailboxNode.item.getCountUnReadEmails(), maxLines: 1, overflow: TextOverflow.ellipsis, - style: TextStyle(fontSize: 13, color: Colors.black, fontWeight: FontWeight.normal), + style: const TextStyle(fontSize: 13, color: Colors.black, fontWeight: FontWeight.normal), ); } @@ -152,11 +152,11 @@ class MailBoxFolderTileBuilder { onHover: (value) => setState(() => isHoverIcon = value), child: isHoverIcon ? _buildSelectModeIcon() - : SvgPicture.asset('${_mailboxNode.item.getMailboxIcon(_imagePaths)}', width: 28, height: 28, fit: BoxFit.fill) + : SvgPicture.asset(_mailboxNode.item.getMailboxIcon(_imagePaths), width: 28, height: 28, fit: BoxFit.fill) ); }); } else { - return SvgPicture.asset('${_mailboxNode.item.getMailboxIcon(_imagePaths)}', width: 28, height: 28, fit: BoxFit.fill); + return SvgPicture.asset(_mailboxNode.item.getMailboxIcon(_imagePaths), width: 28, height: 28, fit: BoxFit.fill); } } diff --git a/lib/features/mailbox/presentation/widgets/mailbox_search_tile_builder.dart b/lib/features/mailbox/presentation/widgets/mailbox_search_tile_builder.dart index 2027a7453..1246b558d 100644 --- a/lib/features/mailbox/presentation/widgets/mailbox_search_tile_builder.dart +++ b/lib/features/mailbox/presentation/widgets/mailbox_search_tile_builder.dart @@ -43,10 +43,10 @@ class MailboxSearchTileBuilder { splashColor: Colors.transparent, highlightColor: Colors.transparent), child: Container( - key: Key('mailbox_list_tile'), + key: const Key('mailbox_list_tile'), alignment: Alignment.center, child: MediaQuery( - data: MediaQueryData(padding: EdgeInsets.zero), + data: const MediaQueryData(padding: EdgeInsets.zero), child: Column(children: [ ListTile( contentPadding: EdgeInsets.zero, @@ -62,10 +62,10 @@ class MailboxSearchTileBuilder { Expanded(child: Transform( transform: Matrix4.translationValues(allSelectMode == SelectMode.ACTIVE ? -16.0 : -20.0, 0.0, 0.0), child: Text( - '${_presentationMailbox.name?.name ?? ''}', + _presentationMailbox.name?.name ?? '', maxLines: 1, overflow:TextOverflow.ellipsis, - style: TextStyle(fontSize: 17, color: AppColor.colorNameEmail, fontWeight: FontWeight.normal), + style: const TextStyle(fontSize: 17, color: AppColor.colorNameEmail, fontWeight: FontWeight.normal), ))), ]), subtitle: _presentationMailbox.mailboxPath?.isNotEmpty == true @@ -75,7 +75,7 @@ class MailboxSearchTileBuilder { _presentationMailbox.mailboxPath ?? '', maxLines: 1, overflow:TextOverflow.ellipsis, - style: TextStyle(fontSize: 13, color: AppColor.colorContentEmail), + style: const TextStyle(fontSize: 13, color: AppColor.colorContentEmail), ), ) : null, @@ -83,7 +83,7 @@ class MailboxSearchTileBuilder { if (lastMailbox?.id != _presentationMailbox.id && !kIsWeb) Padding( padding: EdgeInsets.only(left: allSelectMode == SelectMode.ACTIVE ? 50 : 35), - child: Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)), + child: const Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)), ]), ) ) @@ -107,11 +107,11 @@ class MailboxSearchTileBuilder { onHover: (value) => setState(() => isHoverIcon = value), child: isHoverIcon ? _buildSelectModeIcon() - : SvgPicture.asset('${_presentationMailbox.getMailboxIcon(_imagePaths)}', width: 28, height: 28, fit: BoxFit.fill) + : SvgPicture.asset(_presentationMailbox.getMailboxIcon(_imagePaths), width: 28, height: 28, fit: BoxFit.fill) ); }); } else { - return SvgPicture.asset('${_presentationMailbox.getMailboxIcon(_imagePaths)}', width: 28, height: 28, fit: BoxFit.fill); + return SvgPicture.asset(_presentationMailbox.getMailboxIcon(_imagePaths), width: 28, height: 28, fit: BoxFit.fill); } } diff --git a/lib/features/mailbox/presentation/widgets/search_form_widget_builder.dart b/lib/features/mailbox/presentation/widgets/search_form_widget_builder.dart index 9c4de70e9..3e44f6a60 100644 --- a/lib/features/mailbox/presentation/widgets/search_form_widget_builder.dart +++ b/lib/features/mailbox/presentation/widgets/search_form_widget_builder.dart @@ -24,7 +24,7 @@ class SearchFormWidgetBuilder { Widget build() { return Container( - key: Key('search_folder_form'), + key: const Key('search_folder_form'), alignment: Alignment.center, decoration: BoxDecoration( borderRadius: BorderRadius.circular(16), @@ -38,23 +38,23 @@ class SearchFormWidgetBuilder { border: InputBorder.none, focusedBorder: InputBorder.none, enabledBorder: InputBorder.none, - contentPadding: EdgeInsets.only(left: 0, top: 15, bottom: 15, right: 15), + contentPadding: const EdgeInsets.only(left: 0, top: 15, bottom: 15, right: 15), hintText: AppLocalizations.of(_context).search_folder, - hintStyle: TextStyle(color: AppColor.searchHintTextColor, fontSize: 15.0, fontWeight: FontWeight.w500), + hintStyle: const TextStyle(color: AppColor.searchHintTextColor, fontSize: 15.0, fontWeight: FontWeight.w500), icon: Padding( - padding: EdgeInsets.only(left: 20), + padding: const EdgeInsets.only(left: 20), child: SvgPicture.asset(_imagePaths.icSearch, width: 24, height: 24, fit: BoxFit.fill), ))), - debounceDuration: Duration(milliseconds: 300), + debounceDuration: const Duration(milliseconds: 300), suggestionsCallback: (pattern) async { if (_onNewSearchQuery != null) { _onNewSearchQuery!(pattern); } return []; }, - itemBuilder: (BuildContext context, itemData) => SizedBox.shrink(), + itemBuilder: (BuildContext context, itemData) => const SizedBox.shrink(), onSuggestionSelected: (suggestion) {}, - noItemsFoundBuilder: (context) => SizedBox(), + noItemsFoundBuilder: (context) => const SizedBox(), hideOnEmpty: true, hideOnError: true, hideOnLoading: true, diff --git a/lib/features/mailbox/presentation/widgets/storage_widget_builder.dart b/lib/features/mailbox/presentation/widgets/storage_widget_builder.dart index 1459a4ded..aade47ad9 100644 --- a/lib/features/mailbox/presentation/widgets/storage_widget_builder.dart +++ b/lib/features/mailbox/presentation/widgets/storage_widget_builder.dart @@ -12,8 +12,8 @@ class StorageWidgetBuilder { Widget build() { return Container( - key: Key('storage_widget'), - padding: EdgeInsets.only(left: 40, top: 16, bottom: 20, right: 40), + key: const Key('storage_widget'), + padding: const EdgeInsets.only(left: 40, top: 16, bottom: 20, right: 40), color: AppColor.storageBackgroundColor, alignment: Alignment.bottomLeft, height: 100, @@ -24,11 +24,11 @@ class StorageWidgetBuilder { Text( AppLocalizations.of(_context).storage, maxLines: 1, - style: TextStyle(fontSize: 12, color: AppColor.storageTitleColor, fontWeight: FontWeight.w500)), + style: const TextStyle(fontSize: 12, color: AppColor.storageTitleColor, fontWeight: FontWeight.w500)), Padding( - padding: EdgeInsets.only(top: 8.0), + padding: const EdgeInsets.only(top: 8.0), child: RichText( - text: TextSpan( + text: const TextSpan( style: TextStyle(fontSize: 16, color: AppColor.storageMaxSizeColor, fontWeight: FontWeight.w700), children: [ TextSpan( diff --git a/lib/features/mailbox/presentation/widgets/user_information_widget_builder.dart b/lib/features/mailbox/presentation/widgets/user_information_widget_builder.dart index c27e38146..dba9e9c59 100644 --- a/lib/features/mailbox/presentation/widgets/user_information_widget_builder.dart +++ b/lib/features/mailbox/presentation/widgets/user_information_widget_builder.dart @@ -28,7 +28,7 @@ class UserInformationWidgetBuilder { Widget build() { return Container( - key: Key('user_information_widget'), + key: const Key('user_information_widget'), color: Colors.transparent, padding: EdgeInsets.zero, margin: EdgeInsets.zero, @@ -37,7 +37,7 @@ class UserInformationWidgetBuilder { ..text(_userProfile != null ? _userProfile!.getAvatarText() : '') ..backgroundColor(Colors.white) ..textColor(Colors.black) - ..addBoxShadows([BoxShadow( + ..addBoxShadows([const BoxShadow( color: AppColor.colorShadowBgContentEmail, spreadRadius: 1, blurRadius: 1, offset: Offset(0, 0.5))]) ..size(GetPlatform.isWeb ? 48 : 56)) @@ -47,16 +47,16 @@ class UserInformationWidgetBuilder { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.only(left: 16, top: 10), + padding: const EdgeInsets.only(left: 16, top: 10), child: Text( _userProfile != null ? '${_userProfile?.email}' : '', maxLines: 1, overflow: GetPlatform.isWeb ? TextOverflow.clip : TextOverflow.ellipsis, - style: TextStyle(fontSize: 17, color: AppColor.colorNameEmail, fontWeight: FontWeight.w600) + style: const TextStyle(fontSize: 17, color: AppColor.colorNameEmail, fontWeight: FontWeight.w600) ) ), Padding( - padding: EdgeInsets.only(left: 10), + padding: const EdgeInsets.only(left: 10), child: Material( borderRadius: BorderRadius.circular(20), color: Colors.transparent, @@ -66,7 +66,7 @@ class UserInformationWidgetBuilder { onPressed: () => _onLogoutActionClick?.call(), child: Text( AppLocalizations.of(_context).logout, - style: TextStyle(fontSize: 14, color: AppColor.colorTextButton), + style: const TextStyle(fontSize: 14, color: AppColor.colorTextButton), ), ) )