From c0fe0b8196db7e140db5b3a51f38bcc20003fda6 Mon Sep 17 00:00:00 2001 From: Alexandre Lagane Date: Thu, 1 Sep 2022 11:46:43 +0200 Subject: [PATCH] TF-904 Fix Clicking mailbox name redirects to mailbox --- .../email/presentation/email_view.dart | 42 ++-- .../widgets/app_bar_mail_widget_builder.dart | 179 ++++++++++-------- 2 files changed, 117 insertions(+), 104 deletions(-) diff --git a/lib/features/email/presentation/email_view.dart b/lib/features/email/presentation/email_view.dart index c100bd173..fe6e4d3d1 100644 --- a/lib/features/email/presentation/email_view.dart +++ b/lib/features/email/presentation/email_view.dart @@ -108,28 +108,26 @@ class EmailView extends GetWidget 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) { diff --git a/lib/features/email/presentation/widgets/app_bar_mail_widget_builder.dart b/lib/features/email/presentation/widgets/app_bar_mail_widget_builder.dart index 21ca58d38..7370c3bef 100644 --- a/lib/features/email/presentation/widgets/app_bar_mail_widget_builder.dart +++ b/lib/features/email/presentation/widgets/app_bar_mail_widget_builder.dart @@ -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(); + final _responsiveUtils = Get.find(); - 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); + } + } + ) + ), ] ); }