TF-996: add previous / Next message of a mailbox on Web

This commit is contained in:
ManhNTX
2022-10-27 18:02:00 +07:00
committed by Dat H. Pham
parent bc102dd9ec
commit 8a931019ed
8 changed files with 90 additions and 4 deletions
+5
View File
@@ -0,0 +1,5 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M10.6409 12.0001L15.6062 7.03477C15.9409 6.70003 15.9409 6.15732 15.6062 5.82258C15.2715 5.48785 14.7287 5.48785 14.394 5.82258L8.82258 11.394C8.48785 11.7287 8.48785 12.2715 8.82258 12.6062L14.394 18.1776C14.7287 18.5124 15.2715 18.5124 15.6062 18.1776C15.9409 17.8429 15.9409 17.3002 15.6062 16.9654L10.6409 12.0001Z"
fill="#007AFF" />
</svg>

After

Width:  |  Height:  |  Size: 470 B

+5
View File
@@ -0,0 +1,5 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M13.7879 12.0001L8.82258 16.9654C8.48785 17.3002 8.48785 17.8429 8.82258 18.1776C9.15732 18.5124 9.70003 18.5124 10.0348 18.1776L15.6062 12.6062C15.9409 12.2715 15.9409 11.7287 15.6062 11.394L10.0348 5.82258C9.70003 5.48785 9.15732 5.48785 8.82258 5.82258C8.48785 6.15732 8.48785 6.70003 8.82258 7.03477L13.7879 12.0001Z"
fill="#007AFF" />
</svg>

After

Width:  |  Height:  |  Size: 472 B

@@ -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;
@@ -93,6 +93,9 @@ class EmailController extends BaseController with AppLoaderMixin {
late Worker emailWorker;
final Map<EmailId, EmailLoaded> presentationEmailsLoaded = {};
PageController? pageController;
int currentIndexPageView = 0;
final canGetNewerEmail = true.obs;
final canGetOlderEmail = true.obs;
final StreamController<Either<Failure, Success>> _downloadProgressStateController =
StreamController<Either<Failure, Success>>.broadcast();
Stream<Either<Failure, Success>> 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');
@@ -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<EmailController> {
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<EmailController> {
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<EmailController> {
position,
_popupMenuEmailActionTile(context, email));
}
}
},
optionsWidget: kIsWeb ? _buildNavigatorPageViewWidgets(context) : null,
));
}
List<Widget> _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,
@@ -15,6 +15,7 @@ class AppBarMailWidgetBuilder extends StatelessWidget {
final _responsiveUtils = Get.find<ResponsiveUtils>();
final PresentationEmail _presentationEmail;
final List<Widget>? 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,
+12
View File
@@ -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": {}
}
}
@@ -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');
}
}