TF-2684 Enable selectable in blue bar

This commit is contained in:
dab246
2024-03-13 01:08:51 +07:00
committed by Dat H. Pham
parent 8ddb4b9275
commit 56eff652fb
11 changed files with 463 additions and 422 deletions
+202 -202
View File
@@ -46,215 +46,215 @@ class EmailView extends GetWidget<SingleEmailController> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: controller.responsiveUtils.isWebDesktop(context)
? AppColor.colorBgDesktop
: Colors.white,
appBar: PlatformInfo.isIOS
? PreferredSize(
preferredSize: const Size(double.infinity, 100),
return SelectionArea(
child: Scaffold(
backgroundColor: controller.responsiveUtils.isWebDesktop(context)
? AppColor.colorBgDesktop
: Colors.white,
appBar: PlatformInfo.isIOS
? 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: 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(() {
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: context),
onEmailActionClick: (email, action) => controller.handleEmailAction(context, email, action),
onMoreActionClick: (presentationEmail, position) => _handleMoreEmailAction(context: context, presentationEmail: presentationEmail, position: position)
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: 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: LayoutBuilder(builder: (context, constraints) {
log('EmailView::build: EMAIL_BODY_MAX_HEIGHT = ${constraints.maxHeight}');
return 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,
maxBodyHeight: constraints.maxHeight
))
)
);
} 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(),
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,
maxBodyHeight: constraints.maxHeight
);
}
});
}
}
);
} 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,
maxBodyHeight: constraints.maxHeight
))
)
);
} 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(),
child: Container(
width: double.infinity,
alignment: Alignment.center,
color: Colors.white,
child: _buildEmailMessage(
context: context,
presentationEmail: currentEmail,
calendarEvent: calendarEvent,
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
maxBodyHeight: constraints.maxHeight
)
)
),
),
);
} else {
return _buildEmailMessage(
context: context,
presentationEmail: currentEmail,
maxBodyHeight: constraints.maxHeight
);
}
});
}
}
});
}),
),
);
EmailViewBottomBarWidget(
key: const Key('email_view_button_bar'),
presentationEmail: currentEmail,
emailActionCallback: controller.pressEmailAction
),
]);
} else {
return const SizedBox.shrink();
return const EmailViewEmptyWidget();
}
})
)
: 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: 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: LayoutBuilder(builder: (context, constraints) {
log('EmailView::build: EMAIL_BODY_MAX_HEIGHT = ${constraints.maxHeight}');
return 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,
maxBodyHeight: constraints.maxHeight
))
)
);
} else {
return Obx(() {
final calendarEvent = controller.calendarEvent;
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,
maxBodyHeight: constraints.maxHeight
);
}
});
}
}
);
} 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,
maxBodyHeight: constraints.maxHeight
))
)
);
} else {
return Obx(() {
final calendarEvent = controller.calendarEvent;
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(),
maxBodyHeight: constraints.maxHeight
)
)
),
),
);
} else {
return _buildEmailMessage(
context: context,
presentationEmail: currentEmail,
maxBodyHeight: constraints.maxHeight
);
}
});
}
}
});
}),
),
EmailViewBottomBarWidget(
key: const Key('email_view_button_bar'),
presentationEmail: currentEmail,
emailActionCallback: controller.pressEmailAction
),
]);
} else {
return const EmailViewEmptyWidget();
}
})
)
)
),
);
}