TF-996: add previous / Next message of a mailbox on Web
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user