TF-904 Fix Clicking mailbox name redirects to mailbox

This commit is contained in:
Alexandre Lagane
2022-09-01 11:46:43 +02:00
committed by Dat H. Pham
parent 93c703ac54
commit c0fe0b8196
2 changed files with 117 additions and 104 deletions
+20 -22
View File
@@ -108,28 +108,26 @@ class EmailView extends GetWidget<EmailController> with NetworkConnectionMixin {
Widget _buildAppBar(BuildContext context) {
return Obx(() => Padding(
padding: const EdgeInsets.only(top: 6),
child: (AppBarMailWidgetBuilder(
context,
imagePaths,
responsiveUtils,
controller.currentEmail,
controller.currentMailbox)
..onBackActionClick(() => controller.closeEmailView(context))
..addOnEmailActionClick((email, action) =>
controller.handleEmailAction(context, email, action))
..addOnMoreActionClick((email, position) {
if (responsiveUtils.isMobile(context)) {
controller.openContextMenuAction(
context,
_emailActionMoreActionTile(context, email));
} else {
controller.openPopupMenuAction(
context,
position,
_popupMenuEmailActionTile(context, email));
}
}))
.build()));
child: AppBarMailWidgetBuilder(
controller.currentEmail,
controller.currentMailbox,
onBackActionClick: () => controller.closeEmailView(context),
onEmailActionClick: (email, action) =>
controller.handleEmailAction(context, email, action),
onMoreActionClick: (email, position) {
if (responsiveUtils.isMobile(context)) {
controller.openContextMenuAction(
context,
_emailActionMoreActionTile(context, email));
} else {
controller.openPopupMenuAction(
context,
position,
_popupMenuEmailActionTile(context, email));
}
}
)
));
}
Widget _buildBottomBar(BuildContext context) {
@@ -2,6 +2,7 @@
import 'package:core/core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
@@ -9,118 +10,132 @@ typedef OnBackActionClick = void Function();
typedef OnEmailActionClick = void Function(PresentationEmail, EmailActionType);
typedef OnMoreActionClick = void Function(PresentationEmail, RelativeRect?);
class AppBarMailWidgetBuilder {
OnBackActionClick? _onBackActionClick;
OnEmailActionClick? _onEmailActionClick;
OnMoreActionClick? _onMoreActionClick;
class AppBarMailWidgetBuilder extends StatelessWidget {
final _imagePaths = Get.find<ImagePaths>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
final BuildContext _context;
final ImagePaths _imagePaths;
final ResponsiveUtils _responsiveUtils;
final PresentationEmail? _presentationEmail;
final PresentationMailbox? _currentMailbox;
final OnBackActionClick? onBackActionClick;
final OnEmailActionClick? onEmailActionClick;
final OnMoreActionClick? onMoreActionClick;
AppBarMailWidgetBuilder(
this._context,
this._imagePaths,
this._responsiveUtils,
this._presentationEmail,
this._currentMailbox,
);
{
Key? key,
this.onBackActionClick,
this.onEmailActionClick,
this.onMoreActionClick
}
) : super(key: key);
void onBackActionClick(OnBackActionClick onBackActionClick) {
_onBackActionClick = onBackActionClick;
}
void addOnEmailActionClick(OnEmailActionClick onEmailActionClick) {
_onEmailActionClick = onEmailActionClick;
}
void addOnMoreActionClick(OnMoreActionClick onMoreActionClick) {
_onMoreActionClick = onMoreActionClick;
}
Widget build() {
@override
Widget build(BuildContext context) {
return Container(
key: const Key('app_bar_messenger_widget'),
alignment: Alignment.center,
padding: EdgeInsets.zero,
margin: EdgeInsets.zero,
child: MediaQuery(
data: const MediaQueryData(padding: EdgeInsets.zero),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
if (_responsiveUtils.mailboxDashboardHasMailboxAndEmailView(_context))
_buildBackButton(),
if (_responsiveUtils.mailboxDashboardHasMailboxAndEmailView(_context))
Expanded(child: _buildMailboxName()),
if (_presentationEmail != null) _buildListOptionButton(),
]
)
)
color: Colors.transparent,
padding: const EdgeInsets.only(left: 8),
child: Row(children: [
if (_responsiveUtils.mailboxDashboardHasMailboxAndEmailView(context))
Material(
color: Colors.transparent,
child: InkWell(
onTap: () => onBackActionClick?.call(),
borderRadius: BorderRadius.circular(15),
child: Tooltip(
message: AppLocalizations.of(context).back,
child: Container(
color: Colors.transparent,
height: 40,
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Row(mainAxisSize: MainAxisSize.min, children: [
SvgPicture.asset(
_imagePaths.icBack,
width: 18,
height: 18,
color: AppColor.colorTextButton,
fit: BoxFit.fill),
Container(
margin: const EdgeInsets.only(left: 8),
constraints: BoxConstraints(
maxWidth: _responsiveUtils.getSizeScreenWidth(context) - 250),
child: Text(
_currentMailbox?.name?.name.capitalizeFirstEach ?? '',
maxLines: 1,
overflow: CommonTextStyle.defaultTextOverFlow,
softWrap: CommonTextStyle.defaultSoftWrap,
style: const TextStyle(fontSize: 17, color: AppColor.colorTextButton)),
),
]),
),
),
),
),
const Spacer(),
if (_presentationEmail != null) _buildListOptionButton(context),
])
);
}
Widget _buildBackButton() {
return buildIconWeb(
icon: SvgPicture.asset(_imagePaths.icBack, width: 18, height: 18, color: AppColor.colorTextButton, fit: BoxFit.fill),
tooltip: AppLocalizations.of(_context).back,
onTap: () => _onBackActionClick?.call()
);
}
Widget _buildMailboxName() {
return Transform(
transform: Matrix4.translationValues(-10.0, 0.0, 0.0),
child: Text(
_currentMailbox?.name?.name.capitalizeFirstEach ?? '',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: const TextStyle(fontSize: 17, color: AppColor.colorTextButton))
);
}
Widget _buildListOptionButton() {
Widget _buildListOptionButton(BuildContext context) {
return Row(
children: [
buildIconWeb(
icon: SvgPicture.asset(_imagePaths.icMoveEmail, fit: BoxFit.fill),
tooltip: AppLocalizations.of(_context).move_message,
onTap: () => _onEmailActionClick?.call(_presentationEmail!, EmailActionType.moveToMailbox)),
tooltip: AppLocalizations.of(context).move_message,
onTap: () => onEmailActionClick?.call(
_presentationEmail!,
EmailActionType.moveToMailbox)),
buildIconWeb(
icon: SvgPicture.asset(_presentationEmail!.hasStarred ? _imagePaths.icStar : _imagePaths.icUnStar, fit: BoxFit.fill),
tooltip: _presentationEmail!.hasStarred ? AppLocalizations.of(_context).not_starred : AppLocalizations.of(_context).mark_as_starred,
onTap: () => _onEmailActionClick?.call(_presentationEmail!,
_presentationEmail!.hasStarred ? EmailActionType.unMarkAsStarred : EmailActionType.markAsStarred)),
icon: SvgPicture.asset(
_presentationEmail!.hasStarred
? _imagePaths.icStar
: _imagePaths.icUnStar,
fit: BoxFit.fill),
tooltip: _presentationEmail!.hasStarred
? AppLocalizations.of(context).not_starred
: AppLocalizations.of(context).mark_as_starred,
onTap: () => onEmailActionClick?.call(_presentationEmail!,
_presentationEmail!.hasStarred
? EmailActionType.unMarkAsStarred
: EmailActionType.markAsStarred)),
buildIconWeb(
icon: SvgPicture.asset(_imagePaths.icDeleteEmail, fit: BoxFit.fill),
tooltip: _currentMailbox?.role != PresentationMailbox.roleTrash
? AppLocalizations.of(_context).move_to_trash
: AppLocalizations.of(_context).delete_permanently,
? AppLocalizations.of(context).move_to_trash
: AppLocalizations.of(context).delete_permanently,
onTap: () {
if (_currentMailbox?.role != PresentationMailbox.roleTrash) {
_onEmailActionClick?.call(_presentationEmail!, EmailActionType.moveToTrash);
onEmailActionClick?.call(
_presentationEmail!,
EmailActionType.moveToTrash);
} else {
_onEmailActionClick?.call(_presentationEmail!, EmailActionType.deletePermanently);
onEmailActionClick?.call(
_presentationEmail!,
EmailActionType.deletePermanently);
}
}),
Padding(
padding: const EdgeInsets.only(left: 10, right: 16),
child: buildIconWebHasPosition(
_context,
tooltip: AppLocalizations.of(_context).more,
icon: SvgPicture.asset(_imagePaths.icMore, fit: BoxFit.fill),
onTap: () {
if (_presentationEmail != null && _responsiveUtils.isMobile(_context)) {
_onMoreActionClick?.call(_presentationEmail!, null);
}
},
onTapDown: (position) {
if (_presentationEmail != null && !_responsiveUtils.isMobile(_context)) {
_onMoreActionClick?.call(_presentationEmail!, position);
}
})),
context,
tooltip: AppLocalizations.of(context).more,
icon: SvgPicture.asset(_imagePaths.icMore, fit: BoxFit.fill),
onTap: () {
if (_presentationEmail != null && _responsiveUtils.isMobile(context)) {
onMoreActionClick?.call(_presentationEmail!, null);
}
},
onTapDown: (position) {
if (_presentationEmail != null && !_responsiveUtils.isMobile(context)) {
onMoreActionClick?.call(_presentationEmail!, position);
}
}
)
),
]
);
}