From 8a931019ed6a8e8484656021b4d0ea8d64024144 Mon Sep 17 00:00:00 2001 From: ManhNTX Date: Thu, 27 Oct 2022 18:02:00 +0700 Subject: [PATCH] TF-996: add previous / Next message of a mailbox on Web --- assets/images/ic_newer.svg | 5 +++ assets/images/ic_older.svg | 5 +++ .../presentation/resources/image_paths.dart | 2 ++ .../email/presentation/email_controller.dart | 20 +++++++++++ .../email/presentation/email_view.dart | 34 ++++++++++++++++--- .../widgets/app_bar_mail_widget_builder.dart | 4 +++ lib/l10n/intl_messages.arb | 12 +++++++ lib/main/localizations/app_localizations.dart | 12 +++++++ 8 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 assets/images/ic_newer.svg create mode 100644 assets/images/ic_older.svg diff --git a/assets/images/ic_newer.svg b/assets/images/ic_newer.svg new file mode 100644 index 000000000..04066f60d --- /dev/null +++ b/assets/images/ic_newer.svg @@ -0,0 +1,5 @@ + + + diff --git a/assets/images/ic_older.svg b/assets/images/ic_older.svg new file mode 100644 index 000000000..1d69a20aa --- /dev/null +++ b/assets/images/ic_older.svg @@ -0,0 +1,5 @@ + + + diff --git a/core/lib/presentation/resources/image_paths.dart b/core/lib/presentation/resources/image_paths.dart index 7fbbeb054..e08929e29 100644 --- a/core/lib/presentation/resources/image_paths.dart +++ b/core/lib/presentation/resources/image_paths.dart @@ -167,6 +167,8 @@ class ImagePaths { String get icRequestReadReceipt => _getImagePath('ic_request_read_receipt.svg'); String get icReadReceiptMessage => _getImagePath('ic_read_receipt_message.svg'); String get icCreateNewFolder => _getImagePath('ic_create_new_folder.svg'); + String get icOlder => _getImagePath('ic_older.svg'); + String get icNewer => _getImagePath('ic_newer.svg'); String _getImagePath(String imageName) { return AssetsPaths.images + imageName; diff --git a/lib/features/email/presentation/email_controller.dart b/lib/features/email/presentation/email_controller.dart index 0c9b19f24..8ee8c93f7 100644 --- a/lib/features/email/presentation/email_controller.dart +++ b/lib/features/email/presentation/email_controller.dart @@ -93,6 +93,9 @@ class EmailController extends BaseController with AppLoaderMixin { late Worker emailWorker; final Map presentationEmailsLoaded = {}; PageController? pageController; + int currentIndexPageView = 0; + final canGetNewerEmail = true.obs; + final canGetOlderEmail = true.obs; final StreamController> _downloadProgressStateController = StreamController>.broadcast(); Stream> get downloadProgressState => _downloadProgressStateController.stream; @@ -144,12 +147,29 @@ class EmailController extends BaseController with AppLoaderMixin { void _setCurrentPositionEmailInListEmail() { pageController ??= PageController(initialPage: mailboxDashBoardController.emailList.indexOf(mailboxDashBoardController.selectedEmail.value)); + currentIndexPageView = mailboxDashBoardController.emailList.indexOf(mailboxDashBoardController.selectedEmail.value); + _checkEnableNavigatorPageView(); } void onPageChanged(int index) { mailboxDashBoardController.selectedEmail.value = mailboxDashBoardController.emailList[index]; } + void _checkEnableNavigatorPageView() { + canGetNewerEmail.value = currentIndexPageView > 0; + canGetOlderEmail.value = mailboxDashBoardController.emailList.length > 1 && currentIndexPageView < mailboxDashBoardController.emailList.length - 1; + } + + void getNewerEmail() { + currentIndexPageView = currentIndexPageView - 1; + pageController?.jumpToPage(currentIndexPageView); + } + + void getOlderEmail() { + currentIndexPageView = currentIndexPageView + 1; + pageController?.jumpToPage(currentIndexPageView); + } + void _initWorker() { emailWorker = ever(mailboxDashBoardController.selectedEmail, (presentationEmail) { log('EmailController::_initWorker(): $presentationEmail'); diff --git a/lib/features/email/presentation/email_view.dart b/lib/features/email/presentation/email_view.dart index 51251907e..1b95f4c0d 100644 --- a/lib/features/email/presentation/email_view.dart +++ b/lib/features/email/presentation/email_view.dart @@ -1,6 +1,7 @@ import 'package:core/core.dart'; import 'package:filesize/filesize.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; @@ -48,9 +49,9 @@ class EmailView extends GetWidget { child: Container( decoration: responsiveUtils.isWebDesktop(context) ? BoxDecoration( - borderRadius: BorderRadius.circular(20), - border: Border.all(color: AppColor.colorBorderBodyThread, width: 1), - color: Colors.white) + borderRadius: BorderRadius.circular(20), + border: Border.all(color: AppColor.colorBorderBodyThread, width: 1), + color: Colors.white) : const BoxDecoration(color: Colors.white), margin: _getMarginEmailView(context), child: Obx(() { @@ -91,6 +92,7 @@ class EmailView extends GetWidget { const Divider(color: AppColor.colorDividerHorizontal, height: 1), Expanded( child: PageView.builder( + physics: kIsWeb ? const NeverScrollableScrollPhysics() : null, itemCount: controller.mailboxDashBoardController.emailList.length, controller: controller.pageController, onPageChanged: controller.onPageChanged, @@ -153,10 +155,34 @@ class EmailView extends GetWidget { position, _popupMenuEmailActionTile(context, email)); } - } + }, + optionsWidget: kIsWeb ? _buildNavigatorPageViewWidgets(context) : null, )); } + List _buildNavigatorPageViewWidgets(BuildContext context) { + return [ + buildIconWeb( + icon: SvgPicture.asset( + imagePaths.icNewer, + color: controller.canGetNewerEmail.value ? AppColor.primaryColor : AppColor.colorAttachmentIcon, + width: IconUtils.defaultIconSize, + height: IconUtils.defaultIconSize, + fit: BoxFit.fill), + tooltip: AppLocalizations.of(context).newer, + onTap: controller.canGetNewerEmail.value ? controller.getNewerEmail : null), + buildIconWeb( + icon: SvgPicture.asset( + imagePaths.icOlder, + width: IconUtils.defaultIconSize, + height: IconUtils.defaultIconSize, + color: controller.canGetOlderEmail.value ? AppColor.primaryColor : AppColor.colorAttachmentIcon, + fit: BoxFit.fill), + tooltip: AppLocalizations.of(context).older, + onTap: controller.canGetOlderEmail.value ? controller.getOlderEmail : null), + ]; + } + Widget _buildBottomBar(BuildContext context, PresentationEmail presentationEmail) { return BottomBarMailWidgetBuilder( presentationEmail, diff --git a/lib/features/email/presentation/widgets/app_bar_mail_widget_builder.dart b/lib/features/email/presentation/widgets/app_bar_mail_widget_builder.dart index 7a8323169..f0862a789 100644 --- a/lib/features/email/presentation/widgets/app_bar_mail_widget_builder.dart +++ b/lib/features/email/presentation/widgets/app_bar_mail_widget_builder.dart @@ -15,6 +15,7 @@ class AppBarMailWidgetBuilder extends StatelessWidget { final _responsiveUtils = Get.find(); final PresentationEmail _presentationEmail; + final List? optionsWidget; final PresentationMailbox? currentMailbox; final bool isSearchIsRunning; final OnBackActionClick? onBackActionClick; @@ -29,6 +30,7 @@ class AppBarMailWidgetBuilder extends StatelessWidget { this.onBackActionClick, this.onEmailActionClick, this.onMoreActionClick, + this.optionsWidget, this.isSearchIsRunning = false, } ) : super(key: key); @@ -102,6 +104,8 @@ class AppBarMailWidgetBuilder extends StatelessWidget { Widget _buildListOptionButton(BuildContext context) { return Row( children: [ + if(optionsWidget != null) + ...optionsWidget!, buildIconWeb( icon: SvgPicture.asset( _imagePaths.icMoveEmail, diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index 9fb7ba7e0..6a84665f2 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -2400,10 +2400,22 @@ "placeholders_order": [], "placeholders": {} }, + "newer": "Newer", + "@newer": { + "type": "text", + "placeholders_order": [], + "placeholders": {} + }, "createNewMailbox": "Create new mailbox", "@createNewMailbox": { "type": "text", "placeholders_order": [], "placeholders": {} + }, + "older": "Older", + "@older": { + "type": "text", + "placeholders_order": [], + "placeholders": {} } } \ No newline at end of file diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index 9f7670402..514df2f0a 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -2475,4 +2475,16 @@ class AppLocalizations { 'Create new mailbox', name: 'createNewMailbox'); } + + String get newer { + return Intl.message( + 'Newer', + name: 'newer'); + } + + String get older { + return Intl.message( + 'Older', + name: 'older'); + } } \ No newline at end of file