TF-460 Implement get identity for mobile

This commit is contained in:
dab246
2022-04-26 11:16:43 +07:00
committed by Dat H. Pham
parent f432dfb376
commit c9a579091a
20 changed files with 221 additions and 159 deletions
@@ -5,18 +5,25 @@ import 'package:flutter_svg/flutter_svg.dart';
@immutable @immutable
class PopupMenuItemWidget extends StatelessWidget { class PopupMenuItemWidget extends StatelessWidget {
final Function onCallBack; final Function onTapCallback;
final String icon; final String icon;
final String name; final String name;
final Color? iconColor; final Color? iconColor;
final String? iconSelection; final String? iconSelection;
PopupMenuItemWidget(this.icon, this.name, this.onCallBack, {this.iconSelection, this.iconColor}); PopupMenuItemWidget(
this.icon,
this.name,
this.onTapCallback,
{
this.iconSelection,
this.iconColor
});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return InkWell( return InkWell(
onTap: () => onCallBack.call(), onTap: () => onTapCallback.call(),
child: Padding( child: Padding(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 16), padding: EdgeInsets.symmetric(horizontal: 20, vertical: 16),
child: SizedBox( child: SizedBox(
@@ -45,38 +45,37 @@ class SearchBarView {
} }
Widget build() { Widget build() {
return InkWell( return Container(
onTap: () => _onOpenSearchViewAction?.call(), key: Key('search_bar_widget'),
borderRadius: BorderRadius.all(Radius.circular(10)), alignment: Alignment.topCenter,
child: Container( height: _heightSearchBar ?? 40,
key: Key('search_bar_widget'), width: _maxSizeWidth ?? double.infinity,
alignment: Alignment.topCenter, decoration: BoxDecoration(
height: _heightSearchBar ?? 40, borderRadius: BorderRadius.circular(10),
width: _maxSizeWidth ?? double.infinity, color: AppColor.colorBgSearchBar),
decoration: BoxDecoration( padding: _padding ?? EdgeInsets.zero,
borderRadius: BorderRadius.circular(10), margin: _margin ?? EdgeInsets.zero,
color: AppColor.colorBgSearchBar), child: InkWell(
padding: _padding ?? EdgeInsets.zero, onTap: () => _onOpenSearchViewAction?.call(),
margin: _margin ?? EdgeInsets.zero, borderRadius: BorderRadius.all(Radius.circular(10)),
child: MediaQuery( child: MediaQuery(
data: MediaQueryData(padding: EdgeInsets.zero), data: MediaQueryData(padding: EdgeInsets.zero),
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
buildIconWeb( buildIconWeb(
splashRadius: 12, splashRadius: 12,
icon: SvgPicture.asset(_imagePaths.icSearchBar, width: 16, height: 16, fit: BoxFit.fill), icon: SvgPicture.asset(_imagePaths.icSearchBar, width: 16, height: 16, fit: BoxFit.fill),
onTap: () => _onOpenSearchViewAction?.call()), onTap: () => _onOpenSearchViewAction?.call()),
Expanded(child: Expanded(child:
Transform(transform: Matrix4.translationValues(-5, 0.0, 0.0), Transform(transform: Matrix4.translationValues(-5, 0.0, 0.0),
child: Text( child: Text(
_hintTextSearch ?? '', _hintTextSearch ?? '',
maxLines: 1, maxLines: 1,
style: TextStyle(fontSize: kIsWeb ? 15 : 17, color: AppColor.colorHintSearchBar)))) style: TextStyle(fontSize: kIsWeb ? 15 : 17, color: AppColor.colorHintSearchBar))))
] ]
) )
) )),
),
); );
} }
} }
@@ -17,7 +17,7 @@ mixin PopupContextMenuActionMixin {
void openPopupMenuAction(BuildContext context, RelativeRect? position, List<PopupMenuEntry> popupMenuItems) async { void openPopupMenuAction(BuildContext context, RelativeRect? position, List<PopupMenuEntry> popupMenuItems) async {
await showMenu( await showMenu(
context: context, context: context,
position: position ?? RelativeRect.fromLTRB(16, 40, 16, 16), position: position ?? const RelativeRect.fromLTRB(16, 40, 16, 16),
color: Colors.white, color: Colors.white,
elevation: 4, elevation: 4,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
@@ -28,7 +28,7 @@ mixin PopupContextMenuActionMixin {
return CupertinoActionSheetAction( return CupertinoActionSheetAction(
child: Text( child: Text(
AppLocalizations.of(context).cancel, AppLocalizations.of(context).cancel,
style: TextStyle(fontWeight: FontWeight.w500, fontSize: 20, color: AppColor.colorTextButton)), style: const TextStyle(fontWeight: FontWeight.w500, fontSize: 20, color: AppColor.colorTextButton)),
onPressed: () => popBack(), onPressed: () => popBack(),
); );
} }
@@ -112,7 +112,7 @@ class MailboxController extends BaseMailboxController {
@override @override
void onReady() { void onReady() {
_openMailboxEventController.stream.throttleTime(Duration(milliseconds: 800)).listen((event) { _openMailboxEventController.stream.throttleTime(const Duration(milliseconds: 800)).listen((event) {
_handleOpenMailbox(event.buildContext, event.presentationMailbox); _handleOpenMailbox(event.buildContext, event.presentationMailbox);
}); });
@@ -304,7 +304,7 @@ class MailboxController extends BaseMailboxController {
} }
if (!_responsiveUtils.isDesktop(context) && !_responsiveUtils.isTabletLarge(context)) { if (!_responsiveUtils.isDesktop(context) && !_responsiveUtils.isTabletLarge(context)) {
mailboxDashBoardController.closeDrawer(); mailboxDashBoardController.closeMailboxMenuDrawer();
} else { } else {
mailboxDashBoardController.dispatchRoute(AppRoutes.THREAD); mailboxDashBoardController.dispatchRoute(AppRoutes.THREAD);
} }
@@ -679,7 +679,7 @@ class MailboxController extends BaseMailboxController {
void closeMailboxScreen(BuildContext context) { void closeMailboxScreen(BuildContext context) {
_cancelSelectMailbox(); _cancelSelectMailbox();
mailboxDashBoardController.closeDrawer(); mailboxDashBoardController.closeMailboxMenuDrawer();
} }
@override @override
@@ -222,7 +222,7 @@ class MailboxView extends GetWidget<MailboxController> {
left: _responsiveUtils.isMobile(context) && _responsiveUtils.isLandscape(context) ? 0 : 16, left: _responsiveUtils.isMobile(context) && _responsiveUtils.isLandscape(context) ? 0 : 16,
right: 16), right: 16),
child: (UserInformationWidgetBuilder(_imagePaths, context, controller.mailboxDashBoardController.userProfile.value) child: (UserInformationWidgetBuilder(_imagePaths, context, controller.mailboxDashBoardController.userProfile.value)
..addOnLogoutAction(() => controller.mailboxDashBoardController.logoutAction())) ..addOnLogoutAction(() => controller.mailboxDashBoardController.goToSettings()))
.build()), .build()),
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2) const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2)
]); ]);
@@ -191,7 +191,7 @@ class MailboxView extends GetWidget<MailboxController> {
Padding( Padding(
padding: const EdgeInsets.only(left: 16, bottom: 10), padding: const EdgeInsets.only(left: 16, bottom: 10),
child: (UserInformationWidgetBuilder(_imagePaths, context, controller.mailboxDashBoardController.userProfile.value) child: (UserInformationWidgetBuilder(_imagePaths, context, controller.mailboxDashBoardController.userProfile.value)
..addOnLogoutAction(() => controller.mailboxDashBoardController.logoutAction())) ..addOnLogoutAction(() => controller.mailboxDashBoardController.goToSettings()))
.build()), .build()),
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2) const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2)
]), ]),
@@ -248,11 +248,11 @@ class MailboxDashBoardController extends ReloadableController {
selectedEmail.value = null; selectedEmail.value = null;
} }
void openDrawer() { void openMailboxMenuDrawer() {
scaffoldKey.currentState?.openDrawer(); scaffoldKey.currentState?.openDrawer();
} }
void closeDrawer() { void closeMailboxMenuDrawer() {
scaffoldKey.currentState?.openEndDrawer(); scaffoldKey.currentState?.openEndDrawer();
} }
@@ -424,6 +424,10 @@ class MailboxDashBoardController extends ReloadableController {
} }
void goToSettings() { void goToSettings() {
if (currentContext != null && (_responsiveUtils.isMobile(currentContext!)
|| _responsiveUtils.isTablet(currentContext!))) {
closeMailboxMenuDrawer();
}
push(AppRoutes.MANAGE_ACCOUNT, push(AppRoutes.MANAGE_ACCOUNT,
arguments: ManageAccountArguments(accountId.value, userProfile.value)); arguments: ManageAccountArguments(accountId.value, userProfile.value));
} }
@@ -86,7 +86,7 @@ class MailboxDashBoardView extends GetWidget<MailboxDashBoardController> with Ne
Widget _buildLargeScreenView(BuildContext context) { Widget _buildLargeScreenView(BuildContext context) {
if (controller.isDrawerOpen && (_responsiveUtils.isDesktop(context) || _responsiveUtils.isTabletLarge(context))) { if (controller.isDrawerOpen && (_responsiveUtils.isDesktop(context) || _responsiveUtils.isTabletLarge(context))) {
WidgetsBinding.instance?.addPostFrameCallback((_) { WidgetsBinding.instance?.addPostFrameCallback((_) {
controller.closeDrawer(); controller.closeMailboxMenuDrawer();
}); });
} }
@@ -32,7 +32,7 @@ class MailboxDashBoardView extends GetWidget<MailboxDashBoardController> with Ne
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (controller.isDrawerOpen && (_responsiveUtils.isDesktop(context) || _responsiveUtils.isTabletLarge(context))) { if (controller.isDrawerOpen && (_responsiveUtils.isDesktop(context) || _responsiveUtils.isTabletLarge(context))) {
WidgetsBinding.instance?.addPostFrameCallback((_) { WidgetsBinding.instance?.addPostFrameCallback((_) {
controller.closeDrawer(); controller.closeMailboxMenuDrawer();
}); });
} }
@@ -401,7 +401,10 @@ class MailboxDashBoardView extends GetWidget<MailboxDashBoardController> with Ne
..setMargin(const EdgeInsets.only(right: 10)) ..setMargin(const EdgeInsets.only(right: 10))
..setHeightSearchBar(45) ..setHeightSearchBar(45)
..setHintText(AppLocalizations.of(context).search_mail) ..setHintText(AppLocalizations.of(context).search_mail)
..addOnCancelSearchPressed(() => controller.disableSearch()) ..addOnCancelSearchPressed(() {
controller.disableSearch();
controller.dispatchAction(CancelSelectionAllEmailAction());
})
..addOnClearTextSearchAction(() => controller.clearSearchText()) ..addOnClearTextSearchAction(() => controller.clearSearchText())
..addOnTextChangeSearchAction((query) => controller.addSuggestionSearch(query)) ..addOnTextChangeSearchAction((query) => controller.addSuggestionSearch(query))
..addOnSearchTextAction((query) => controller.searchEmail(context, query))) ..addOnSearchTextAction((query) => controller.searchEmail(context, query)))
@@ -98,4 +98,11 @@ class ManageAccountDashBoardController extends ReloadableController {
pushAndPop(AppRoutes.MANAGE_ACCOUNT, pushAndPop(AppRoutes.MANAGE_ACCOUNT,
arguments: ManageAccountArguments(accountId.value, userProfile.value)); arguments: ManageAccountArguments(accountId.value, userProfile.value));
} }
void backToMailboxDashBoard() {
if (currentContext != null && !_responsiveUtils.isDesktop(currentContext!)) {
closeMenuDrawer();
}
popBack();
}
} }
@@ -77,19 +77,27 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
], ],
)) ))
]), ]),
mobile: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ mobile: SafeArea(
Padding( child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
padding: const EdgeInsets.only(top: 16, bottom: 16, left: 24, right: 32), Padding(
child: _buildAppbar(context)), padding: !BuildUtils.isWeb && _responsiveUtils.isPortraitMobile(context)
(SearchBarView(_imagePaths) ? const EdgeInsets.only(bottom: 16, left: 4, right: 8)
..hintTextSearch(AppLocalizations.of(context).search_emails) : const EdgeInsets.only(top: 16, bottom: 16, left: 24, right: 32),
..addMargin(const EdgeInsets.only(left: 32, right: 32)) child: _buildAppbar(context)),
..addOnOpenSearchViewAction(() => {})) (SearchBarView(_imagePaths)
.build(), ..hintTextSearch(AppLocalizations.of(context).search_emails)
Expanded(child: Padding( ..addMargin(!BuildUtils.isWeb && _responsiveUtils.isPortraitMobile(context)
padding: const EdgeInsets.only(left: 24, right: 24, bottom: 16), ? const EdgeInsets.only(left: 16, right: 16)
child: _viewDisplayedOfAccountMenuItem())) : const EdgeInsets.only(left: 32, right: 32))
]) ..addOnOpenSearchViewAction(() => {}))
.build(),
Expanded(child: Padding(
padding: !BuildUtils.isWeb && _responsiveUtils.isPortraitMobile(context)
? const EdgeInsets.only(left: 8)
: const EdgeInsets.only(left: 24),
child: _viewDisplayedOfAccountMenuItem()))
])
)
), ),
]), ]),
); );
@@ -23,4 +23,8 @@ class ManageAccountMenuController extends BaseController {
void selectAccountMenuItem(AccountMenuItem newAccountMenuItem) { void selectAccountMenuItem(AccountMenuItem newAccountMenuItem) {
dashBoardController.selectAccountMenuItem(newAccountMenuItem); dashBoardController.selectAccountMenuItem(newAccountMenuItem);
} }
void backToMailboxDashBoard() {
dashBoardController.backToMailboxDashBoard();
}
} }
@@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/account_property_tile_builder.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/account_menu_item_tile_builder.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> { class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
@@ -20,77 +20,94 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
elevation: _responsiveUtils.isDesktop(context) ? 0 : 16.0, elevation: _responsiveUtils.isDesktop(context) ? 0 : 16.0,
child: Scaffold( child: Scaffold(
backgroundColor: Colors.white, backgroundColor: Colors.white,
body: Column( body: SafeArea(right: false, bottom: false,
children: [ child: Column(
if (!_responsiveUtils.isDesktop(context)) children: [
Container( if (!_responsiveUtils.isDesktop(context))
color: Colors.white, Container(
padding: const EdgeInsets.only(top: 16, bottom: 16, left: 16), color: Colors.white,
child: Row(children: [ padding: const EdgeInsets.only(top: 16, bottom: 16, left: 16),
(SloganBuilder(arrangedByHorizontal: true) child: Row(children: [
..setSloganText(AppLocalizations.of(context).app_name) (SloganBuilder(arrangedByHorizontal: true)
..setSloganTextAlign(TextAlign.center) ..setSloganText(AppLocalizations.of(context).app_name)
..setSloganTextStyle(const TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold)) ..setSloganTextAlign(TextAlign.center)
..setSizeLogo(24) ..setSloganTextStyle(const TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold))
..setLogo(_imagePaths.icLogoTMail)) ..setSizeLogo(24)
.build(), ..setLogo(_imagePaths.icLogoTMail))
Obx(() { .build(),
if (controller.dashBoardController.appInformation.value != null) { Obx(() {
return Padding( if (controller.dashBoardController.appInformation.value != null) {
padding: const EdgeInsets.only(top: 4), return Padding(
child: Text( padding: const EdgeInsets.only(top: 4),
'v.${controller.dashBoardController.appInformation.value!.version}', child: Text(
textAlign: TextAlign.center, 'v.${controller.dashBoardController.appInformation.value!.version}',
style: const TextStyle(fontSize: 13, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500), textAlign: TextAlign.center,
), style: const TextStyle(fontSize: 13, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500),
); ),
} else { );
return const SizedBox.shrink(); } else {
} return const SizedBox.shrink();
}), }
]) }),
), ])
if (!_responsiveUtils.isDesktop(context)) ),
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2), if (!_responsiveUtils.isDesktop(context))
Expanded(child: Container( const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
color: _responsiveUtils.isDesktop(context) ? AppColor.colorBgDesktop : Colors.white, Expanded(child: Container(
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ color: _responsiveUtils.isDesktop(context) ? AppColor.colorBgDesktop : Colors.white,
Padding( child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
padding: const EdgeInsets.only(left: 32, top: 34), Padding(
child: Text( padding: const EdgeInsets.only(left: 20, top: 24),
AppLocalizations.of(context).manage_account, child: (ButtonBuilder(_imagePaths.icBack)
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 17))), ..key(const Key('button_back'))
const SizedBox(height: 12), ..decoration(BoxDecoration(borderRadius: BorderRadius.circular(10), color: AppColor.colorBgMailboxSelected))
ListView.builder( ..paddingIcon(const EdgeInsets.only(right: 8))
padding: const EdgeInsets.only(left: 16, right: 8), ..iconColor(AppColor.colorTextButton)
key: const Key('list_manage_account_property'), ..maxWidth(85)
shrinkWrap: true, ..size(16)
itemCount: controller.listAccountMenuItem.length, ..radiusSplash(10)
itemBuilder: (context, index) => Obx(() => AccountMenuItemTileBuilder( ..padding(const EdgeInsets.symmetric(vertical: 10))
context, ..textStyle(const TextStyle(fontSize: 15, color: AppColor.colorTextButton, fontWeight: FontWeight.normal))
_imagePaths, ..onPressActionClick(() => controller.backToMailboxDashBoard())
_responsiveUtils, ..text(AppLocalizations.of(context).back, isVertical: false))
controller.listAccountMenuItem[index], .build()),
controller.dashBoardController.accountMenuItemSelected.value, Padding(
onSelectAccountMenuItemAction: (newAccountMenuItem) => padding: const EdgeInsets.only(left: 32, top: 20),
controller.selectAccountMenuItem(newAccountMenuItem)))), child: Text(
const Padding( AppLocalizations.of(context).manage_account,
padding: EdgeInsets.symmetric(vertical: 16), style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 17))),
child: Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)), const SizedBox(height: 12),
Padding(padding: const EdgeInsets.only(left: 32), ListView.builder(
child: InkWell( padding: const EdgeInsets.only(left: 16, right: 8),
onTap: () => controller.dashBoardController.logoutAction(), key: const Key('list_manage_account_property'),
child: Row(children: [ shrinkWrap: true,
SvgPicture.asset(_imagePaths.icLogout, fit: BoxFit.fill), itemCount: controller.listAccountMenuItem.length,
const SizedBox(width: 12), itemBuilder: (context, index) => Obx(() => AccountMenuItemTileBuilder(
Expanded(child: Text(AppLocalizations.of(context).sign_out, context,
style: const TextStyle(fontWeight: FontWeight.normal, fontSize: 15, color: Colors.black))) _imagePaths,
]) _responsiveUtils,
) controller.listAccountMenuItem[index],
), controller.dashBoardController.accountMenuItemSelected.value,
]), onSelectAccountMenuItemAction: (newAccountMenuItem) =>
)), controller.selectAccountMenuItem(newAccountMenuItem)))),
] const Padding(
padding: EdgeInsets.symmetric(vertical: 16),
child: Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)),
Padding(padding: const EdgeInsets.only(left: 32),
child: InkWell(
onTap: () => controller.dashBoardController.logoutAction(),
child: Row(children: [
SvgPicture.asset(_imagePaths.icLogout, fit: BoxFit.fill),
const SizedBox(width: 12),
Expanded(child: Text(AppLocalizations.of(context).sign_out,
style: const TextStyle(fontWeight: FontWeight.normal, fontSize: 15, color: Colors.black)))
])
)
),
]),
)),
]
)
), ),
) )
); );
@@ -33,7 +33,7 @@ class IdentitiesController extends BaseController {
if (success is GetAllIdentitiesSuccess) { if (success is GetAllIdentitiesSuccess) {
if (success.identities?.isNotEmpty == true) { if (success.identities?.isNotEmpty == true) {
listIdentities.value = success.identities ?? []; listIdentities.value = success.identities ?? [];
selectIdentity(listIdentities.first); setIdentityDefault();
} }
} }
} }
@@ -57,6 +57,15 @@ class IdentitiesController extends BaseController {
consumeState(_getAllIdentitiesInteractor.execute(accountId)); consumeState(_getAllIdentitiesInteractor.execute(accountId));
} }
void setIdentityDefault() {
try {
final identityDefault = listIdentities.firstWhere((identity) => identity.mayDelete == false);
selectIdentity(identityDefault);
} catch (exception) {
selectIdentity(listIdentities.first);
}
}
void selectIdentity(Identity? newIdentity) { void selectIdentity(Identity? newIdentity) {
identitySelected.value = newIdentity; identitySelected.value = newIdentity;
} }
@@ -82,8 +82,8 @@ class IdentitiesView extends GetWidget<IdentitiesController> {
responsiveUtils: _responsiveUtils, responsiveUtils: _responsiveUtils,
mobile: Scaffold( mobile: Scaffold(
body: Container( body: Container(
margin: const EdgeInsets.symmetric(vertical: 16), margin: const EdgeInsets.only(top: 16, bottom: 16, right: 24),
child: Column( child: SingleChildScrollView(child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
buttonSelectIdentity, buttonSelectIdentity,
@@ -91,7 +91,8 @@ class IdentitiesView extends GetWidget<IdentitiesController> {
_imagePaths, _imagePaths,
controller.identitySelected.value)), controller.identitySelected.value)),
] ]
)), ))
),
floatingActionButton: _responsiveUtils.isMobile(context) floatingActionButton: _responsiveUtils.isMobile(context)
? FloatingActionButton( ? FloatingActionButton(
key: const Key('add_new_identity'), key: const Key('add_new_identity'),
@@ -101,7 +102,7 @@ class IdentitiesView extends GetWidget<IdentitiesController> {
: null), : null),
desktop: Container( desktop: Container(
margin: const EdgeInsets.symmetric(vertical: 24, horizontal: 16), margin: const EdgeInsets.symmetric(vertical: 24, horizontal: 16),
child: Column( child: SingleChildScrollView(child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
SizedBox( SizedBox(
@@ -112,7 +113,7 @@ class IdentitiesView extends GetWidget<IdentitiesController> {
controller.identitySelected.value, controller.identitySelected.value,
maxWidth: constraints.maxWidth / 2)), maxWidth: constraints.maxWidth / 2)),
] ]
) ))
) )
)); ));
} }
@@ -837,6 +837,7 @@ class ThreadController extends BaseController {
void disableSearch() { void disableSearch() {
emailListSearch.clear(); emailListSearch.clear();
mailboxDashBoardController.disableSearch(); mailboxDashBoardController.disableSearch();
cancelSelectEmail();
} }
void _searchEmail() { void _searchEmail() {
@@ -892,7 +893,7 @@ class ThreadController extends BaseController {
_isLoadingMore = false; _isLoadingMore = false;
} }
bool isSelectionEnabled() => mailboxDashBoardController.currentSelectMode.value == SelectMode.ACTIVE; bool isSelectionEnabled() => mailboxDashBoardController.isSelectionEnabled();
void pressEmailSelectionAction(BuildContext context, EmailActionType actionType, List<PresentationEmail> selectionEmail) { void pressEmailSelectionAction(BuildContext context, EmailActionType actionType, List<PresentationEmail> selectionEmail) {
log('ThreadController::pressEmailSelectionAction(): selectionEmail: ${selectionEmail.length}'); log('ThreadController::pressEmailSelectionAction(): selectionEmail: ${selectionEmail.length}');
@@ -1226,7 +1227,7 @@ class ThreadController extends BaseController {
} }
void openMailboxLeftMenu() { void openMailboxLeftMenu() {
mailboxDashBoardController.openDrawer(); mailboxDashBoardController.openMailboxMenuDrawer();
} }
void goToEmail(BuildContext context) { void goToEmail(BuildContext context) {
@@ -75,7 +75,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin {
), ),
_buildSuggestionBox(context) _buildSuggestionBox(context)
]))), ]))),
if (!kIsWeb) _buildListButtonSelectionForMobile(context), _buildListButtonSelectionForMobile(context),
] ]
) )
)) ))
@@ -87,7 +87,10 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin {
Widget _buildListButtonSelectionForMobile(BuildContext context) { Widget _buildListButtonSelectionForMobile(BuildContext context) {
return Obx(() { return Obx(() {
if (controller.isSelectionEnabled() && !_responsiveUtils.isDesktop(context) && controller.listEmailSelected.isNotEmpty) { if (controller.isSelectionEnabled()
&& controller.isSearchActive()
&& !_responsiveUtils.isDesktop(context)
&& controller.listEmailSelected.isNotEmpty) {
return Column(children: [ return Column(children: [
const Divider(color: AppColor.lineItemListColor, height: 1, thickness: 0.2), const Divider(color: AppColor.lineItemListColor, height: 1, thickness: 0.2),
Padding( Padding(
@@ -61,8 +61,8 @@ class EmailTileBuilder {
Widget _wrapContainerForTile(Widget tile) { Widget _wrapContainerForTile(Widget tile) {
if (_responsiveUtils.isDesktop(_context)) { if (_responsiveUtils.isDesktop(_context)) {
return Container( return Container(
margin: _selectModeAll == SelectMode.ACTIVE ? EdgeInsets.only(top: 3, left: 8, right: 8) : EdgeInsets.zero, margin: _selectModeAll == SelectMode.ACTIVE ? const EdgeInsets.only(top: 3, left: 8, right: 8) : EdgeInsets.zero,
padding: _selectModeAll == SelectMode.ACTIVE ? EdgeInsets.symmetric(vertical: 8) : EdgeInsets.zero, padding: _selectModeAll == SelectMode.ACTIVE ? const EdgeInsets.symmetric(vertical: 8) : EdgeInsets.zero,
decoration: _selectModeAll == SelectMode.ACTIVE && _presentationEmail.selectMode == SelectMode.ACTIVE decoration: _selectModeAll == SelectMode.ACTIVE && _presentationEmail.selectMode == SelectMode.ACTIVE
? BoxDecoration(borderRadius: BorderRadius.circular(14), color: AppColor.colorItemEmailSelectedDesktop) ? BoxDecoration(borderRadius: BorderRadius.circular(14), color: AppColor.colorItemEmailSelectedDesktop)
: null, : null,
@@ -70,7 +70,7 @@ class EmailTileBuilder {
} else { } else {
return Container( return Container(
margin: EdgeInsets.zero, margin: EdgeInsets.zero,
padding: EdgeInsets.only(bottom: 10, left: 16, right: 16), padding: const EdgeInsets.only(bottom: 10, left: 16, right: 16),
decoration: BoxDecoration(borderRadius: BorderRadius.circular(0), color: Colors.white), decoration: BoxDecoration(borderRadius: BorderRadius.circular(0), color: Colors.white),
alignment: Alignment.center, alignment: Alignment.center,
child: tile); child: tile);
@@ -61,8 +61,8 @@ class EmailTileBuilder {
Widget _wrapContainerForTile(Widget tile) { Widget _wrapContainerForTile(Widget tile) {
if (_responsiveUtils.isDesktop(_context)) { if (_responsiveUtils.isDesktop(_context)) {
return Container( return Container(
margin: _selectModeAll == SelectMode.ACTIVE ? EdgeInsets.only(top: 3, left: 8, right: 8) : EdgeInsets.zero, margin: _selectModeAll == SelectMode.ACTIVE ? const EdgeInsets.only(top: 3, left: 8, right: 8) : EdgeInsets.zero,
padding: _selectModeAll == SelectMode.ACTIVE ? EdgeInsets.symmetric(vertical: 8) : EdgeInsets.zero, padding: _selectModeAll == SelectMode.ACTIVE ? const EdgeInsets.symmetric(vertical: 8) : EdgeInsets.zero,
decoration: _selectModeAll == SelectMode.ACTIVE && _presentationEmail.selectMode == SelectMode.ACTIVE decoration: _selectModeAll == SelectMode.ACTIVE && _presentationEmail.selectMode == SelectMode.ACTIVE
? BoxDecoration(borderRadius: BorderRadius.circular(14), color: AppColor.colorItemEmailSelectedDesktop) ? BoxDecoration(borderRadius: BorderRadius.circular(14), color: AppColor.colorItemEmailSelectedDesktop)
: null, : null,
@@ -71,11 +71,11 @@ class EmailTileBuilder {
} else { } else {
return Container( return Container(
margin: _selectModeAll == SelectMode.ACTIVE margin: _selectModeAll == SelectMode.ACTIVE
? EdgeInsets.only(top: 3, left: 16, right: 16) ? const EdgeInsets.only(top: 3, left: 16, right: 16)
: EdgeInsets.zero, : EdgeInsets.zero,
padding: _selectModeAll == SelectMode.ACTIVE padding: _selectModeAll == SelectMode.ACTIVE
? EdgeInsets.only(top: 8, bottom: 16, right: 8) ? const EdgeInsets.only(top: 8, bottom: 16, right: 8)
: EdgeInsets.only(bottom: 10, left: 16, right: 16), : const EdgeInsets.only(bottom: 10, left: 16, right: 16),
decoration: _selectModeAll == SelectMode.ACTIVE && _presentationEmail.selectMode == SelectMode.ACTIVE decoration: _selectModeAll == SelectMode.ACTIVE && _presentationEmail.selectMode == SelectMode.ACTIVE
? BoxDecoration(borderRadius: BorderRadius.circular(14), color: AppColor.colorItemEmailSelectedDesktop) ? BoxDecoration(borderRadius: BorderRadius.circular(14), color: AppColor.colorItemEmailSelectedDesktop)
: BoxDecoration(borderRadius: BorderRadius.circular(0), color: Colors.white), : BoxDecoration(borderRadius: BorderRadius.circular(0), color: Colors.white),
@@ -198,14 +198,13 @@ class EmailTileBuilder {
onLongPress: () => _emailActionClick?.call(EmailActionType.selection, _presentationEmail), onLongPress: () => _emailActionClick?.call(EmailActionType.selection, _presentationEmail),
onHover: (value) => setState(() => isHoverItem = value), onHover: (value) => setState(() => isHoverItem = value),
child: Row(crossAxisAlignment: CrossAxisAlignment.start, children: [ child: Row(crossAxisAlignment: CrossAxisAlignment.start, children: [
Padding( GestureDetector(
padding: const EdgeInsets.only(top: 8), onTap: () => _emailActionClick?.call(
child: GestureDetector( _selectModeAll == SelectMode.ACTIVE ? EmailActionType.selection : EmailActionType.preview,
onTap: () => _emailActionClick?.call( _presentationEmail),
_selectModeAll == SelectMode.ACTIVE ? EmailActionType.selection : EmailActionType.preview, child: Padding(
_presentationEmail), padding: const EdgeInsets.only(top: 8, right: 12),
child: _buildAvatarIcon())), child: _buildAvatarIcon())),
const SizedBox(width: 12),
Expanded(child: Column(children: [ Expanded(child: Column(children: [
Transform( Transform(
transform: Matrix4.translationValues(0.0, isHoverItem ? -10.0 : 0.0, 0.0), transform: Matrix4.translationValues(0.0, isHoverItem ? -10.0 : 0.0, 0.0),
@@ -507,7 +506,7 @@ class EmailTileBuilder {
}) { }) {
if (_selectModeAll == SelectMode.ACTIVE) { if (_selectModeAll == SelectMode.ACTIVE) {
return Padding( return Padding(
padding: EdgeInsets.all(12), padding: const EdgeInsets.all(12),
child: SvgPicture.asset( child: SvgPicture.asset(
_presentationEmail.selectMode == SelectMode.ACTIVE _presentationEmail.selectMode == SelectMode.ACTIVE
? _imagePaths.icSelected ? _imagePaths.icSelected