TF-1831 Handle system back button in Email Detailed View
Signed-off-by: dab246 <tdvu@linagora.com> (cherry picked from commit 974cb71071e0cb870f0f9a74100bfa557cf3700b)
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
|
||||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||||
|
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||||
|
|
||||||
class EmailUIAction extends UIAction {
|
class EmailUIAction extends UIAction {
|
||||||
static final idle = EmailUIAction();
|
static final idle = EmailUIAction();
|
||||||
@@ -20,4 +20,6 @@ class RefreshChangeEmailAction extends EmailUIAction {
|
|||||||
List<Object?> get props => [newState];
|
List<Object?> get props => [newState];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class CloseEmailDetailedViewToRedirectToTheInboxAction extends EmailUIAction {}
|
||||||
|
|
||||||
class CloseEmailDetailedViewAction extends EmailUIAction {}
|
class CloseEmailDetailedViewAction extends EmailUIAction {}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:better_open_file/better_open_file.dart' as open_file;
|
||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
@@ -19,7 +20,6 @@ import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/mdn/disposition.dart';
|
import 'package:jmap_dart_client/jmap/mdn/disposition.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mdn/mdn.dart';
|
import 'package:jmap_dart_client/jmap/mdn/mdn.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:better_open_file/better_open_file.dart' as open_file;
|
|
||||||
import 'package:permission_handler/permission_handler.dart';
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||||
import 'package:share_plus/share_plus.dart';
|
import 'package:share_plus/share_plus.dart';
|
||||||
@@ -31,14 +31,6 @@ import 'package:tmail_ui_user/features/email/domain/extensions/list_attachments_
|
|||||||
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/parse_calendar_event_state.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/unsubscribe_email_state.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/parse_calendar_event_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/presentation/bindings/calendar_event_interactor_bindings.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/presentation/model/email_loaded.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/send_receipt_to_sender_request.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/send_receipt_to_sender_request.dart';
|
||||||
@@ -49,7 +41,9 @@ import 'package:tmail_ui_user/features/email/domain/state/get_email_content_stat
|
|||||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_star_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/domain/state/parse_calendar_event_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/send_receipt_to_sender_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/send_receipt_to_sender_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/domain/state/unsubscribe_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/download_attachment_for_web_interactor.dart';
|
import 'package:tmail_ui_user/features/email/domain/usecases/download_attachment_for_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/download_attachments_interactor.dart';
|
import 'package:tmail_ui_user/features/email/domain/usecases/download_attachments_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/export_attachment_interactor.dart';
|
import 'package:tmail_ui_user/features/email/domain/usecases/export_attachment_interactor.dart';
|
||||||
@@ -57,8 +51,14 @@ import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_i
|
|||||||
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart';
|
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart';
|
import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart';
|
import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/domain/usecases/parse_calendar_event_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/usecases/send_receipt_to_sender_interactor.dart';
|
import 'package:tmail_ui_user/features/email/domain/usecases/send_receipt_to_sender_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/presentation/bindings/calendar_event_interactor_bindings.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/presentation/model/email_loaded.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/model/email_unsubscribe.dart';
|
import 'package:tmail_ui_user/features/email/presentation/model/email_unsubscribe.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
|
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/attachment_list/attachment_list_bottom_sheet_builder.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/attachment_list/attachment_list_bottom_sheet_builder.dart';
|
||||||
@@ -223,7 +223,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
);
|
);
|
||||||
|
|
||||||
ever(mailboxDashBoardController.emailUIAction, (action) {
|
ever(mailboxDashBoardController.emailUIAction, (action) {
|
||||||
if (action is CloseEmailDetailedViewAction) {
|
if (action is CloseEmailDetailedViewToRedirectToTheInboxAction) {
|
||||||
if (emailSupervisorController.supportedPageView.isTrue) {
|
if (emailSupervisorController.supportedPageView.isTrue) {
|
||||||
emailSupervisorController.popEmailQueue(_currentEmailId);
|
emailSupervisorController.popEmailQueue(_currentEmailId);
|
||||||
emailSupervisorController.setCurrentEmailIndex(-1);
|
emailSupervisorController.setCurrentEmailIndex(-1);
|
||||||
@@ -234,6 +234,9 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
mailboxDashBoardController.clearSelectedEmail();
|
mailboxDashBoardController.clearSelectedEmail();
|
||||||
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
|
mailboxDashBoardController.dispatchRoute(DashboardRoutes.thread);
|
||||||
mailboxDashBoardController.clearEmailUIAction();
|
mailboxDashBoardController.clearEmailUIAction();
|
||||||
|
} else if (action is CloseEmailDetailedViewAction && currentContext != null) {
|
||||||
|
closeEmailView(currentContext!);
|
||||||
|
mailboxDashBoardController.clearEmailUIAction();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -21,14 +21,14 @@ import 'package:tmail_ui_user/features/composer/presentation/extensions/email_ac
|
|||||||
import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
|
import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/extensions/calendar_event_extension.dart';
|
import 'package:tmail_ui_user/features/email/presentation/extensions/calendar_event_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/styles/email_view_styles.dart';
|
import 'package:tmail_ui_user/features/email/presentation/styles/email_view_styles.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_app_bar_widget.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_bottom_bar_widget.dart';
|
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/calendar_event_action_banner_widget.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/calendar_event_action_banner_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/calendar_event_detail_widget.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/calendar_event_detail_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/calendar_event_information_widget.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/calendar_event_information_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_attachments_widget.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/email_attachments_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_subject_widget.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/email_subject_widget.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_app_bar_widget.dart';
|
||||||
|
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_bottom_bar_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_empty_widget.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_empty_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_loading_bar_widget.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_loading_bar_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/information_sender_and_receiver_builder.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/information_sender_and_receiver_builder.dart';
|
||||||
@@ -45,208 +45,205 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return WillPopScope(
|
return Scaffold(
|
||||||
onWillPop: () => controller.backButtonPressedCallbackAction.call(context),
|
backgroundColor: controller.responsiveUtils.isWebDesktop(context)
|
||||||
child: Scaffold(
|
? AppColor.colorBgDesktop
|
||||||
backgroundColor: controller.responsiveUtils.isWebDesktop(context)
|
: Colors.white,
|
||||||
? AppColor.colorBgDesktop
|
appBar: PlatformInfo.isIOS
|
||||||
: Colors.white,
|
? PreferredSize(
|
||||||
appBar: PlatformInfo.isIOS
|
preferredSize: const Size(double.infinity, 100),
|
||||||
? PreferredSize(
|
|
||||||
preferredSize: const Size(double.infinity, 100),
|
|
||||||
child: Obx(() {
|
|
||||||
if (controller.currentEmail != null) {
|
|
||||||
return SafeArea(
|
|
||||||
top: false,
|
|
||||||
bottom: false,
|
|
||||||
child: EmailViewAppBarWidget(
|
|
||||||
key: const Key('email_view_app_bar_widget'),
|
|
||||||
presentationEmail: controller.currentEmail!,
|
|
||||||
mailboxContain: _getMailboxContain(controller.currentEmail!),
|
|
||||||
isSearchActivated: controller.mailboxDashBoardController.searchController.isSearchEmailRunning,
|
|
||||||
onBackAction: () => controller.closeEmailView(context),
|
|
||||||
onEmailActionClick: (email, action) => controller.handleEmailAction(context, email, action),
|
|
||||||
onMoreActionClick: (presentationEmail, position) => _handleMoreEmailAction(context: context, presentationEmail: presentationEmail, position: position)
|
|
||||||
),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return const SizedBox.shrink();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
)
|
|
||||||
: null,
|
|
||||||
body: SafeArea(
|
|
||||||
right: controller.responsiveUtils.isLandscapeMobile(context),
|
|
||||||
left: controller.responsiveUtils.isLandscapeMobile(context),
|
|
||||||
bottom: !PlatformInfo.isIOS,
|
|
||||||
child: Container(
|
|
||||||
clipBehavior: Clip.antiAlias,
|
|
||||||
decoration: controller.responsiveUtils.isWebDesktop(context)
|
|
||||||
? BoxDecoration(
|
|
||||||
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(() {
|
child: Obx(() {
|
||||||
final currentEmail = controller.currentEmail;
|
if (controller.currentEmail != null) {
|
||||||
if (currentEmail != null) {
|
return SafeArea(
|
||||||
return Column(children: [
|
top: false,
|
||||||
if (!PlatformInfo.isIOS)
|
bottom: false,
|
||||||
Obx(() => EmailViewAppBarWidget(
|
child: EmailViewAppBarWidget(
|
||||||
key: const Key('email_view_app_bar_widget'),
|
key: const Key('email_view_app_bar_widget'),
|
||||||
presentationEmail: currentEmail,
|
presentationEmail: controller.currentEmail!,
|
||||||
mailboxContain: _getMailboxContain(currentEmail),
|
mailboxContain: _getMailboxContain(controller.currentEmail!),
|
||||||
isSearchActivated: controller.mailboxDashBoardController.searchController.isSearchEmailRunning,
|
isSearchActivated: controller.mailboxDashBoardController.searchController.isSearchEmailRunning,
|
||||||
onBackAction: () => controller.closeEmailView(context),
|
onBackAction: () => controller.closeEmailView(context),
|
||||||
onEmailActionClick: (email, action) => controller.handleEmailAction(context, email, action),
|
onEmailActionClick: (email, action) => controller.handleEmailAction(context, email, action),
|
||||||
onMoreActionClick: (presentationEmail, position) => _handleMoreEmailAction(context: context, presentationEmail: presentationEmail, position: position),
|
onMoreActionClick: (presentationEmail, position) => _handleMoreEmailAction(context: context, presentationEmail: presentationEmail, position: position)
|
||||||
optionsWidget: PlatformInfo.isWeb && controller.emailSupervisorController.supportedPageView.isTrue
|
|
||||||
? _buildNavigatorPageViewWidgets(context)
|
|
||||||
: null,
|
|
||||||
)),
|
|
||||||
Obx(() {
|
|
||||||
final vacation = controller.mailboxDashBoardController.vacationResponse.value;
|
|
||||||
if (vacation?.vacationResponderIsValid == true &&
|
|
||||||
(
|
|
||||||
controller.responsiveUtils.isMobile(context) ||
|
|
||||||
controller.responsiveUtils.isTablet(context) ||
|
|
||||||
controller.responsiveUtils.isLandscapeMobile(context)
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
return VacationNotificationMessageWidget(
|
|
||||||
margin: const EdgeInsets.only(left: 12, right: 12, bottom: 5),
|
|
||||||
vacationResponse: vacation!,
|
|
||||||
actionGotoVacationSetting: controller.mailboxDashBoardController.goToVacationSetting,
|
|
||||||
actionEndNow: controller.mailboxDashBoardController.disableVacationResponder
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return const SizedBox.shrink();
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
Expanded(
|
|
||||||
child: Obx(() {
|
|
||||||
if (controller.emailSupervisorController.supportedPageView.isTrue) {
|
|
||||||
final currentListEmail = controller.emailSupervisorController.currentListEmail;
|
|
||||||
return PageView.builder(
|
|
||||||
physics: controller.emailSupervisorController.scrollPhysicsPageView.value,
|
|
||||||
itemCount: currentListEmail.length,
|
|
||||||
allowImplicitScrolling: true,
|
|
||||||
controller: controller.emailSupervisorController.pageController,
|
|
||||||
onPageChanged: controller.emailSupervisorController.onPageChanged,
|
|
||||||
itemBuilder: (context, index) {
|
|
||||||
final currentEmail = currentListEmail[index];
|
|
||||||
if (PlatformInfo.isMobile) {
|
|
||||||
return SingleChildScrollView(
|
|
||||||
physics : const ClampingScrollPhysics(),
|
|
||||||
child: Container(
|
|
||||||
width: double.infinity,
|
|
||||||
alignment: Alignment.center,
|
|
||||||
color: Colors.white,
|
|
||||||
child: Obx(() => _buildEmailMessage(
|
|
||||||
context: context,
|
|
||||||
presentationEmail: currentEmail,
|
|
||||||
calendarEvent: controller.calendarEvent.value,
|
|
||||||
))
|
|
||||||
)
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return Obx(() {
|
|
||||||
final calendarEvent = controller.calendarEvent.value;
|
|
||||||
if (currentEmail.hasCalendarEvent && calendarEvent != null) {
|
|
||||||
return Padding(
|
|
||||||
padding: const EdgeInsetsDirectional.symmetric(horizontal: 4),
|
|
||||||
child: ScrollbarListView(
|
|
||||||
scrollController: controller.emailContentScrollController,
|
|
||||||
child: SingleChildScrollView(
|
|
||||||
physics : const ClampingScrollPhysics(),
|
|
||||||
controller: controller.emailContentScrollController,
|
|
||||||
child: Container(
|
|
||||||
width: double.infinity,
|
|
||||||
alignment: Alignment.center,
|
|
||||||
color: Colors.white,
|
|
||||||
child: _buildEmailMessage(
|
|
||||||
context: context,
|
|
||||||
presentationEmail: currentEmail,
|
|
||||||
calendarEvent: calendarEvent,
|
|
||||||
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return _buildEmailMessage(
|
|
||||||
context: context,
|
|
||||||
presentationEmail: currentEmail,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
if (PlatformInfo.isMobile) {
|
|
||||||
return SingleChildScrollView(
|
|
||||||
physics : const ClampingScrollPhysics(),
|
|
||||||
child: Container(
|
|
||||||
width: double.infinity,
|
|
||||||
alignment: Alignment.center,
|
|
||||||
color: Colors.white,
|
|
||||||
child: Obx(() => _buildEmailMessage(
|
|
||||||
context: context,
|
|
||||||
presentationEmail: currentEmail,
|
|
||||||
calendarEvent: controller.calendarEvent.value,
|
|
||||||
))
|
|
||||||
)
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return Obx(() {
|
|
||||||
final calendarEvent = controller.calendarEvent.value;
|
|
||||||
if (currentEmail.hasCalendarEvent && calendarEvent != null) {
|
|
||||||
return Padding(
|
|
||||||
padding: const EdgeInsetsDirectional.symmetric(horizontal: 4),
|
|
||||||
child: ScrollbarListView(
|
|
||||||
scrollController: controller.emailContentScrollController,
|
|
||||||
child: SingleChildScrollView(
|
|
||||||
physics : const ClampingScrollPhysics(),
|
|
||||||
controller: controller.emailContentScrollController,
|
|
||||||
child: Container(
|
|
||||||
width: double.infinity,
|
|
||||||
alignment: Alignment.center,
|
|
||||||
color: Colors.white,
|
|
||||||
child: _buildEmailMessage(
|
|
||||||
context: context,
|
|
||||||
presentationEmail: currentEmail,
|
|
||||||
calendarEvent: calendarEvent,
|
|
||||||
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return _buildEmailMessage(
|
|
||||||
context: context,
|
|
||||||
presentationEmail: currentEmail,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
EmailViewBottomBarWidget(
|
);
|
||||||
key: const Key('email_view_button_bar'),
|
|
||||||
presentationEmail: currentEmail,
|
|
||||||
emailActionCallback: controller.pressEmailAction
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
} else {
|
} else {
|
||||||
return const EmailViewEmptyWidget();
|
return const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
: null,
|
||||||
|
body: SafeArea(
|
||||||
|
right: controller.responsiveUtils.isLandscapeMobile(context),
|
||||||
|
left: controller.responsiveUtils.isLandscapeMobile(context),
|
||||||
|
bottom: !PlatformInfo.isIOS,
|
||||||
|
child: Container(
|
||||||
|
clipBehavior: Clip.antiAlias,
|
||||||
|
decoration: controller.responsiveUtils.isWebDesktop(context)
|
||||||
|
? BoxDecoration(
|
||||||
|
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(() {
|
||||||
|
final currentEmail = controller.currentEmail;
|
||||||
|
if (currentEmail != null) {
|
||||||
|
return Column(children: [
|
||||||
|
if (!PlatformInfo.isIOS)
|
||||||
|
Obx(() => EmailViewAppBarWidget(
|
||||||
|
key: const Key('email_view_app_bar_widget'),
|
||||||
|
presentationEmail: currentEmail,
|
||||||
|
mailboxContain: _getMailboxContain(currentEmail),
|
||||||
|
isSearchActivated: controller.mailboxDashBoardController.searchController.isSearchEmailRunning,
|
||||||
|
onBackAction: () => controller.closeEmailView(context),
|
||||||
|
onEmailActionClick: (email, action) => controller.handleEmailAction(context, email, action),
|
||||||
|
onMoreActionClick: (presentationEmail, position) => _handleMoreEmailAction(context: context, presentationEmail: presentationEmail, position: position),
|
||||||
|
optionsWidget: PlatformInfo.isWeb && controller.emailSupervisorController.supportedPageView.isTrue
|
||||||
|
? _buildNavigatorPageViewWidgets(context)
|
||||||
|
: null,
|
||||||
|
)),
|
||||||
|
Obx(() {
|
||||||
|
final vacation = controller.mailboxDashBoardController.vacationResponse.value;
|
||||||
|
if (vacation?.vacationResponderIsValid == true &&
|
||||||
|
(
|
||||||
|
controller.responsiveUtils.isMobile(context) ||
|
||||||
|
controller.responsiveUtils.isTablet(context) ||
|
||||||
|
controller.responsiveUtils.isLandscapeMobile(context)
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
return VacationNotificationMessageWidget(
|
||||||
|
margin: const EdgeInsets.only(left: 12, right: 12, bottom: 5),
|
||||||
|
vacationResponse: vacation!,
|
||||||
|
actionGotoVacationSetting: controller.mailboxDashBoardController.goToVacationSetting,
|
||||||
|
actionEndNow: controller.mailboxDashBoardController.disableVacationResponder
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
Expanded(
|
||||||
|
child: Obx(() {
|
||||||
|
if (controller.emailSupervisorController.supportedPageView.isTrue) {
|
||||||
|
final currentListEmail = controller.emailSupervisorController.currentListEmail;
|
||||||
|
return PageView.builder(
|
||||||
|
physics: controller.emailSupervisorController.scrollPhysicsPageView.value,
|
||||||
|
itemCount: currentListEmail.length,
|
||||||
|
allowImplicitScrolling: true,
|
||||||
|
controller: controller.emailSupervisorController.pageController,
|
||||||
|
onPageChanged: controller.emailSupervisorController.onPageChanged,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
final currentEmail = currentListEmail[index];
|
||||||
|
if (PlatformInfo.isMobile) {
|
||||||
|
return SingleChildScrollView(
|
||||||
|
physics : const ClampingScrollPhysics(),
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
color: Colors.white,
|
||||||
|
child: Obx(() => _buildEmailMessage(
|
||||||
|
context: context,
|
||||||
|
presentationEmail: currentEmail,
|
||||||
|
calendarEvent: controller.calendarEvent.value,
|
||||||
|
))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return Obx(() {
|
||||||
|
final calendarEvent = controller.calendarEvent.value;
|
||||||
|
if (currentEmail.hasCalendarEvent && calendarEvent != null) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsetsDirectional.symmetric(horizontal: 4),
|
||||||
|
child: ScrollbarListView(
|
||||||
|
scrollController: controller.emailContentScrollController,
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
physics : const ClampingScrollPhysics(),
|
||||||
|
controller: controller.emailContentScrollController,
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
color: Colors.white,
|
||||||
|
child: _buildEmailMessage(
|
||||||
|
context: context,
|
||||||
|
presentationEmail: currentEmail,
|
||||||
|
calendarEvent: calendarEvent,
|
||||||
|
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return _buildEmailMessage(
|
||||||
|
context: context,
|
||||||
|
presentationEmail: currentEmail,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
if (PlatformInfo.isMobile) {
|
||||||
|
return SingleChildScrollView(
|
||||||
|
physics : const ClampingScrollPhysics(),
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
color: Colors.white,
|
||||||
|
child: Obx(() => _buildEmailMessage(
|
||||||
|
context: context,
|
||||||
|
presentationEmail: currentEmail,
|
||||||
|
calendarEvent: controller.calendarEvent.value,
|
||||||
|
))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return Obx(() {
|
||||||
|
final calendarEvent = controller.calendarEvent.value;
|
||||||
|
if (currentEmail.hasCalendarEvent && calendarEvent != null) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsetsDirectional.symmetric(horizontal: 4),
|
||||||
|
child: ScrollbarListView(
|
||||||
|
scrollController: controller.emailContentScrollController,
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
physics : const ClampingScrollPhysics(),
|
||||||
|
controller: controller.emailContentScrollController,
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
color: Colors.white,
|
||||||
|
child: _buildEmailMessage(
|
||||||
|
context: context,
|
||||||
|
presentationEmail: currentEmail,
|
||||||
|
calendarEvent: calendarEvent,
|
||||||
|
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return _buildEmailMessage(
|
||||||
|
context: context,
|
||||||
|
presentationEmail: currentEmail,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
EmailViewBottomBarWidget(
|
||||||
|
key: const Key('email_view_button_bar'),
|
||||||
|
presentationEmail: currentEmail,
|
||||||
|
emailActionCallback: controller.pressEmailAction
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
return const EmailViewEmptyWidget();
|
||||||
|
}
|
||||||
|
})
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
+23
-1
@@ -1,6 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:back_button_interceptor/back_button_interceptor.dart';
|
||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -260,6 +261,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
_registerStreamListener();
|
_registerStreamListener();
|
||||||
|
BackButtonInterceptor.add(onBackButtonInterceptor);
|
||||||
super.onInit();
|
super.onInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2084,7 +2086,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
void redirectToInboxAction() {
|
void redirectToInboxAction() {
|
||||||
log('MailboxDashBoardController::redirectToInboxAction:');
|
log('MailboxDashBoardController::redirectToInboxAction:');
|
||||||
if (dashboardRoute.value == DashboardRoutes.emailDetailed) {
|
if (dashboardRoute.value == DashboardRoutes.emailDetailed) {
|
||||||
dispatchEmailUIAction(CloseEmailDetailedViewAction());
|
dispatchEmailUIAction(CloseEmailDetailedViewToRedirectToTheInboxAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
final inboxId = getMailboxIdByRole(PresentationMailbox.roleInbox);
|
final inboxId = getMailboxIdByRole(PresentationMailbox.roleInbox);
|
||||||
@@ -2224,6 +2226,25 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
setSelectedEmail(email.toPresentationEmail());
|
setSelectedEmail(email.toPresentationEmail());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool onBackButtonInterceptor(bool stopDefaultButtonEvent, RouteInfo routeInfo) {
|
||||||
|
log('MailboxDashBoardController::onBackButtonInterceptor:stopDefaultButtonEvent: $stopDefaultButtonEvent | routeInfo: ${routeInfo.routeWhenAdded}');
|
||||||
|
switch(dashboardRoute.value) {
|
||||||
|
case DashboardRoutes.emailDetailed:
|
||||||
|
dispatchEmailUIAction(CloseEmailDetailedViewAction());
|
||||||
|
return true;
|
||||||
|
case DashboardRoutes.thread:
|
||||||
|
if (searchController.isSearchEmailRunning) {
|
||||||
|
dispatchMailboxUIAction(SelectMailboxDefaultAction());
|
||||||
|
} else {
|
||||||
|
pushAndPopAll(AppRoutes.home);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
_emailReceiveManager.closeEmailReceiveManagerStream();
|
_emailReceiveManager.closeEmailReceiveManagerStream();
|
||||||
@@ -2234,6 +2255,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
_refreshActionEventController.close();
|
_refreshActionEventController.close();
|
||||||
_notificationManager.closeStream();
|
_notificationManager.closeStream();
|
||||||
_fcmService.closeStream();
|
_fcmService.closeStream();
|
||||||
|
BackButtonInterceptor.remove(onBackButtonInterceptor);
|
||||||
MailboxDashBoardBindings().deleteController();
|
MailboxDashBoardBindings().deleteController();
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import 'package:get/get.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/base/widget/compose_floating_button.dart';
|
|
||||||
import 'package:tmail_ui_user/features/base/mixin/popup_menu_widget_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/popup_menu_widget_mixin.dart';
|
||||||
|
import 'package:tmail_ui_user/features/base/widget/compose_floating_button.dart';
|
||||||
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
|
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart';
|
import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart';
|
||||||
@@ -48,136 +48,133 @@ class ThreadView extends GetWidget<ThreadController>
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return WillPopScope(
|
return GestureDetector(
|
||||||
onWillPop: () => controller.backButtonPressedCallbackAction(context),
|
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
|
||||||
child: GestureDetector(
|
child: Scaffold(
|
||||||
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
|
resizeToAvoidBottomInset: false,
|
||||||
child: Scaffold(
|
backgroundColor: Colors.white,
|
||||||
resizeToAvoidBottomInset: false,
|
body: Portal(
|
||||||
backgroundColor: Colors.white,
|
child: Row(children: [
|
||||||
body: Portal(
|
if (supportVerticalDivider(context))
|
||||||
child: Row(children: [
|
const VerticalDivider(color: AppColor.colorDividerVertical, width: 1),
|
||||||
if (supportVerticalDivider(context))
|
Expanded(child: SafeArea(
|
||||||
const VerticalDivider(color: AppColor.colorDividerVertical, width: 1),
|
right: controller.responsiveUtils.isLandscapeMobile(context),
|
||||||
Expanded(child: SafeArea(
|
left: controller.responsiveUtils.isLandscapeMobile(context),
|
||||||
right: controller.responsiveUtils.isLandscapeMobile(context),
|
child: Column(
|
||||||
left: controller.responsiveUtils.isLandscapeMobile(context),
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
child: Column(
|
children: [
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
if (!controller.responsiveUtils.isWebDesktop(context))
|
||||||
children: [
|
... [
|
||||||
if (!controller.responsiveUtils.isWebDesktop(context))
|
Obx(() {
|
||||||
... [
|
return AppBarThreadWidget(
|
||||||
Obx(() {
|
mailboxSelected: controller.currentMailbox,
|
||||||
return AppBarThreadWidget(
|
listEmailSelected: controller.mailboxDashBoardController.emailsInCurrentMailbox.listEmailSelected,
|
||||||
mailboxSelected: controller.currentMailbox,
|
selectMode: controller.mailboxDashBoardController.currentSelectMode.value,
|
||||||
listEmailSelected: controller.mailboxDashBoardController.emailsInCurrentMailbox.listEmailSelected,
|
filterOption: controller.mailboxDashBoardController.filterMessageOption.value,
|
||||||
selectMode: controller.mailboxDashBoardController.currentSelectMode.value,
|
openMailboxAction: controller.openMailboxLeftMenu,
|
||||||
filterOption: controller.mailboxDashBoardController.filterMessageOption.value,
|
cancelEditThreadAction: controller.cancelSelectEmail,
|
||||||
openMailboxAction: controller.openMailboxLeftMenu,
|
editThreadAction: controller.enableSelectionEmail,
|
||||||
cancelEditThreadAction: controller.cancelSelectEmail,
|
emailSelectionAction: (actionType, selectionEmail) {
|
||||||
editThreadAction: controller.enableSelectionEmail,
|
return controller.pressEmailSelectionAction(
|
||||||
emailSelectionAction: (actionType, selectionEmail) {
|
context,
|
||||||
return controller.pressEmailSelectionAction(
|
actionType,
|
||||||
|
selectionEmail
|
||||||
|
);
|
||||||
|
},
|
||||||
|
onContextMenuFilterEmailAction: controller.responsiveUtils.isScreenWithShortestSide(context)
|
||||||
|
? (filterOption) => controller.openContextMenuAction(
|
||||||
context,
|
context,
|
||||||
actionType,
|
_filterMessagesCupertinoActionTile(context, filterOption)
|
||||||
selectionEmail
|
)
|
||||||
);
|
: null,
|
||||||
},
|
onPopupMenuFilterEmailAction: !controller.responsiveUtils.isScreenWithShortestSide(context)
|
||||||
onContextMenuFilterEmailAction: controller.responsiveUtils.isScreenWithShortestSide(context)
|
? (filterOption, position) => controller.openPopupMenuAction(
|
||||||
? (filterOption) => controller.openContextMenuAction(
|
context,
|
||||||
|
position,
|
||||||
|
popupMenuFilterEmailActionTile(
|
||||||
context,
|
context,
|
||||||
_filterMessagesCupertinoActionTile(context, filterOption)
|
filterOption,
|
||||||
|
(option) => controller.filterMessagesAction(context, option)
|
||||||
)
|
)
|
||||||
: null,
|
)
|
||||||
onPopupMenuFilterEmailAction: !controller.responsiveUtils.isScreenWithShortestSide(context)
|
: null
|
||||||
? (filterOption, position) => controller.openPopupMenuAction(
|
);
|
||||||
context,
|
}),
|
||||||
position,
|
if (!PlatformInfo.isWeb)
|
||||||
popupMenuFilterEmailActionTile(
|
Obx(() {
|
||||||
context,
|
if (!controller.networkConnectionController.isNetworkConnectionAvailable()) {
|
||||||
filterOption,
|
return const Padding(
|
||||||
(option) => controller.filterMessagesAction(context, option)
|
padding: EdgeInsetsDirectional.only(bottom: 8),
|
||||||
)
|
child: NetworkConnectionBannerWidget());
|
||||||
)
|
} else {
|
||||||
: null
|
return const SizedBox.shrink();
|
||||||
);
|
}
|
||||||
}),
|
}),
|
||||||
if (!PlatformInfo.isWeb)
|
_buildSearchBarView(context),
|
||||||
Obx(() {
|
const SpamReportBannerWidget(),
|
||||||
if (!controller.networkConnectionController.isNetworkConnectionAvailable()) {
|
const QuotasBannerWidget(),
|
||||||
return const Padding(
|
_buildVacationNotificationMessage(context),
|
||||||
padding: EdgeInsetsDirectional.only(bottom: 8),
|
],
|
||||||
child: NetworkConnectionBannerWidget());
|
Obx(() {
|
||||||
} else {
|
if (controller.mailboxDashBoardController.isEmptyTrashBannerEnabledOnMobile(context)) {
|
||||||
return const SizedBox.shrink();
|
return Padding(
|
||||||
}
|
padding: const EdgeInsetsDirectional.symmetric(
|
||||||
}),
|
horizontal: BannerEmptyTrashStyles.mobileMargin
|
||||||
_buildSearchBarView(context),
|
),
|
||||||
const SpamReportBannerWidget(),
|
child: BannerEmptyTrashWidget(
|
||||||
const QuotasBannerWidget(),
|
onTapAction: () => controller.deleteSelectionEmailsPermanently(context, DeleteActionType.all)
|
||||||
_buildVacationNotificationMessage(context),
|
),
|
||||||
],
|
);
|
||||||
Obx(() {
|
} else {
|
||||||
if (controller.mailboxDashBoardController.isEmptyTrashBannerEnabledOnMobile(context)) {
|
return const SizedBox.shrink();
|
||||||
return Padding(
|
}
|
||||||
padding: const EdgeInsetsDirectional.symmetric(
|
}),
|
||||||
horizontal: BannerEmptyTrashStyles.mobileMargin
|
Obx(() {
|
||||||
),
|
if (controller.mailboxDashBoardController.isEmptySpamBannerEnabledOnMobile(context)) {
|
||||||
child: BannerEmptyTrashWidget(
|
return Padding(
|
||||||
onTapAction: () => controller.deleteSelectionEmailsPermanently(context, DeleteActionType.all)
|
padding: const EdgeInsetsDirectional.symmetric(
|
||||||
),
|
horizontal: BannerDeleteAllSpamEmailsStyles.mobileMargin
|
||||||
);
|
),
|
||||||
} else {
|
child: BannerDeleteAllSpamEmailsWidget(
|
||||||
return const SizedBox.shrink();
|
onTapAction: () => controller.mailboxDashBoardController.openDialogEmptySpamFolder(context)
|
||||||
}
|
),
|
||||||
}),
|
);
|
||||||
Obx(() {
|
} else {
|
||||||
if (controller.mailboxDashBoardController.isEmptySpamBannerEnabledOnMobile(context)) {
|
return const SizedBox.shrink();
|
||||||
return Padding(
|
}
|
||||||
padding: const EdgeInsetsDirectional.symmetric(
|
}),
|
||||||
horizontal: BannerDeleteAllSpamEmailsStyles.mobileMargin
|
if (!controller.responsiveUtils.isDesktop(context))
|
||||||
),
|
_buildMarkAsMailboxReadLoading(context),
|
||||||
child: BannerDeleteAllSpamEmailsWidget(
|
Obx(() => ThreadViewLoadingBarWidget(viewState: controller.viewState.value)),
|
||||||
onTapAction: () => controller.mailboxDashBoardController.openDialogEmptySpamFolder(context)
|
Expanded(child: _buildListEmail(context)),
|
||||||
),
|
Obx(() => ThreadViewBottomLoadingBarWidget(viewState: controller.viewState.value)),
|
||||||
);
|
_buildListButtonSelectionForMobile(context),
|
||||||
} else {
|
]
|
||||||
return const SizedBox.shrink();
|
)
|
||||||
}
|
))
|
||||||
}),
|
]),
|
||||||
if (!controller.responsiveUtils.isDesktop(context))
|
),
|
||||||
_buildMarkAsMailboxReadLoading(context),
|
floatingActionButton: Column(
|
||||||
Obx(() => ThreadViewLoadingBarWidget(viewState: controller.viewState.value)),
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
Expanded(child: _buildListEmail(context)),
|
children: [
|
||||||
Obx(() => ThreadViewBottomLoadingBarWidget(viewState: controller.viewState.value)),
|
Container(
|
||||||
_buildListButtonSelectionForMobile(context),
|
padding: const EdgeInsetsDirectional.only(end: 4.0),
|
||||||
]
|
child: ScrollToTopButtonWidget(
|
||||||
)
|
scrollController: controller.listEmailController,
|
||||||
))
|
onTap: controller.scrollToTop,
|
||||||
]),
|
responsiveUtils: controller.responsiveUtils,
|
||||||
),
|
icon: SvgPicture.asset(
|
||||||
floatingActionButton: Column(
|
controller.imagePaths.icArrowUpOutline,
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
width: ScrollToTopButtonWidgetStyles.iconWidth,
|
||||||
children: [
|
height: ScrollToTopButtonWidgetStyles.iconHeight,
|
||||||
Container(
|
fit: BoxFit.fill,
|
||||||
padding: const EdgeInsetsDirectional.only(end: 4.0),
|
colorFilter: Colors.white.asFilter(),
|
||||||
child: ScrollToTopButtonWidget(
|
|
||||||
scrollController: controller.listEmailController,
|
|
||||||
onTap: controller.scrollToTop,
|
|
||||||
responsiveUtils: controller.responsiveUtils,
|
|
||||||
icon: SvgPicture.asset(
|
|
||||||
controller.imagePaths.icArrowUpOutline,
|
|
||||||
width: ScrollToTopButtonWidgetStyles.iconWidth,
|
|
||||||
height: ScrollToTopButtonWidgetStyles.iconHeight,
|
|
||||||
fit: BoxFit.fill,
|
|
||||||
colorFilter: Colors.white.asFilter(),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 24),
|
),
|
||||||
_buildFloatingButtonCompose(context),
|
const SizedBox(height: 24),
|
||||||
],
|
_buildFloatingButtonCompose(context),
|
||||||
),
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -49,6 +49,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.11.0"
|
version: "2.11.0"
|
||||||
|
back_button_interceptor:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: back_button_interceptor
|
||||||
|
sha256: ba7d4f4d801e2f1367db35ecf8870cf954cd2c434a9e6208b10fe527b34eb873
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.0.0"
|
||||||
better_open_file:
|
better_open_file:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -223,6 +223,8 @@ dependencies:
|
|||||||
|
|
||||||
flutter_image_compress: 2.1.0
|
flutter_image_compress: 2.1.0
|
||||||
|
|
||||||
|
back_button_interceptor: 7.0.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|||||||
Reference in New Issue
Block a user