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