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
@@ -98,4 +98,11 @@ class ManageAccountDashBoardController extends ReloadableController {
pushAndPop(AppRoutes.MANAGE_ACCOUNT,
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: [
Padding(
padding: const EdgeInsets.only(top: 16, bottom: 16, left: 24, right: 32),
child: _buildAppbar(context)),
(SearchBarView(_imagePaths)
..hintTextSearch(AppLocalizations.of(context).search_emails)
..addMargin(const EdgeInsets.only(left: 32, right: 32))
..addOnOpenSearchViewAction(() => {}))
.build(),
Expanded(child: Padding(
padding: const EdgeInsets.only(left: 24, right: 24, bottom: 16),
child: _viewDisplayedOfAccountMenuItem()))
])
mobile: SafeArea(
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Padding(
padding: !BuildUtils.isWeb && _responsiveUtils.isPortraitMobile(context)
? const EdgeInsets.only(bottom: 16, left: 4, right: 8)
: const EdgeInsets.only(top: 16, bottom: 16, left: 24, right: 32),
child: _buildAppbar(context)),
(SearchBarView(_imagePaths)
..hintTextSearch(AppLocalizations.of(context).search_emails)
..addMargin(!BuildUtils.isWeb && _responsiveUtils.isPortraitMobile(context)
? const EdgeInsets.only(left: 16, right: 16)
: 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) {
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: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/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';
class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
@@ -20,77 +20,94 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
elevation: _responsiveUtils.isDesktop(context) ? 0 : 16.0,
child: Scaffold(
backgroundColor: Colors.white,
body: Column(
children: [
if (!_responsiveUtils.isDesktop(context))
Container(
color: Colors.white,
padding: const EdgeInsets.only(top: 16, bottom: 16, left: 16),
child: Row(children: [
(SloganBuilder(arrangedByHorizontal: true)
..setSloganText(AppLocalizations.of(context).app_name)
..setSloganTextAlign(TextAlign.center)
..setSloganTextStyle(const TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold))
..setSizeLogo(24)
..setLogo(_imagePaths.icLogoTMail))
.build(),
Obx(() {
if (controller.dashBoardController.appInformation.value != null) {
return Padding(
padding: const EdgeInsets.only(top: 4),
child: Text(
'v.${controller.dashBoardController.appInformation.value!.version}',
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 13, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500),
),
);
} else {
return const SizedBox.shrink();
}
}),
])
),
if (!_responsiveUtils.isDesktop(context))
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
Expanded(child: Container(
color: _responsiveUtils.isDesktop(context) ? AppColor.colorBgDesktop : Colors.white,
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Padding(
padding: const EdgeInsets.only(left: 32, top: 34),
child: Text(
AppLocalizations.of(context).manage_account,
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 17))),
const SizedBox(height: 12),
ListView.builder(
padding: const EdgeInsets.only(left: 16, right: 8),
key: const Key('list_manage_account_property'),
shrinkWrap: true,
itemCount: controller.listAccountMenuItem.length,
itemBuilder: (context, index) => Obx(() => AccountMenuItemTileBuilder(
context,
_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)))
])
)
),
]),
)),
]
body: SafeArea(right: false, bottom: false,
child: Column(
children: [
if (!_responsiveUtils.isDesktop(context))
Container(
color: Colors.white,
padding: const EdgeInsets.only(top: 16, bottom: 16, left: 16),
child: Row(children: [
(SloganBuilder(arrangedByHorizontal: true)
..setSloganText(AppLocalizations.of(context).app_name)
..setSloganTextAlign(TextAlign.center)
..setSloganTextStyle(const TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold))
..setSizeLogo(24)
..setLogo(_imagePaths.icLogoTMail))
.build(),
Obx(() {
if (controller.dashBoardController.appInformation.value != null) {
return Padding(
padding: const EdgeInsets.only(top: 4),
child: Text(
'v.${controller.dashBoardController.appInformation.value!.version}',
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 13, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500),
),
);
} else {
return const SizedBox.shrink();
}
}),
])
),
if (!_responsiveUtils.isDesktop(context))
const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
Expanded(child: Container(
color: _responsiveUtils.isDesktop(context) ? AppColor.colorBgDesktop : Colors.white,
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Padding(
padding: const EdgeInsets.only(left: 20, top: 24),
child: (ButtonBuilder(_imagePaths.icBack)
..key(const Key('button_back'))
..decoration(BoxDecoration(borderRadius: BorderRadius.circular(10), color: AppColor.colorBgMailboxSelected))
..paddingIcon(const EdgeInsets.only(right: 8))
..iconColor(AppColor.colorTextButton)
..maxWidth(85)
..size(16)
..radiusSplash(10)
..padding(const EdgeInsets.symmetric(vertical: 10))
..textStyle(const TextStyle(fontSize: 15, color: AppColor.colorTextButton, fontWeight: FontWeight.normal))
..onPressActionClick(() => controller.backToMailboxDashBoard())
..text(AppLocalizations.of(context).back, isVertical: false))
.build()),
Padding(
padding: const EdgeInsets.only(left: 32, top: 20),
child: Text(
AppLocalizations.of(context).manage_account,
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 17))),
const SizedBox(height: 12),
ListView.builder(
padding: const EdgeInsets.only(left: 16, right: 8),
key: const Key('list_manage_account_property'),
shrinkWrap: true,
itemCount: controller.listAccountMenuItem.length,
itemBuilder: (context, index) => Obx(() => AccountMenuItemTileBuilder(
context,
_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.identities?.isNotEmpty == true) {
listIdentities.value = success.identities ?? [];
selectIdentity(listIdentities.first);
setIdentityDefault();
}
}
}
@@ -57,6 +57,15 @@ class IdentitiesController extends BaseController {
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) {
identitySelected.value = newIdentity;
}
@@ -82,8 +82,8 @@ class IdentitiesView extends GetWidget<IdentitiesController> {
responsiveUtils: _responsiveUtils,
mobile: Scaffold(
body: Container(
margin: const EdgeInsets.symmetric(vertical: 16),
child: Column(
margin: const EdgeInsets.only(top: 16, bottom: 16, right: 24),
child: SingleChildScrollView(child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
buttonSelectIdentity,
@@ -91,7 +91,8 @@ class IdentitiesView extends GetWidget<IdentitiesController> {
_imagePaths,
controller.identitySelected.value)),
]
)),
))
),
floatingActionButton: _responsiveUtils.isMobile(context)
? FloatingActionButton(
key: const Key('add_new_identity'),
@@ -101,7 +102,7 @@ class IdentitiesView extends GetWidget<IdentitiesController> {
: null),
desktop: Container(
margin: const EdgeInsets.symmetric(vertical: 24, horizontal: 16),
child: Column(
child: SingleChildScrollView(child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
@@ -112,7 +113,7 @@ class IdentitiesView extends GetWidget<IdentitiesController> {
controller.identitySelected.value,
maxWidth: constraints.maxWidth / 2)),
]
)
))
)
));
}