TF-79 Create popmenu for tablet

This commit is contained in:
dab246
2021-09-20 16:11:49 +07:00
committed by Dat H. Pham
parent c7a3e90a68
commit 8413615e29
21 changed files with 177 additions and 223 deletions
@@ -98,7 +98,7 @@ class MailboxView extends GetWidget<MailboxController> {
Widget _buildSearchFormWidget(BuildContext context) {
return Padding(
padding: EdgeInsets.only(top: 16, bottom: 12, left: 16, right: 16),
padding: EdgeInsets.only(top: 16, left: 16, right: 16),
child: SearchFormWidgetBuilder(context, imagePaths)
.onNewSearchQuery((searchQuery) => {})
.build());
@@ -111,8 +111,8 @@ class MailboxView extends GetWidget<MailboxController> {
? Center(child: Padding(
padding: EdgeInsets.only(top: 16),
child: SizedBox(
width: 30,
height: 30,
width: 24,
height: 24,
child: CircularProgressIndicator(color: AppColor.primaryColor))))
: SizedBox.shrink()));
}
@@ -128,7 +128,7 @@ class MailboxView extends GetWidget<MailboxController> {
: SizedBox.shrink()),
Padding(
padding: EdgeInsets.only(
left: responsiveUtils.isMobile(context) ? 40 : 32,
left: 25,
top: 20),
child: Text(
AppLocalizations.of(context).my_folders,
@@ -137,12 +137,12 @@ class MailboxView extends GetWidget<MailboxController> {
),
Padding(
padding: EdgeInsets.only(
left: responsiveUtils.isMobile(context) ? 16 : 2,
left: 8,
right: 16,
top: 10),
child: MailboxNewFolderTileBuilder(context, responsiveUtils)
.addIcon(imagePaths.icMailboxNewFolder)
.addName(AppLocalizations.of(context).new_folder)
child: (MailboxNewFolderTileBuilder()
..addIcon(imagePaths.icMailboxNewFolder)
..addName(AppLocalizations.of(context).new_folder))
.build()
),
_buildFolderMailbox(context),
@@ -159,9 +159,7 @@ class MailboxView extends GetWidget<MailboxController> {
primary: false,
itemBuilder: (context, index) =>
Obx(() => (MailboxTileBuilder(
context,
imagePaths,
responsiveUtils,
defaultMailbox[index],
selectMode: controller.getSelectMode(
defaultMailbox[index],
@@ -173,9 +171,9 @@ class MailboxView extends GetWidget<MailboxController> {
Widget _buildFolderMailbox(BuildContext context) {
return Obx(() => controller.folderMailboxNodeList.isNotEmpty
? Transform(
transform: Matrix4.translationValues(responsiveUtils.isMobile(context) ? 0.0 : -15.0, 0.0, 0.0),
transform: Matrix4.translationValues(-4.0, 0.0, 0.0),
child: Padding(
padding: EdgeInsets.only(left: 4, right: 16),
padding: EdgeInsets.only(right: 12),
child: TreeView(
startExpanded: false,
key: Key('folder_mailbox_list'),
@@ -9,29 +9,23 @@ typedef OnOpenMailboxNewFolderActionClick = void Function();
class MailboxNewFolderTileBuilder {
final BuildContext _context;
final ResponsiveUtils _responsiveUtils;
String? _icon;
String? _name;
OnOpenMailboxNewFolderActionClick? _onOpenMailboxFolderActionClick;
MailboxNewFolderTileBuilder(this._context, this._responsiveUtils);
MailboxNewFolderTileBuilder();
MailboxNewFolderTileBuilder addIcon(String icon) {
void addIcon(String icon) {
_icon = icon;
return this;
}
MailboxNewFolderTileBuilder addName(String name) {
void addName(String name) {
_name = name;
return this;
}
MailboxNewFolderTileBuilder onOpenMailboxFolderAction(OnOpenMailboxNewFolderActionClick onOpenMailboxFolderActionClick) {
void onOpenMailboxFolderAction(OnOpenMailboxNewFolderActionClick onOpenMailboxFolderActionClick) {
_onOpenMailboxFolderActionClick = onOpenMailboxFolderActionClick;
return this;
}
Widget build() {
@@ -55,7 +49,7 @@ class MailboxNewFolderTileBuilder {
}
},
leading: Padding(
padding: EdgeInsets.only(left: _responsiveUtils.isMobile(_context) ? 42 : 34),
padding: EdgeInsets.only(left: 34),
child: _icon != null
? SvgPicture.asset(_icon!, width: 24, height: 24, color: AppColor.mailboxIconColor, fit: BoxFit.fill)
: SizedBox.shrink()),
@@ -42,72 +42,74 @@ class MailBoxFolderTileBuilder {
}
Widget build() {
return Container(
key: Key('mailbox_folder_tile'),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular( mailboxDisplayed == MailboxDisplayed.mailbox ? 16 : 0),
color: mailboxDisplayed == MailboxDisplayed.mailbox
? selectMode == SelectMode.ACTIVE ? AppColor.mailboxSelectedBackgroundColor : AppColor.mailboxBackgroundColor
: AppColor.bgMailboxListMail
),
child: MediaQuery(
data: MediaQueryData(padding: EdgeInsets.zero),
child: ListTile(
onTap: () {
if (_onSelectMailboxFolderClick != null) {
_onSelectMailboxFolderClick!(_mailboxNode);
}
},
contentPadding: EdgeInsets.zero,
leading: Padding(
padding: EdgeInsets.only(left: mailboxDisplayed == MailboxDisplayed.mailbox
? _responsiveUtils.isMobile(_context) ? 40 : 34
: 34),
child: SvgPicture.asset(
_imagePaths.icMailboxFolder,
width: 24,
height: 24,
color: selectMode == SelectMode.ACTIVE
? AppColor.mailboxSelectedIconColor
: AppColor.mailboxIconColor,
fit: BoxFit.fill)),
title: Padding(
padding: EdgeInsets.only(left: 8),
child: Text(
_mailboxNode.item.name!.name,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 15,
return Theme(
data: ThemeData(
splashColor: Colors.transparent,
highlightColor: Colors.transparent),
child: Container(
key: Key('mailbox_folder_tile'),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular( mailboxDisplayed == MailboxDisplayed.mailbox ? 16 : 0),
color: mailboxDisplayed == MailboxDisplayed.mailbox
? selectMode == SelectMode.ACTIVE ? AppColor.mailboxSelectedBackgroundColor : AppColor.mailboxBackgroundColor
: AppColor.bgMailboxListMail
),
child: MediaQuery(
data: MediaQueryData(padding: EdgeInsets.zero),
child: ListTile(
onTap: () {
if (_onSelectMailboxFolderClick != null) {
_onSelectMailboxFolderClick!(_mailboxNode);
}
},
contentPadding: EdgeInsets.zero,
leading: Padding(
padding: EdgeInsets.only(left: 26),
child: SvgPicture.asset(
_imagePaths.icMailboxFolder,
width: 24,
height: 24,
color: selectMode == SelectMode.ACTIVE
? AppColor.mailboxSelectedTextColor
: AppColor.mailboxTextColor,
fontWeight: mailboxDisplayed == MailboxDisplayed.mailbox ? FontWeight.bold : FontWeight.w500),
)),
trailing: Padding(
padding: EdgeInsets.only(
right: mailboxDisplayed == MailboxDisplayed.mailbox
? _responsiveUtils.isMobile(_context) ? 36 : 8
: 36,
left: mailboxDisplayed == MailboxDisplayed.mailbox ? 16 : 16),
child: _mailboxNode.hasChildren()
? GestureDetector(
onTap: () {
if (_onExpandFolderActionClick != null) {
_onExpandFolderActionClick!(_mailboxNode);
? AppColor.mailboxSelectedIconColor
: AppColor.mailboxIconColor,
fit: BoxFit.fill)),
title: Padding(
padding: EdgeInsets.only(left: 8),
child: Text(
_mailboxNode.item.name!.name,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 15,
color: selectMode == SelectMode.ACTIVE
? AppColor.mailboxSelectedTextColor
: AppColor.mailboxTextColor,
fontWeight: mailboxDisplayed == MailboxDisplayed.mailbox ? FontWeight.bold : FontWeight.w500),
)),
trailing: Padding(
padding: EdgeInsets.only(
right: mailboxDisplayed == MailboxDisplayed.mailbox
? _responsiveUtils.isMobile(_context) ? 0 : 8
: 0,
left: 16),
child: _mailboxNode.hasChildren()
? IconButton(
color: AppColor.primaryColor,
icon: SvgPicture.asset(
_mailboxNode.expandMode == ExpandMode.EXPAND ? _imagePaths.icExpandFolder : _imagePaths.icFolderArrow,
color: selectMode == SelectMode.ACTIVE
? AppColor.mailboxSelectedIconColor
: AppColor.mailboxIconColor,
fit: BoxFit.fill),
onPressed: () {
if (_onExpandFolderActionClick != null) {
_onExpandFolderActionClick!(_mailboxNode);
}
}
},
child: SvgPicture.asset(
_mailboxNode.expandMode == ExpandMode.EXPAND ? _imagePaths.icExpandFolder : _imagePaths.icFolderArrow,
width: _mailboxNode.expandMode == ExpandMode.EXPAND ? 8 : 12,
height: _mailboxNode.expandMode == ExpandMode.EXPAND ? 8 : 12,
color: selectMode == SelectMode.ACTIVE
? AppColor.mailboxSelectedIconColor
: AppColor.mailboxIconColor,
fit: BoxFit.fill),
)
: SizedBox.shrink())
)
: SizedBox.shrink())
)
)
)
);
@@ -14,17 +14,13 @@ class MailboxTileBuilder {
final PresentationMailbox _presentationMailbox;
final SelectMode selectMode;
final BuildContext _context;
final ImagePaths _imagePaths;
final ResponsiveUtils _responsiveUtils;
final MailboxDisplayed mailboxDisplayed;
OnOpenMailboxActionClick? _onOpenMailboxActionClick;
MailboxTileBuilder(
this._context,
this._imagePaths,
this._responsiveUtils,
this._presentationMailbox,
{
this.selectMode = SelectMode.INACTIVE,
@@ -53,8 +49,6 @@ class MailboxTileBuilder {
child: MediaQuery(
data: MediaQueryData(padding: EdgeInsets.zero),
child: ListTile(
focusColor: AppColor.primaryLightColor,
hoverColor: AppColor.primaryLightColor,
contentPadding: EdgeInsets.zero,
onTap: () => {
if (_onOpenMailboxActionClick != null) {
@@ -62,10 +56,7 @@ class MailboxTileBuilder {
}
},
leading: Padding(
padding: EdgeInsets.only(left: mailboxDisplayed == MailboxDisplayed.mailbox
? _responsiveUtils.isMobile(_context) ? 40 : 20
: 40
),
padding: EdgeInsets.only(left: 24),
child: SvgPicture.asset(
'${_presentationMailbox.getMailboxIcon(_imagePaths)}',
width: 24,
@@ -89,7 +80,7 @@ class MailboxTileBuilder {
)),
trailing: mailboxDisplayed == MailboxDisplayed.mailbox
? Padding(
padding: EdgeInsets.only(right: _responsiveUtils.isMobile(_context) ? 36 : 24, left: 16),
padding: EdgeInsets.only(right: 24, left: 16),
child: Text(
'${_presentationMailbox.getCountUnReadEmails()}',
maxLines: 1,