TF-1581 Update UI to support language RTL
This commit is contained in:
@@ -26,6 +26,7 @@ class ButtonBuilder {
|
|||||||
double? _maxWidth;
|
double? _maxWidth;
|
||||||
EdgeInsets? _padding;
|
EdgeInsets? _padding;
|
||||||
String? _tooltip;
|
String? _tooltip;
|
||||||
|
BoxConstraints? _constraints;
|
||||||
|
|
||||||
void key(Key key) {
|
void key(Key key) {
|
||||||
_key = key;
|
_key = key;
|
||||||
@@ -84,6 +85,10 @@ class ButtonBuilder {
|
|||||||
_tooltip = message;
|
_tooltip = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void addBoxConstraints(BoxConstraints? constraints) {
|
||||||
|
_constraints = constraints;
|
||||||
|
}
|
||||||
|
|
||||||
ButtonBuilder(this._icon);
|
ButtonBuilder(this._icon);
|
||||||
|
|
||||||
void onPressActionClick(OnPressActionClick onPressActionClick) {
|
void onPressActionClick(OnPressActionClick onPressActionClick) {
|
||||||
@@ -122,6 +127,7 @@ class ButtonBuilder {
|
|||||||
color: _decoration == null ? _colorButton : null,
|
color: _decoration == null ? _colorButton : null,
|
||||||
decoration: _decoration,
|
decoration: _decoration,
|
||||||
width: _maxWidth,
|
width: _maxWidth,
|
||||||
|
constraints: _constraints,
|
||||||
padding: _padding ?? EdgeInsets.zero,
|
padding: _padding ?? EdgeInsets.zero,
|
||||||
child: _buildBody()
|
child: _buildBody()
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ class TreeViewChild {
|
|||||||
final List<Widget> children;
|
final List<Widget> children;
|
||||||
final VoidCallback? onTap;
|
final VoidCallback? onTap;
|
||||||
final EdgeInsets? paddingChild;
|
final EdgeInsets? paddingChild;
|
||||||
|
final bool isDirectionRTL;
|
||||||
|
|
||||||
TreeViewChild(
|
TreeViewChild(
|
||||||
this.context,
|
this.context,
|
||||||
@@ -67,6 +68,7 @@ class TreeViewChild {
|
|||||||
this.isExpanded,
|
this.isExpanded,
|
||||||
this.onTap,
|
this.onTap,
|
||||||
this.paddingChild,
|
this.paddingChild,
|
||||||
|
this.isDirectionRTL = false,
|
||||||
Key? key,
|
Key? key,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -90,7 +92,10 @@ class TreeViewChild {
|
|||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: children
|
children: children
|
||||||
.map((child) => Padding(
|
.map((child) => Padding(
|
||||||
padding: paddingChild ?? const EdgeInsets.only(left: 20),
|
padding: paddingChild ?? EdgeInsets.only(
|
||||||
|
left: isDirectionRTL ? 0 : 20,
|
||||||
|
right: isDirectionRTL ? 20 : 0,
|
||||||
|
),
|
||||||
child: child
|
child: child
|
||||||
))
|
))
|
||||||
.toList()
|
.toList()
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ class QuickSearchInputForm<T, R> extends FormField<String> {
|
|||||||
bool hideSuggestionsBox = false,
|
bool hideSuggestionsBox = false,
|
||||||
BoxDecoration? decoration,
|
BoxDecoration? decoration,
|
||||||
double? maxHeight,
|
double? maxHeight,
|
||||||
|
bool isDirectionRTL = false,
|
||||||
}) : assert(
|
}) : assert(
|
||||||
initialValue == null || textFieldConfiguration.controller == null),
|
initialValue == null || textFieldConfiguration.controller == null),
|
||||||
assert(minCharsForSuggestions >= 0),
|
assert(minCharsForSuggestions >= 0),
|
||||||
@@ -152,6 +153,7 @@ class QuickSearchInputForm<T, R> extends FormField<String> {
|
|||||||
hideSuggestionsBox: hideSuggestionsBox,
|
hideSuggestionsBox: hideSuggestionsBox,
|
||||||
decoration: decoration,
|
decoration: decoration,
|
||||||
maxHeight: maxHeight,
|
maxHeight: maxHeight,
|
||||||
|
isDirectionRTL: isDirectionRTL,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -519,6 +521,8 @@ class TypeAheadFieldQuickSearch<T, R> extends StatefulWidget {
|
|||||||
/// Max height search input
|
/// Max height search input
|
||||||
final double? maxHeight;
|
final double? maxHeight;
|
||||||
|
|
||||||
|
final bool isDirectionRTL;
|
||||||
|
|
||||||
/// Creates a [TypeAheadFieldQuickSearch]
|
/// Creates a [TypeAheadFieldQuickSearch]
|
||||||
const TypeAheadFieldQuickSearch(
|
const TypeAheadFieldQuickSearch(
|
||||||
{Key? key,
|
{Key? key,
|
||||||
@@ -560,6 +564,7 @@ class TypeAheadFieldQuickSearch<T, R> extends StatefulWidget {
|
|||||||
this.hideSuggestionsBox = false,
|
this.hideSuggestionsBox = false,
|
||||||
this.decoration,
|
this.decoration,
|
||||||
this.maxHeight,
|
this.maxHeight,
|
||||||
|
this.isDirectionRTL = false,
|
||||||
}) : assert(animationStart >= 0.0 && animationStart <= 1.0),
|
}) : assert(animationStart >= 0.0 && animationStart <= 1.0),
|
||||||
assert(
|
assert(
|
||||||
direction == AxisDirection.down || direction == AxisDirection.up),
|
direction == AxisDirection.down || direction == AxisDirection.up),
|
||||||
@@ -748,6 +753,7 @@ class _TypeAheadFieldQuickSearchState<T, R> extends State<TypeAheadFieldQuickSea
|
|||||||
},
|
},
|
||||||
listActionPadding: widget.listActionPadding,
|
listActionPadding: widget.listActionPadding,
|
||||||
hideSuggestionsBox: widget.hideSuggestionsBox,
|
hideSuggestionsBox: widget.hideSuggestionsBox,
|
||||||
|
isDirectionRTL: widget.isDirectionRTL,
|
||||||
);
|
);
|
||||||
|
|
||||||
double w = _suggestionsBox!.textBoxWidth;
|
double w = _suggestionsBox!.textBoxWidth;
|
||||||
@@ -899,6 +905,7 @@ class _SuggestionsList<T, R> extends StatefulWidget {
|
|||||||
final RecentSelectionCallback<R>? onRecentSelected;
|
final RecentSelectionCallback<R>? onRecentSelected;
|
||||||
final EdgeInsets? listActionPadding;
|
final EdgeInsets? listActionPadding;
|
||||||
final bool hideSuggestionsBox;
|
final bool hideSuggestionsBox;
|
||||||
|
final bool isDirectionRTL;
|
||||||
|
|
||||||
const _SuggestionsList({
|
const _SuggestionsList({
|
||||||
required this.suggestionsBox,
|
required this.suggestionsBox,
|
||||||
@@ -932,6 +939,7 @@ class _SuggestionsList<T, R> extends StatefulWidget {
|
|||||||
this.onRecentSelected,
|
this.onRecentSelected,
|
||||||
this.listActionPadding,
|
this.listActionPadding,
|
||||||
this.hideSuggestionsBox = false,
|
this.hideSuggestionsBox = false,
|
||||||
|
this.isDirectionRTL = false,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -1174,7 +1182,11 @@ class _SuggestionsListState<T, R> extends State<_SuggestionsList<T, R>>
|
|||||||
children: widget.listActionButton!.map((dynamic action) {
|
children: widget.listActionButton!.map((dynamic action) {
|
||||||
if (widget.actionButtonBuilder != null) {
|
if (widget.actionButtonBuilder != null) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 8, bottom: kIsWeb ? 8 : 0),
|
padding: EdgeInsets.only(
|
||||||
|
right: widget.isDirectionRTL ? 0 : 8,
|
||||||
|
left: widget.isDirectionRTL ? 8 : 0,
|
||||||
|
bottom: kIsWeb ? 8 : 0
|
||||||
|
),
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
@@ -1255,7 +1267,11 @@ class _SuggestionsListState<T, R> extends State<_SuggestionsList<T, R>>
|
|||||||
children: widget.listActionButton!.map((dynamic action) {
|
children: widget.listActionButton!.map((dynamic action) {
|
||||||
if (widget.actionButtonBuilder != null) {
|
if (widget.actionButtonBuilder != null) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 8, bottom: kIsWeb ? 8 : 0),
|
padding: EdgeInsets.only(
|
||||||
|
right: widget.isDirectionRTL ? 0 : 8,
|
||||||
|
left: widget.isDirectionRTL ? 8 : 0,
|
||||||
|
bottom: kIsWeb ? 8 : 0
|
||||||
|
),
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import 'package:tmail_ui_user/features/upload/presentation/extensions/list_uploa
|
|||||||
import 'package:tmail_ui_user/features/upload/presentation/model/upload_file_state.dart';
|
import 'package:tmail_ui_user/features/upload/presentation/model/upload_file_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class ComposerView extends GetWidget<ComposerController>
|
class ComposerView extends GetWidget<ComposerController>
|
||||||
with AppLoaderMixin, RichTextButtonMixin, ComposerLoadingMixin {
|
with AppLoaderMixin, RichTextButtonMixin, ComposerLoadingMixin {
|
||||||
@@ -271,7 +272,8 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
Widget _buildFromEmailAddress(BuildContext context) {
|
Widget _buildFromEmailAddress(BuildContext context) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
left: responsiveUtils.isMobile(context) ? 16 : 0,
|
left: AppUtils.isDirectionRTL(context) ? 0 : responsiveUtils.isMobile(context) ? 16 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? responsiveUtils.isMobile(context) ? 16 : 0 : 0,
|
||||||
top: 12,
|
top: 12,
|
||||||
bottom: 12),
|
bottom: 12),
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
@@ -324,7 +326,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Expanded(child: Padding(
|
Expanded(child: Padding(
|
||||||
padding: const EdgeInsets.only(right: 8, left: 12),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 12 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 12
|
||||||
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
controller.identitySelected.value?.email ?? '',
|
controller.identitySelected.value?.email ?? '',
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
@@ -339,7 +344,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
Obx(() => Padding(
|
Obx(() => Padding(
|
||||||
padding: EdgeInsets.only(left: responsiveUtils.isMobile(context) ? 16 : 0),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : responsiveUtils.isMobile(context) ? 16 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? responsiveUtils.isMobile(context) ? 16 : 0 : 0,
|
||||||
|
),
|
||||||
child: (EmailAddressInputBuilder(context, imagePaths,
|
child: (EmailAddressInputBuilder(context, imagePaths,
|
||||||
PrefixEmailAddress.to,
|
PrefixEmailAddress.to,
|
||||||
controller.listToEmailAddress,
|
controller.listToEmailAddress,
|
||||||
@@ -362,7 +370,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
Obx(() => controller.listEmailAddressType.contains(PrefixEmailAddress.cc) == true
|
Obx(() => controller.listEmailAddressType.contains(PrefixEmailAddress.cc) == true
|
||||||
? Padding(
|
? Padding(
|
||||||
padding: EdgeInsets.only(left: responsiveUtils.isMobile(context) ? 16 : 0),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : responsiveUtils.isMobile(context) ? 16 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? responsiveUtils.isMobile(context) ? 16 : 0 : 0,
|
||||||
|
),
|
||||||
child: (EmailAddressInputBuilder(context, imagePaths,
|
child: (EmailAddressInputBuilder(context, imagePaths,
|
||||||
PrefixEmailAddress.cc,
|
PrefixEmailAddress.cc,
|
||||||
controller.listCcEmailAddress,
|
controller.listCcEmailAddress,
|
||||||
@@ -384,7 +395,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
Obx(() => controller.listEmailAddressType.contains(PrefixEmailAddress.bcc) == true
|
Obx(() => controller.listEmailAddressType.contains(PrefixEmailAddress.bcc) == true
|
||||||
? Padding(
|
? Padding(
|
||||||
padding: EdgeInsets.only(left: responsiveUtils.isMobile(context) ? 16 : 0),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : responsiveUtils.isMobile(context) ? 16 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? responsiveUtils.isMobile(context) ? 16 : 0 : 0,
|
||||||
|
),
|
||||||
child: (EmailAddressInputBuilder(context, imagePaths,
|
child: (EmailAddressInputBuilder(context, imagePaths,
|
||||||
PrefixEmailAddress.bcc,
|
PrefixEmailAddress.bcc,
|
||||||
controller.listBccEmailAddress,
|
controller.listBccEmailAddress,
|
||||||
@@ -410,7 +424,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
return Row(
|
return Row(
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(right: 8),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0
|
||||||
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
'${AppLocalizations.of(context).subject_email}:',
|
'${AppLocalizations.of(context).subject_email}:',
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
@@ -478,7 +495,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
physics: const ClampingScrollPhysics(),
|
physics: const ClampingScrollPhysics(),
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 16),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 16
|
||||||
|
),
|
||||||
child: Row(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
child: Row(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||||
Padding(padding: const EdgeInsets.only(top: 20),
|
Padding(padding: const EdgeInsets.only(top: 20),
|
||||||
child: (AvatarBuilder()
|
child: (AvatarBuilder()
|
||||||
@@ -498,13 +518,22 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
_buildEmailAddress(context),
|
_buildEmailAddress(context),
|
||||||
const Divider(color: AppColor.colorDividerComposer, height: 1),
|
const Divider(color: AppColor.colorDividerComposer, height: 1),
|
||||||
Padding(padding: const EdgeInsets.only(right: 16), child: _buildSubjectEmail(context)),
|
Padding(
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
),
|
||||||
|
child: _buildSubjectEmail(context)
|
||||||
|
),
|
||||||
]),
|
]),
|
||||||
))
|
))
|
||||||
])),
|
])),
|
||||||
const Divider(color: AppColor.colorDividerComposer, height: 1),
|
const Divider(color: AppColor.colorDividerComposer, height: 1),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 60, right: 25),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 25 : 60,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 60 : 25,
|
||||||
|
),
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
_buildAttachmentsWidget(context),
|
_buildAttachmentsWidget(context),
|
||||||
buildInlineLoadingView(controller),
|
buildInlineLoadingView(controller),
|
||||||
@@ -662,7 +691,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
itemCount: uploadFilesState.length,
|
itemCount: uploadFilesState.length,
|
||||||
itemBuilder: (context, index) => AttachmentFileComposerBuilder(
|
itemBuilder: (context, index) => AttachmentFileComposerBuilder(
|
||||||
uploadFilesState[index],
|
uploadFilesState[index],
|
||||||
itemMargin: const EdgeInsets.only(right: 8),
|
itemMargin: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
),
|
||||||
maxWidth: _getMaxWidthItemListAttachment(context, constraints),
|
maxWidth: _getMaxWidthItemListAttachment(context, constraints),
|
||||||
onDeleteAttachmentAction: (attachment) =>
|
onDeleteAttachmentAction: (attachment) =>
|
||||||
controller.deleteAttachmentUploaded(attachment.uploadTaskId))
|
controller.deleteAttachmentUploaded(attachment.uploadTaskId))
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import 'package:tmail_ui_user/features/upload/presentation/extensions/list_uploa
|
|||||||
import 'package:tmail_ui_user/features/upload/presentation/model/upload_file_state.dart';
|
import 'package:tmail_ui_user/features/upload/presentation/model/upload_file_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class ComposerView extends GetWidget<ComposerController>
|
class ComposerView extends GetWidget<ComposerController>
|
||||||
with AppLoaderMixin, RichTextButtonMixin, ComposerLoadingMixin {
|
with AppLoaderMixin, RichTextButtonMixin, ComposerLoadingMixin {
|
||||||
@@ -76,56 +77,111 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
desktop: Obx(() {
|
desktop: Obx(() {
|
||||||
return Stack(children: [
|
return Stack(children: [
|
||||||
if (controller.screenDisplayMode.value == ScreenDisplayMode.normal)
|
if (controller.screenDisplayMode.value == ScreenDisplayMode.normal)
|
||||||
Positioned(right: 5, bottom: 5, child: Card(
|
if (AppUtils.isDirectionRTL(context))
|
||||||
|
Positioned(left: 5, bottom: 5, child: Card(
|
||||||
elevation: 20,
|
elevation: 20,
|
||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(24))),
|
shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(24))),
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: const BoxDecoration(color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(24))),
|
decoration: const BoxDecoration(color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(24))),
|
||||||
width: responsiveUtils.getSizeScreenWidth(context) * 0.5,
|
width: responsiveUtils.getSizeScreenWidth(context) * 0.5,
|
||||||
height: responsiveUtils.getSizeScreenHeight(context) * 0.75,
|
height: responsiveUtils.getSizeScreenHeight(context) * 0.75,
|
||||||
child: ClipRRect(
|
child: ClipRRect(
|
||||||
borderRadius: const BorderRadius.all(Radius.circular(24)),
|
borderRadius: const BorderRadius.all(Radius.circular(24)),
|
||||||
child: LayoutBuilder(builder: (context, constraints) =>
|
child: LayoutBuilder(builder: (context, constraints) =>
|
||||||
PointerInterceptor(child: _buildBodyForDesktop(context, constraints)))
|
PointerInterceptor(child: _buildBodyForDesktop(context, constraints))
|
||||||
)
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)),
|
))
|
||||||
|
else
|
||||||
|
Positioned(right: 5, bottom: 5, child: Card(
|
||||||
|
elevation: 20,
|
||||||
|
color: Colors.transparent,
|
||||||
|
shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(24))),
|
||||||
|
child: Container(
|
||||||
|
decoration: const BoxDecoration(color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(24))),
|
||||||
|
width: responsiveUtils.getSizeScreenWidth(context) * 0.5,
|
||||||
|
height: responsiveUtils.getSizeScreenHeight(context) * 0.75,
|
||||||
|
child: ClipRRect(
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(24)),
|
||||||
|
child: LayoutBuilder(builder: (context, constraints) =>
|
||||||
|
PointerInterceptor(child: _buildBodyForDesktop(context, constraints))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)),
|
||||||
if (controller.screenDisplayMode.value == ScreenDisplayMode.minimize)
|
if (controller.screenDisplayMode.value == ScreenDisplayMode.minimize)
|
||||||
Positioned(right: 5, bottom: 5, child: Card(
|
if (AppUtils.isDirectionRTL(context))
|
||||||
|
Positioned(left: 5, bottom: 5, child: Card(
|
||||||
elevation: 20,
|
elevation: 20,
|
||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(16))),
|
shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(16))),
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: const BoxDecoration(color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(16))),
|
decoration: const BoxDecoration(color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(16))),
|
||||||
width: 500,
|
width: 500,
|
||||||
height: 50,
|
height: 50,
|
||||||
child: ClipRRect(
|
child: ClipRRect(
|
||||||
borderRadius: const BorderRadius.all(Radius.circular(16)),
|
borderRadius: const BorderRadius.all(Radius.circular(16)),
|
||||||
child: PointerInterceptor(child: Row(children: [
|
child: PointerInterceptor(child: Row(children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 10),
|
padding: const EdgeInsets.only(left: 10),
|
||||||
child: buildIconWeb(
|
child: buildIconWeb(
|
||||||
icon: SvgPicture.asset(imagePaths.icCloseMailbox, fit: BoxFit.fill),
|
icon: SvgPicture.asset(imagePaths.icCloseMailbox, fit: BoxFit.fill),
|
||||||
tooltip: AppLocalizations.of(context).saveAndClose,
|
tooltip: AppLocalizations.of(context).saveAndClose,
|
||||||
onTap: () => controller.saveEmailAsDrafts(context)
|
onTap: () => controller.saveEmailAsDrafts(context)
|
||||||
)),
|
)),
|
||||||
buildIconWeb(
|
buildIconWeb(
|
||||||
icon: SvgPicture.asset(imagePaths.icFullScreenComposer, fit: BoxFit.fill),
|
icon: SvgPicture.asset(imagePaths.icFullScreenComposer, fit: BoxFit.fill),
|
||||||
tooltip: AppLocalizations.of(context).fullscreen,
|
tooltip: AppLocalizations.of(context).fullscreen,
|
||||||
onTap: () => controller.displayScreenTypeComposerAction(ScreenDisplayMode.fullScreen)),
|
onTap: () => controller.displayScreenTypeComposerAction(ScreenDisplayMode.fullScreen)),
|
||||||
buildIconWeb(
|
buildIconWeb(
|
||||||
icon: SvgPicture.asset(imagePaths.icChevronUp, fit: BoxFit.fill),
|
icon: SvgPicture.asset(imagePaths.icChevronUp, fit: BoxFit.fill),
|
||||||
tooltip: AppLocalizations.of(context).show,
|
tooltip: AppLocalizations.of(context).show,
|
||||||
onTap: () => controller.displayScreenTypeComposerAction(ScreenDisplayMode.normal)),
|
onTap: () => controller.displayScreenTypeComposerAction(ScreenDisplayMode.normal)),
|
||||||
Expanded(child: Padding(
|
Expanded(child: Padding(
|
||||||
padding: const EdgeInsets.only(left: 16, right: 80),
|
padding: const EdgeInsets.only(left: 16, right: 80),
|
||||||
child: _buildTitleComposer(context),
|
child: _buildTitleComposer(context),
|
||||||
)),
|
)),
|
||||||
]))
|
]))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)),
|
))
|
||||||
|
else
|
||||||
|
Positioned(right: 5, bottom: 5, child: Card(
|
||||||
|
elevation: 20,
|
||||||
|
color: Colors.transparent,
|
||||||
|
shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(16))),
|
||||||
|
child: Container(
|
||||||
|
decoration: const BoxDecoration(color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(16))),
|
||||||
|
width: 500,
|
||||||
|
height: 50,
|
||||||
|
child: ClipRRect(
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(16)),
|
||||||
|
child: PointerInterceptor(child: Row(children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 10),
|
||||||
|
child: buildIconWeb(
|
||||||
|
icon: SvgPicture.asset(imagePaths.icCloseMailbox, fit: BoxFit.fill),
|
||||||
|
tooltip: AppLocalizations.of(context).saveAndClose,
|
||||||
|
onTap: () => controller.saveEmailAsDrafts(context)
|
||||||
|
)),
|
||||||
|
buildIconWeb(
|
||||||
|
icon: SvgPicture.asset(imagePaths.icFullScreenComposer, fit: BoxFit.fill),
|
||||||
|
tooltip: AppLocalizations.of(context).fullscreen,
|
||||||
|
onTap: () => controller.displayScreenTypeComposerAction(ScreenDisplayMode.fullScreen)),
|
||||||
|
buildIconWeb(
|
||||||
|
icon: SvgPicture.asset(imagePaths.icChevronUp, fit: BoxFit.fill),
|
||||||
|
tooltip: AppLocalizations.of(context).show,
|
||||||
|
onTap: () => controller.displayScreenTypeComposerAction(ScreenDisplayMode.normal)),
|
||||||
|
Expanded(child: Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 16, right: 80),
|
||||||
|
child: _buildTitleComposer(context),
|
||||||
|
)),
|
||||||
|
]))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)),
|
||||||
if (controller.screenDisplayMode.value == ScreenDisplayMode.fullScreen)
|
if (controller.screenDisplayMode.value == ScreenDisplayMode.fullScreen)
|
||||||
Scaffold(
|
Scaffold(
|
||||||
backgroundColor: Colors.black38,
|
backgroundColor: Colors.black38,
|
||||||
@@ -326,7 +382,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
Padding(padding: const EdgeInsets.only(left: 20, right: 20, top: 8), child: _buildAppBar(context)),
|
Padding(padding: const EdgeInsets.only(left: 20, right: 20, top: 8), child: _buildAppBar(context)),
|
||||||
const Padding(padding: EdgeInsets.only(top: 8), child: Divider(color: AppColor.colorDividerComposer, height: 1)),
|
const Padding(padding: EdgeInsets.only(top: 8), child: Divider(color: AppColor.colorDividerComposer, height: 1)),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 16),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
),
|
||||||
child: Row(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
child: Row(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||||
Padding(padding: const EdgeInsets.only(top: 20),
|
Padding(padding: const EdgeInsets.only(top: 20),
|
||||||
child: (AvatarBuilder()
|
child: (AvatarBuilder()
|
||||||
@@ -336,7 +395,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
..backgroundColor(AppColor.colorAvatar))
|
..backgroundColor(AppColor.colorAvatar))
|
||||||
.build()),
|
.build()),
|
||||||
Expanded(child: Padding(
|
Expanded(child: Padding(
|
||||||
padding: const EdgeInsets.only(left: 12),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 12 : 0,
|
||||||
|
),
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
Obx(() => controller.identitySelected.value != null
|
Obx(() => controller.identitySelected.value != null
|
||||||
? _buildFromEmailAddress(context)
|
? _buildFromEmailAddress(context)
|
||||||
@@ -346,7 +408,13 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
_buildEmailAddress(context, constraints),
|
_buildEmailAddress(context, constraints),
|
||||||
const Divider(color: AppColor.colorDividerComposer, height: 1),
|
const Divider(color: AppColor.colorDividerComposer, height: 1),
|
||||||
Padding(padding: const EdgeInsets.only(right: 16), child: _buildSubjectEmail(context)),
|
Padding(
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
),
|
||||||
|
child: _buildSubjectEmail(context)
|
||||||
|
),
|
||||||
const Divider(color: AppColor.colorDividerComposer, height: 1),
|
const Divider(color: AppColor.colorDividerComposer, height: 1),
|
||||||
_buildListButton(context, constraints),
|
_buildListButton(context, constraints),
|
||||||
]),
|
]),
|
||||||
@@ -355,8 +423,9 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
const Divider(color: AppColor.colorDividerComposer, height: 1),
|
const Divider(color: AppColor.colorDividerComposer, height: 1),
|
||||||
Expanded(child: Padding(
|
Expanded(child: Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
left: responsiveUtils.isMobile(context) ? 16 : 60,
|
left: AppUtils.isDirectionRTL(context) ? responsiveUtils.isMobile(context) ? 16 : 25 : responsiveUtils.isMobile(context) ? 16 : 60,
|
||||||
right: responsiveUtils.isMobile(context) ? 16 : 25),
|
right: AppUtils.isDirectionRTL(context) ? responsiveUtils.isMobile(context) ? 16 : 60 : responsiveUtils.isMobile(context) ? 16 : 25,
|
||||||
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
_buildAttachmentsWidget(context),
|
_buildAttachmentsWidget(context),
|
||||||
@@ -384,7 +453,8 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
Widget _buildFromEmailAddress(BuildContext context) {
|
Widget _buildFromEmailAddress(BuildContext context) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
left: responsiveUtils.isMobile(context) ? 16 : 0,
|
left: AppUtils.isDirectionRTL(context) ? 0 : responsiveUtils.isMobile(context) ? 16 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? responsiveUtils.isMobile(context) ? 16 : 0 : 0,
|
||||||
top: 12,
|
top: 12,
|
||||||
bottom: 12),
|
bottom: 12),
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
@@ -447,7 +517,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Expanded(child: Padding(
|
Expanded(child: Padding(
|
||||||
padding: const EdgeInsets.only(right: 8, left: 12),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 12 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 12,
|
||||||
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
controller.identitySelected.value?.email ?? '',
|
controller.identitySelected.value?.email ?? '',
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
@@ -471,7 +544,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Obx(() => Padding(
|
Obx(() => Padding(
|
||||||
padding: EdgeInsets.only(left: responsiveUtils.isMobile(context) ? 16 : 0),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : responsiveUtils.isMobile(context) ? 16 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? responsiveUtils.isMobile(context) ? 16 : 0 : 0
|
||||||
|
),
|
||||||
child: (EmailAddressInputBuilder(context, imagePaths,
|
child: (EmailAddressInputBuilder(context, imagePaths,
|
||||||
PrefixEmailAddress.to,
|
PrefixEmailAddress.to,
|
||||||
controller.listToEmailAddress,
|
controller.listToEmailAddress,
|
||||||
@@ -495,8 +571,11 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
Obx(() => controller.listEmailAddressType.contains(PrefixEmailAddress.cc) == true
|
Obx(() => controller.listEmailAddressType.contains(PrefixEmailAddress.cc) == true
|
||||||
? Padding(
|
? Padding(
|
||||||
padding: EdgeInsets.only(left: responsiveUtils.isMobile(context) ? 16 : 0),
|
padding: EdgeInsets.only(
|
||||||
child: (EmailAddressInputBuilder(context, imagePaths,
|
left: AppUtils.isDirectionRTL(context) ? 0 : responsiveUtils.isMobile(context) ? 16 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? responsiveUtils.isMobile(context) ? 16 : 0 : 0
|
||||||
|
),
|
||||||
|
child: (EmailAddressInputBuilder(context, imagePaths,
|
||||||
PrefixEmailAddress.cc,
|
PrefixEmailAddress.cc,
|
||||||
controller.listCcEmailAddress,
|
controller.listCcEmailAddress,
|
||||||
controller.listEmailAddressType,
|
controller.listEmailAddressType,
|
||||||
@@ -518,7 +597,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
: const SizedBox.shrink()),
|
: const SizedBox.shrink()),
|
||||||
Obx(() => controller.listEmailAddressType.contains(PrefixEmailAddress.bcc) == true
|
Obx(() => controller.listEmailAddressType.contains(PrefixEmailAddress.bcc) == true
|
||||||
? Padding(
|
? Padding(
|
||||||
padding: EdgeInsets.only(left: responsiveUtils.isMobile(context) ? 16 : 0),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : responsiveUtils.isMobile(context) ? 16 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? responsiveUtils.isMobile(context) ? 16 : 0 : 0
|
||||||
|
),
|
||||||
child: (EmailAddressInputBuilder(context, imagePaths,
|
child: (EmailAddressInputBuilder(context, imagePaths,
|
||||||
PrefixEmailAddress.bcc,
|
PrefixEmailAddress.bcc,
|
||||||
controller.listBccEmailAddress,
|
controller.listBccEmailAddress,
|
||||||
@@ -547,7 +629,11 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(right: 8, top: 16),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
top: 16
|
||||||
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
'${AppLocalizations.of(context).subject_email}:',
|
'${AppLocalizations.of(context).subject_email}:',
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
@@ -572,7 +658,11 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
|
|
||||||
Widget _buildListButton(BuildContext context, BoxConstraints constraints) {
|
Widget _buildListButton(BuildContext context, BoxConstraints constraints) {
|
||||||
return Transform(
|
return Transform(
|
||||||
transform: Matrix4.translationValues(-5.0, 0.0, 0.0),
|
transform: Matrix4.translationValues(
|
||||||
|
AppUtils.isDirectionRTL(context) ? 0.0 : -5.0,
|
||||||
|
0.0,
|
||||||
|
0.0
|
||||||
|
),
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 5),
|
padding: const EdgeInsets.symmetric(vertical: 5),
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
@@ -740,10 +830,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
return Column(children: [
|
return Column(children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
top: 4,
|
top: 4,
|
||||||
bottom: 4,
|
bottom: 4,
|
||||||
left: responsiveUtils.isMobile(context) ? 16 : 20,
|
left: AppUtils.isDirectionRTL(context) ? responsiveUtils.isMobile(context) ? 16: 0 : responsiveUtils.isMobile(context) ? 16 : 20,
|
||||||
right: responsiveUtils.isMobile(context) ? 16: 0),
|
right: AppUtils.isDirectionRTL(context) ? responsiveUtils.isMobile(context) ? 16 : 20 : responsiveUtils.isMobile(context) ? 16: 0),
|
||||||
child: _buildAttachmentsTitle(
|
child: _buildAttachmentsTitle(
|
||||||
context,
|
context,
|
||||||
attachments,
|
attachments,
|
||||||
@@ -810,7 +900,10 @@ class ComposerView extends GetWidget<ComposerController>
|
|||||||
itemCount: uploadFilesState.length,
|
itemCount: uploadFilesState.length,
|
||||||
itemBuilder: (context, index) => AttachmentFileComposerBuilder(
|
itemBuilder: (context, index) => AttachmentFileComposerBuilder(
|
||||||
uploadFilesState[index],
|
uploadFilesState[index],
|
||||||
itemMargin: const EdgeInsets.only(right: 8),
|
itemMargin: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0
|
||||||
|
),
|
||||||
maxWidth: _getMaxWidthItemListAttachment(context, constraints),
|
maxWidth: _getMaxWidthItemListAttachment(context, constraints),
|
||||||
onDeleteAttachmentAction: (attachment) =>
|
onDeleteAttachmentAction: (attachment) =>
|
||||||
controller.deleteAttachmentUploaded(attachment.uploadTaskId))
|
controller.deleteAttachmentUploaded(attachment.uploadTaskId))
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
|||||||
import 'package:tmail_ui_user/features/upload/presentation/model/upload_file_state.dart';
|
import 'package:tmail_ui_user/features/upload/presentation/model/upload_file_state.dart';
|
||||||
import 'package:tmail_ui_user/features/upload/presentation/model/upload_file_status.dart';
|
import 'package:tmail_ui_user/features/upload/presentation/model/upload_file_status.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
typedef OnDeleteAttachmentAction = void Function(UploadFileState fileState);
|
typedef OnDeleteAttachmentAction = void Function(UploadFileState fileState);
|
||||||
|
|
||||||
@@ -51,9 +52,11 @@ class AttachmentFileComposerBuilder extends StatelessWidget with AppLoaderMixin
|
|||||||
hoverColor: AppColor.primaryColor,
|
hoverColor: AppColor.primaryColor,
|
||||||
onTap: () {},
|
onTap: () {},
|
||||||
leading: Padding(
|
leading: Padding(
|
||||||
padding: const EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
left: 8,
|
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
bottom: BuildUtils.isWeb ? 6 : 14),
|
right: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
bottom: BuildUtils.isWeb ? 6 : 14
|
||||||
|
),
|
||||||
child: SvgPicture.asset(
|
child: SvgPicture.asset(
|
||||||
fileState.getIcon(_imagePaths),
|
fileState.getIcon(_imagePaths),
|
||||||
width: 40,
|
width: 40,
|
||||||
@@ -62,11 +65,14 @@ class AttachmentFileComposerBuilder extends StatelessWidget with AppLoaderMixin
|
|||||||
),
|
),
|
||||||
title: Transform(
|
title: Transform(
|
||||||
transform: Matrix4.translationValues(
|
transform: Matrix4.translationValues(
|
||||||
BuildUtils.isWeb ? 0.0 : -8.0,
|
AppUtils.isDirectionRTL(context) ? 0.0 : BuildUtils.isWeb ? 0.0 : -8.0,
|
||||||
BuildUtils.isWeb ? -8.0 : -10.0,
|
BuildUtils.isWeb ? -8.0 : -10.0,
|
||||||
0.0),
|
0.0),
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.only(right: BuildUtils.isWeb ? 20 : 16),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : BuildUtils.isWeb ? 20 : 16,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? BuildUtils.isWeb ? 20 : 16 : 0
|
||||||
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
fileState.fileName,
|
fileState.fileName,
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
@@ -82,7 +88,7 @@ class AttachmentFileComposerBuilder extends StatelessWidget with AppLoaderMixin
|
|||||||
subtitle: fileState.fileSize != 0
|
subtitle: fileState.fileSize != 0
|
||||||
? Transform(
|
? Transform(
|
||||||
transform: Matrix4.translationValues(
|
transform: Matrix4.translationValues(
|
||||||
BuildUtils.isWeb ? 0.0 : -8.0,
|
AppUtils.isDirectionRTL(context) ? 0.0 : BuildUtils.isWeb ? 0.0 : -8.0,
|
||||||
BuildUtils.isWeb ? -8.0 : -10.0,
|
BuildUtils.isWeb ? -8.0 : -10.0,
|
||||||
0.0),
|
0.0),
|
||||||
child: Text(
|
child: Text(
|
||||||
@@ -96,19 +102,34 @@ class AttachmentFileComposerBuilder extends StatelessWidget with AppLoaderMixin
|
|||||||
color: AppColor.colorContentEmail)))
|
color: AppColor.colorContentEmail)))
|
||||||
: null,
|
: null,
|
||||||
),
|
),
|
||||||
Positioned(
|
if (AppUtils.isDirectionRTL(context))
|
||||||
right: BuildUtils.isWeb ? -5 : -12,
|
Positioned(
|
||||||
top: BuildUtils.isWeb ? -5 : -12,
|
left: BuildUtils.isWeb ? -5 : -12,
|
||||||
child: buildIconWeb(
|
top: BuildUtils.isWeb ? -5 : -12,
|
||||||
icon: SvgPicture.asset(_imagePaths.icDeleteAttachment, fit: BoxFit.fill),
|
child: buildIconWeb(
|
||||||
tooltip: AppLocalizations.of(context).delete,
|
icon: SvgPicture.asset(_imagePaths.icDeleteAttachment, fit: BoxFit.fill),
|
||||||
onTap: () {
|
tooltip: AppLocalizations.of(context).delete,
|
||||||
if (onDeleteAttachmentAction != null) {
|
onTap: () {
|
||||||
onDeleteAttachmentAction!.call(fileState);
|
if (onDeleteAttachmentAction != null) {
|
||||||
|
onDeleteAttachmentAction!.call(fileState);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
)
|
||||||
)
|
)
|
||||||
),
|
else
|
||||||
|
Positioned(
|
||||||
|
right: BuildUtils.isWeb ? -5 : -12,
|
||||||
|
top: BuildUtils.isWeb ? -5 : -12,
|
||||||
|
child: buildIconWeb(
|
||||||
|
icon: SvgPicture.asset(_imagePaths.icDeleteAttachment, fit: BoxFit.fill),
|
||||||
|
tooltip: AppLocalizations.of(context).delete,
|
||||||
|
onTap: () {
|
||||||
|
if (onDeleteAttachmentAction != null) {
|
||||||
|
onDeleteAttachmentAction!.call(fileState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
),
|
||||||
Align(alignment: Alignment.bottomCenter, child: _progressLoading),
|
Align(alignment: Alignment.bottomCenter, child: _progressLoading),
|
||||||
]),
|
]),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -174,7 +174,6 @@ class ContactController extends BaseController {
|
|||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onSelectedContactCallback?.call(emailAddress);
|
onSelectedContactCallback?.call(emailAddress);
|
||||||
} else {
|
} else {
|
||||||
popBack(result: emailAddress);
|
popBack(result: emailAddress);
|
||||||
@@ -186,7 +185,6 @@ class ContactController extends BaseController {
|
|||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onDismissContactView?.call();
|
onDismissContactView?.call();
|
||||||
} else {
|
} else {
|
||||||
popBack();
|
popBack();
|
||||||
|
|||||||
@@ -426,7 +426,6 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onSelectedMailboxCallback?.call(mailboxDestination.value);
|
onSelectedMailboxCallback?.call(mailboxDestination.value);
|
||||||
} else {
|
} else {
|
||||||
popBack(result: mailboxDestination.value);
|
popBack(result: mailboxDestination.value);
|
||||||
@@ -475,7 +474,6 @@ class DestinationPickerController extends BaseMailboxController {
|
|||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onDismissDestinationPicker?.call();
|
onDismissDestinationPicker?.call();
|
||||||
} else {
|
} else {
|
||||||
popBack();
|
popBack();
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_fold
|
|||||||
import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/create_mailbox_name_input_decoration_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/create_mailbox_name_input_decoration_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/search_app_bar_widget.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/widgets/search_app_bar_widget.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class DestinationPickerView extends GetWidget<DestinationPickerController>
|
class DestinationPickerView extends GetWidget<DestinationPickerController>
|
||||||
with AppLoaderMixin,
|
with AppLoaderMixin,
|
||||||
@@ -368,8 +369,12 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
|||||||
return TreeViewChild(
|
return TreeViewChild(
|
||||||
context,
|
context,
|
||||||
key: const Key('children_tree_mailbox_child'),
|
key: const Key('children_tree_mailbox_child'),
|
||||||
|
isDirectionRTL: AppUtils.isDirectionRTL(context),
|
||||||
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
||||||
paddingChild: const EdgeInsets.only(left: 14),
|
paddingChild: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 14,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 14 : 0,
|
||||||
|
),
|
||||||
parent: (MailBoxFolderTileBuilder(
|
parent: (MailBoxFolderTileBuilder(
|
||||||
context,
|
context,
|
||||||
_imagePaths,
|
_imagePaths,
|
||||||
@@ -481,7 +486,10 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
|||||||
if (actions == MailboxActions.select && (mailboxIdSelected == null ||
|
if (actions == MailboxActions.select && (mailboxIdSelected == null ||
|
||||||
mailboxIdSelected == PresentationMailbox.unifiedMailbox.id))
|
mailboxIdSelected == PresentationMailbox.unifiedMailbox.id))
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(right: 30.0),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 30.0,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 30 : 0.0,
|
||||||
|
),
|
||||||
child: SvgPicture.asset(
|
child: SvgPicture.asset(
|
||||||
_imagePaths.icFilterSelected,
|
_imagePaths.icFilterSelected,
|
||||||
width: 20,
|
width: 20,
|
||||||
@@ -535,7 +543,12 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
|||||||
padding: const EdgeInsets.symmetric(vertical: 16),
|
padding: const EdgeInsets.symmetric(vertical: 16),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Padding(padding: const EdgeInsets.only(left: 5), child: buildIconWeb(
|
Padding(
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 5,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 5 : 0,
|
||||||
|
),
|
||||||
|
child: buildIconWeb(
|
||||||
icon: SvgPicture.asset(
|
icon: SvgPicture.asset(
|
||||||
_imagePaths.icBack,
|
_imagePaths.icBack,
|
||||||
colorFilter: AppColor.colorTextButton.asFilter(),
|
colorFilter: AppColor.colorTextButton.asFilter(),
|
||||||
@@ -549,7 +562,10 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
|||||||
hasBackButton: false,
|
hasBackButton: false,
|
||||||
hasSearchButton: true)
|
hasSearchButton: true)
|
||||||
..addPadding(EdgeInsets.zero)
|
..addPadding(EdgeInsets.zero)
|
||||||
..setMargin(const EdgeInsets.only(right: 16))
|
..setMargin(EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
))
|
||||||
..addDecoration(BoxDecoration(borderRadius: BorderRadius.circular(12), color: AppColor.colorBgSearchBar))
|
..addDecoration(BoxDecoration(borderRadius: BorderRadius.circular(12), color: AppColor.colorBgSearchBar))
|
||||||
..addIconClearText(SvgPicture.asset(_imagePaths.icClearTextSearch, width: 18, height: 18, fit: BoxFit.fill))
|
..addIconClearText(SvgPicture.asset(_imagePaths.icClearTextSearch, width: 18, height: 18, fit: BoxFit.fill))
|
||||||
..setHintText(AppLocalizations.of(context).hint_search_mailboxes)
|
..setHintText(AppLocalizations.of(context).hint_search_mailboxes)
|
||||||
|
|||||||
+7
-3
@@ -11,6 +11,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_ma
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
||||||
import 'package:tmail_ui_user/features/search/mailbox/presentation/utils/search_mailbox_utils.dart';
|
import 'package:tmail_ui_user/features/search/mailbox/presentation/utils/search_mailbox_utils.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class DestinationPickerSearchMailboxItemBuilder extends StatelessWidget {
|
class DestinationPickerSearchMailboxItemBuilder extends StatelessWidget {
|
||||||
|
|
||||||
@@ -64,7 +65,7 @@ class DestinationPickerSearchMailboxItemBuilder extends StatelessWidget {
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
)),
|
)),
|
||||||
_buildSelectedIcon()
|
_buildSelectedIcon(context)
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -132,12 +133,15 @@ class DestinationPickerSearchMailboxItemBuilder extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildSelectedIcon() {
|
Widget _buildSelectedIcon(BuildContext context) {
|
||||||
if (_presentationMailbox.id == mailboxIdAlreadySelected &&
|
if (_presentationMailbox.id == mailboxIdAlreadySelected &&
|
||||||
(mailboxActions == MailboxActions.select ||
|
(mailboxActions == MailboxActions.select ||
|
||||||
mailboxActions == MailboxActions.create)) {
|
mailboxActions == MailboxActions.create)) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 8),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
),
|
||||||
child: SvgPicture.asset(
|
child: SvgPicture.asset(
|
||||||
_imagePaths.icFilterSelected,
|
_imagePaths.icFilterSelected,
|
||||||
width: 20,
|
width: 20,
|
||||||
|
|||||||
+9
-2
@@ -7,6 +7,7 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
|||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_screen_type.dart';
|
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_screen_type.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
typedef OnCreateNewMailboxAction = Function();
|
typedef OnCreateNewMailboxAction = Function();
|
||||||
typedef OnOpenCreateNewMailboxScreenAction = Function();
|
typedef OnOpenCreateNewMailboxScreenAction = Function();
|
||||||
@@ -61,7 +62,10 @@ class TopBarDestinationPickerBuilder extends StatelessWidget {
|
|||||||
fontWeight: FontWeight.w700))),
|
fontWeight: FontWeight.w700))),
|
||||||
if (_destinationScreenType == DestinationScreenType.destinationPicker)
|
if (_destinationScreenType == DestinationScreenType.destinationPicker)
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 8.0),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
),
|
||||||
child: Align(
|
child: Align(
|
||||||
alignment: Alignment.centerLeft,
|
alignment: Alignment.centerLeft,
|
||||||
child: buildIconWeb(
|
child: buildIconWeb(
|
||||||
@@ -76,7 +80,10 @@ class TopBarDestinationPickerBuilder extends StatelessWidget {
|
|||||||
)
|
)
|
||||||
else
|
else
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 8.0),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
),
|
||||||
child: Align(
|
child: Align(
|
||||||
alignment: Alignment.centerLeft,
|
alignment: Alignment.centerLeft,
|
||||||
child: Material(
|
child: Material(
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/information_se
|
|||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class EmailView extends GetWidget<SingleEmailController> {
|
class EmailView extends GetWidget<SingleEmailController> {
|
||||||
|
|
||||||
@@ -81,7 +82,12 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
EdgeInsets _getMarginEmailView(BuildContext context) {
|
EdgeInsets _getMarginEmailView(BuildContext context) {
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
if (responsiveUtils.isDesktop(context)) {
|
if (responsiveUtils.isDesktop(context)) {
|
||||||
return const EdgeInsets.only(right: 16, top: 16, bottom: 16);
|
return EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
top: 16,
|
||||||
|
bottom: 16
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
return const EdgeInsets.symmetric(vertical: 16);
|
return const EdgeInsets.symmetric(vertical: 16);
|
||||||
}
|
}
|
||||||
@@ -278,8 +284,13 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
_buildAttachments(context),
|
_buildAttachments(context),
|
||||||
if (BuildUtils.isWeb)
|
if (BuildUtils.isWeb)
|
||||||
Expanded(child: Padding(
|
Expanded(child: Padding(
|
||||||
padding: const EdgeInsets.only(left: 16, bottom: 16),
|
padding: EdgeInsets.only(
|
||||||
child: _buildEmailContent(context, constraints, email)))
|
left: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
bottom: 16
|
||||||
|
),
|
||||||
|
child: _buildEmailContent(context, constraints, email)
|
||||||
|
))
|
||||||
else
|
else
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.all(16),
|
padding: const EdgeInsets.all(16),
|
||||||
@@ -477,10 +488,19 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
AppLocalizations.of(context).mark_as_unread,
|
AppLocalizations.of(context).mark_as_unread,
|
||||||
email,
|
email,
|
||||||
iconLeftPadding: responsiveUtils.isMobile(context)
|
iconLeftPadding: responsiveUtils.isMobile(context)
|
||||||
? const EdgeInsets.only(left: 12, right: 16)
|
? EdgeInsets.only(
|
||||||
: const EdgeInsets.only(right: 12),
|
left: AppUtils.isDirectionRTL(context) ? 16 : 12,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 12 : 16,
|
||||||
|
)
|
||||||
|
: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||||
|
),
|
||||||
iconRightPadding: responsiveUtils.isMobile(context)
|
iconRightPadding: responsiveUtils.isMobile(context)
|
||||||
? const EdgeInsets.only(right: 12)
|
? EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||||
|
)
|
||||||
: EdgeInsets.zero)
|
: EdgeInsets.zero)
|
||||||
..onActionClick((email) => controller.handleEmailAction(
|
..onActionClick((email) => controller.handleEmailAction(
|
||||||
context,
|
context,
|
||||||
@@ -507,10 +527,19 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
: AppLocalizations.of(context).mark_as_spam,
|
: AppLocalizations.of(context).mark_as_spam,
|
||||||
email,
|
email,
|
||||||
iconLeftPadding: responsiveUtils.isMobile(context)
|
iconLeftPadding: responsiveUtils.isMobile(context)
|
||||||
? const EdgeInsets.only(left: 12, right: 16)
|
? EdgeInsets.only(
|
||||||
: const EdgeInsets.only(right: 12),
|
left: AppUtils.isDirectionRTL(context) ? 16 : 12,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 12 : 16,
|
||||||
|
)
|
||||||
|
: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||||
|
),
|
||||||
iconRightPadding: responsiveUtils.isMobile(context)
|
iconRightPadding: responsiveUtils.isMobile(context)
|
||||||
? const EdgeInsets.only(right: 12)
|
? EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||||
|
)
|
||||||
: EdgeInsets.zero)
|
: EdgeInsets.zero)
|
||||||
..onActionClick((email) => controller.handleEmailAction(
|
..onActionClick((email) => controller.handleEmailAction(
|
||||||
context,
|
context,
|
||||||
@@ -532,10 +561,19 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
AppLocalizations.of(context).quickCreatingRule,
|
AppLocalizations.of(context).quickCreatingRule,
|
||||||
email,
|
email,
|
||||||
iconLeftPadding: responsiveUtils.isMobile(context)
|
iconLeftPadding: responsiveUtils.isMobile(context)
|
||||||
? const EdgeInsets.only(left: 12, right: 16)
|
? EdgeInsets.only(
|
||||||
: const EdgeInsets.only(right: 12),
|
left: AppUtils.isDirectionRTL(context) ? 16 : 12,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 12 : 16,
|
||||||
|
)
|
||||||
|
: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||||
|
),
|
||||||
iconRightPadding: responsiveUtils.isMobile(context)
|
iconRightPadding: responsiveUtils.isMobile(context)
|
||||||
? const EdgeInsets.only(right: 12)
|
? EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||||
|
)
|
||||||
: EdgeInsets.zero)
|
: EdgeInsets.zero)
|
||||||
..onActionClick((email) => controller.quickCreatingRule(context, email.from!.first)))
|
..onActionClick((email) => controller.quickCreatingRule(context, email.from!.first)))
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import 'package:flutter_svg/flutter_svg.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
typedef OnBackActionClick = void Function();
|
typedef OnBackActionClick = void Function();
|
||||||
typedef OnEmailActionClick = void Function(PresentationEmail, EmailActionType);
|
typedef OnEmailActionClick = void Function(PresentationEmail, EmailActionType);
|
||||||
@@ -66,7 +67,10 @@ class AppBarMailWidgetBuilder extends StatelessWidget {
|
|||||||
fit: BoxFit.fill),
|
fit: BoxFit.fill),
|
||||||
if (!isSearchIsRunning)
|
if (!isSearchIsRunning)
|
||||||
Container(
|
Container(
|
||||||
margin: const EdgeInsets.only(left: 8),
|
margin: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
),
|
||||||
constraints: BoxConstraints(
|
constraints: BoxConstraints(
|
||||||
maxWidth: _responsiveUtils.getSizeScreenWidth(context) - 250),
|
maxWidth: _responsiveUtils.getSizeScreenWidth(context) - 250),
|
||||||
child: Text(
|
child: Text(
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ class IdentityCreatorController extends BaseController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
|
log('IdentityCreatorController::onInit():');
|
||||||
super.onInit();
|
super.onInit();
|
||||||
keyboardRichTextController = RichTextController();
|
keyboardRichTextController = RichTextController();
|
||||||
richTextWebController = RichTextWebController();
|
richTextWebController = RichTextWebController();
|
||||||
@@ -340,7 +341,6 @@ class IdentityCreatorController extends BaseController {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onCreatedIdentityCallback?.call(identityRequest);
|
onCreatedIdentityCallback?.call(identityRequest);
|
||||||
} else {
|
} else {
|
||||||
popBack(result: identityRequest);
|
popBack(result: identityRequest);
|
||||||
@@ -352,7 +352,6 @@ class IdentityCreatorController extends BaseController {
|
|||||||
isDefaultIdentity: isDefaultIdentity.value);
|
isDefaultIdentity: isDefaultIdentity.value);
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onCreatedIdentityCallback?.call(identityRequest);
|
onCreatedIdentityCallback?.call(identityRequest);
|
||||||
} else {
|
} else {
|
||||||
popBack(result: identityRequest);
|
popBack(result: identityRequest);
|
||||||
@@ -426,7 +425,6 @@ class IdentityCreatorController extends BaseController {
|
|||||||
|
|
||||||
void closeView(BuildContext context) {
|
void closeView(BuildContext context) {
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onDismissIdentityCreator?.call();
|
onDismissIdentityCreator?.call();
|
||||||
} else {
|
} else {
|
||||||
popBack();
|
popBack();
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import 'package:tmail_ui_user/features/identity_creator/presentation/widgets/set
|
|||||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/identity_action_type.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/model/identity_action_type.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
|
class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
|
||||||
|
|
||||||
@@ -475,12 +476,20 @@ class IdentityCreatorView extends GetWidget<IdentityCreatorController> {
|
|||||||
}),
|
}),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.only(top: 24.0, bottom: 12.0, left: 12.0),
|
padding: EdgeInsets.only(
|
||||||
|
top: 24.0,
|
||||||
|
bottom: 12.0,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 12 : 0
|
||||||
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(right: 12.0),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 12 : 0
|
||||||
|
),
|
||||||
child: buildTextButton(
|
child: buildTextButton(
|
||||||
AppLocalizations.of(context).cancel,
|
AppLocalizations.of(context).cancel,
|
||||||
textStyle: const TextStyle(
|
textStyle: const TextStyle(
|
||||||
|
|||||||
+5
-1
@@ -3,6 +3,7 @@ import 'package:core/presentation/resources/image_paths.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
typedef OnCheckboxChanged = void Function();
|
typedef OnCheckboxChanged = void Function();
|
||||||
|
|
||||||
@@ -43,7 +44,10 @@ class SetDefaultIdentityCheckboxBuilder extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 8.0),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(context).setDefaultIdentity,
|
AppLocalizations.of(context).setDefaultIdentity,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_fold
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget_builder.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_footer_widget.dart';
|
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_footer_widget.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class MailboxView extends GetWidget<MailboxController>
|
class MailboxView extends GetWidget<MailboxController>
|
||||||
with MailboxWidgetMixin,
|
with MailboxWidgetMixin,
|
||||||
@@ -101,8 +102,11 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 10),
|
padding: EdgeInsets.only(
|
||||||
child: _buildCloseScreenButton(context)),
|
left: AppUtils.isDirectionRTL(context) ? 0 : 10,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 19 : 0,
|
||||||
|
),
|
||||||
|
child: _buildCloseScreenButton(context)),
|
||||||
SizedBox(width: controller.isSelectionEnabled() ? 49 : 40),
|
SizedBox(width: controller.isSelectionEnabled() ? 49 : 40),
|
||||||
Expanded(child: Text(
|
Expanded(child: Text(
|
||||||
AppLocalizations.of(context).folders,
|
AppLocalizations.of(context).folders,
|
||||||
@@ -147,8 +151,8 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
return Column(children: [
|
return Column(children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
left: _responsiveUtils.isLandscapeMobile(context) ? 0 : 16,
|
left: AppUtils.isDirectionRTL(context) ? 16 : _responsiveUtils.isLandscapeMobile(context) ? 0 : 16,
|
||||||
right: 16),
|
right: AppUtils.isDirectionRTL(context) ?_responsiveUtils.isLandscapeMobile(context) ? 0 : 16 : 16),
|
||||||
child: UserInformationWidgetBuilder(
|
child: UserInformationWidgetBuilder(
|
||||||
_imagePaths,
|
_imagePaths,
|
||||||
controller.mailboxDashBoardController.userProfile.value,
|
controller.mailboxDashBoardController.userProfile.value,
|
||||||
@@ -203,44 +207,45 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
Container(
|
Container(
|
||||||
margin: EdgeInsets.only(
|
margin: EdgeInsets.only(
|
||||||
left: _responsiveUtils.isLandscapeMobile(context) ? 0 : 8,
|
left: AppUtils.isDirectionRTL(context) ? 16 : _responsiveUtils.isLandscapeMobile(context) ? 0 : 8,
|
||||||
right: 16),
|
right: AppUtils.isDirectionRTL(context) ? _responsiveUtils.isLandscapeMobile(context) ? 0 : 8 : 16),
|
||||||
padding: const EdgeInsets.only(left: 8),
|
padding: EdgeInsets.only(
|
||||||
child: Row(
|
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
right: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
children: [
|
),
|
||||||
Text(AppLocalizations.of(context).mailBoxes,
|
child: Row(
|
||||||
style: const TextStyle(
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
fontSize: 20,
|
children: [
|
||||||
color: Colors.black,
|
Text(AppLocalizations.of(context).mailBoxes,
|
||||||
fontWeight: FontWeight.bold)),
|
style: const TextStyle(
|
||||||
Row(
|
fontSize: 20,
|
||||||
children: [
|
color: Colors.black,
|
||||||
buildIconWeb(
|
fontWeight: FontWeight.bold)),
|
||||||
minSize: 40,
|
Row(children: [
|
||||||
iconPadding: EdgeInsets.zero,
|
buildIconWeb(
|
||||||
icon: SvgPicture.asset(
|
minSize: 40,
|
||||||
_imagePaths.icSearchBar,
|
iconPadding: EdgeInsets.zero,
|
||||||
colorFilter: AppColor.colorTextButton.asFilter(),
|
icon: SvgPicture.asset(
|
||||||
fit: BoxFit.fill
|
_imagePaths.icSearchBar,
|
||||||
),
|
colorFilter: AppColor.colorTextButton.asFilter(),
|
||||||
tooltip: AppLocalizations.of(context).searchForMailboxes,
|
fit: BoxFit.fill
|
||||||
onTap: () => controller.openSearchViewAction(context)
|
),
|
||||||
),
|
tooltip: AppLocalizations.of(context).searchForMailboxes,
|
||||||
buildIconWeb(
|
onTap: () => controller.openSearchViewAction(context)
|
||||||
minSize: 40,
|
|
||||||
iconSize: 20,
|
|
||||||
iconPadding: EdgeInsets.zero,
|
|
||||||
splashRadius: 15,
|
|
||||||
icon: SvgPicture.asset(
|
|
||||||
_imagePaths.icAddNewFolder,
|
|
||||||
colorFilter: AppColor.colorTextButton.asFilter(),
|
|
||||||
fit: BoxFit.fill),
|
|
||||||
tooltip: AppLocalizations.of(context).new_mailbox,
|
|
||||||
onTap: () => controller.goToCreateNewMailboxView(context)),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
|
buildIconWeb(
|
||||||
|
minSize: 40,
|
||||||
|
iconSize: 20,
|
||||||
|
iconPadding: EdgeInsets.zero,
|
||||||
|
splashRadius: 15,
|
||||||
|
icon: SvgPicture.asset(
|
||||||
|
_imagePaths.icAddNewFolder,
|
||||||
|
colorFilter: AppColor.colorTextButton.asFilter(),
|
||||||
|
fit: BoxFit.fill),
|
||||||
|
tooltip: AppLocalizations.of(context).new_mailbox,
|
||||||
|
onTap: () => controller.goToCreateNewMailboxView(context)),
|
||||||
]),
|
]),
|
||||||
|
]),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Obx(() {
|
Obx(() {
|
||||||
@@ -274,8 +279,8 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
Widget _buildHeaderMailboxCategory(BuildContext context, MailboxCategories categories) {
|
Widget _buildHeaderMailboxCategory(BuildContext context, MailboxCategories categories) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
right: _responsiveUtils.isLandscapeMobile(context) ? 8 : 28,
|
right: AppUtils.isDirectionRTL(context) ? 4 : _responsiveUtils.isLandscapeMobile(context) ? 8 : 28,
|
||||||
left: 4),
|
left: AppUtils.isDirectionRTL(context) ? _responsiveUtils.isLandscapeMobile(context) ? 8 : 28 : 4),
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
buildIconWeb(
|
buildIconWeb(
|
||||||
minSize: 40,
|
minSize: 40,
|
||||||
@@ -302,9 +307,13 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
|
|
||||||
return Container(
|
return Container(
|
||||||
margin: EdgeInsets.only(
|
margin: EdgeInsets.only(
|
||||||
left: _responsiveUtils.isLandscapeMobile(context) ? 0 : 8,
|
left: AppUtils.isDirectionRTL(context) ? 16 : _responsiveUtils.isLandscapeMobile(context) ? 0 : 8,
|
||||||
right: 16),
|
right: AppUtils.isDirectionRTL(context) ? _responsiveUtils.isLandscapeMobile(context) ? 0 : 8 : 16
|
||||||
padding: const EdgeInsets.only(left: 12),
|
),
|
||||||
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 12 : 0,
|
||||||
|
),
|
||||||
child: TreeView(
|
child: TreeView(
|
||||||
key: Key('${categories.keyValue}_mailbox_list'),
|
key: Key('${categories.keyValue}_mailbox_list'),
|
||||||
children: _buildListChildTileWidget(context, mailboxNode, lastNode: lastNode)));
|
children: _buildListChildTileWidget(context, mailboxNode, lastNode: lastNode)));
|
||||||
@@ -332,7 +341,11 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
context,
|
context,
|
||||||
key: const Key('children_tree_mailbox_child'),
|
key: const Key('children_tree_mailbox_child'),
|
||||||
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
||||||
paddingChild: const EdgeInsets.only(left: 14),
|
isDirectionRTL: AppUtils.isDirectionRTL(context),
|
||||||
|
paddingChild: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 14,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 14 : 0,
|
||||||
|
),
|
||||||
parent: Obx(() => (MailBoxFolderTileBuilder(
|
parent: Obx(() => (MailBoxFolderTileBuilder(
|
||||||
context,
|
context,
|
||||||
_imagePaths,
|
_imagePaths,
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/ap
|
|||||||
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_footer_widget.dart';
|
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_footer_widget.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class MailboxView extends GetWidget<MailboxController>
|
class MailboxView extends GetWidget<MailboxController>
|
||||||
with AppLoaderMixin,
|
with AppLoaderMixin,
|
||||||
@@ -39,8 +40,7 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
height: 0.5,
|
height: 0.5,
|
||||||
thickness: 0.2),
|
thickness: 0.2),
|
||||||
Expanded(child: Container(
|
Expanded(child: Container(
|
||||||
padding: EdgeInsets.only(
|
padding: _getViewPadding(context),
|
||||||
left: _responsiveUtils.isDesktop(context) ? 16 : 0),
|
|
||||||
color: _responsiveUtils.isDesktop(context)
|
color: _responsiveUtils.isDesktop(context)
|
||||||
? AppColor.colorBgDesktop
|
? AppColor.colorBgDesktop
|
||||||
: Colors.white,
|
: Colors.white,
|
||||||
@@ -61,13 +61,23 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EdgeInsets _getViewPadding(BuildContext context) {
|
||||||
|
if (AppUtils.isDirectionRTL(context)) {
|
||||||
|
return EdgeInsets.only(right: _responsiveUtils.isDesktop(context) ? 16 : 0);
|
||||||
|
} else {
|
||||||
|
return EdgeInsets.only(left: _responsiveUtils.isDesktop(context) ? 16 : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Widget _buildLogoApp(BuildContext context) {
|
Widget _buildLogoApp(BuildContext context) {
|
||||||
return Container(
|
return Container(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
top: _responsiveUtils.isDesktop(context) ? 25 : 16,
|
top: _responsiveUtils.isDesktop(context) ? 25 : 16,
|
||||||
bottom: _responsiveUtils.isDesktop(context) ? 25 : 16,
|
bottom: _responsiveUtils.isDesktop(context) ? 25 : 16,
|
||||||
left: _responsiveUtils.isDesktop(context) ? 32 : 16),
|
left: AppUtils.isDirectionRTL(context) ? 0 : _responsiveUtils.isDesktop(context) ? 32 : 16,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? _responsiveUtils.isDesktop(context) ? 32 : 16 : 0
|
||||||
|
),
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
(SloganBuilder(arrangedByHorizontal: true)
|
(SloganBuilder(arrangedByHorizontal: true)
|
||||||
..setSloganText(AppLocalizations.of(context).app_name)
|
..setSloganText(AppLocalizations.of(context).app_name)
|
||||||
@@ -102,7 +112,10 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
controller: controller.mailboxListScrollController,
|
controller: controller.mailboxListScrollController,
|
||||||
key: const PageStorageKey('mailbox_list'),
|
key: const PageStorageKey('mailbox_list'),
|
||||||
physics: const ClampingScrollPhysics(),
|
physics: const ClampingScrollPhysics(),
|
||||||
padding: EdgeInsets.only(right: _responsiveUtils.isDesktop(context) ? 16 : 0),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : _responsiveUtils.isDesktop(context) ? 16 : 0,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? _responsiveUtils.isDesktop(context) ? 16 : 0 : 0
|
||||||
|
),
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
if (!_responsiveUtils.isDesktop(context))
|
if (!_responsiveUtils.isDesktop(context))
|
||||||
_buildUserInformation(context),
|
_buildUserInformation(context),
|
||||||
@@ -131,7 +144,8 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
const SizedBox(height: 13),
|
const SizedBox(height: 13),
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
left: _responsiveUtils.isDesktop(context) ? 0 : 12,
|
left: AppUtils.isDirectionRTL(context) ? 0 : _responsiveUtils.isDesktop(context) ? 0 : 12,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? _responsiveUtils.isDesktop(context) ? 0 : 12 : 0,
|
||||||
bottom: 8
|
bottom: 8
|
||||||
),
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
@@ -143,7 +157,10 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
color: Colors.black,
|
color: Colors.black,
|
||||||
fontWeight: FontWeight.bold)),
|
fontWeight: FontWeight.bold)),
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(right: _responsiveUtils.isDesktop(context) ? 0 : 12),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : _responsiveUtils.isDesktop(context) ? 0 : 12,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? _responsiveUtils.isDesktop(context) ? 0 : 12 : 0,
|
||||||
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
buildIconWeb(
|
buildIconWeb(
|
||||||
@@ -293,8 +310,12 @@ class MailboxView extends GetWidget<MailboxController>
|
|||||||
return TreeViewChild(
|
return TreeViewChild(
|
||||||
context,
|
context,
|
||||||
key: const Key('children_tree_mailbox_child'),
|
key: const Key('children_tree_mailbox_child'),
|
||||||
|
isDirectionRTL: AppUtils.isDirectionRTL(context),
|
||||||
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
||||||
paddingChild: const EdgeInsets.only(left: 14),
|
paddingChild: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 14,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 14 : 0,
|
||||||
|
),
|
||||||
parent: Obx(() => (MailBoxFolderTileBuilder(
|
parent: Obx(() => (MailBoxFolderTileBuilder(
|
||||||
context,
|
context,
|
||||||
_imagePaths,
|
_imagePaths,
|
||||||
|
|||||||
@@ -1,71 +0,0 @@
|
|||||||
|
|
||||||
import 'package:core/core.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
|
||||||
|
|
||||||
typedef OnOpenMailboxNewFolderActionClick = void Function();
|
|
||||||
|
|
||||||
class MailboxNewFolderTileBuilder {
|
|
||||||
|
|
||||||
String? _icon;
|
|
||||||
String? _name;
|
|
||||||
|
|
||||||
OnOpenMailboxNewFolderActionClick? _onOpenMailboxFolderActionClick;
|
|
||||||
|
|
||||||
MailboxNewFolderTileBuilder();
|
|
||||||
|
|
||||||
void addIcon(String icon) {
|
|
||||||
_icon = icon;
|
|
||||||
}
|
|
||||||
|
|
||||||
void addName(String name) {
|
|
||||||
_name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
void onOpenMailboxFolderAction(OnOpenMailboxNewFolderActionClick onOpenMailboxFolderActionClick) {
|
|
||||||
_onOpenMailboxFolderActionClick = onOpenMailboxFolderActionClick;
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget build() {
|
|
||||||
return Theme(
|
|
||||||
data: ThemeData(
|
|
||||||
splashColor: Colors.transparent,
|
|
||||||
highlightColor: Colors.transparent),
|
|
||||||
child: Container(
|
|
||||||
key: const Key('mailbox_new_folder_tile'),
|
|
||||||
alignment: Alignment.center,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
borderRadius: BorderRadius.circular(16),
|
|
||||||
color: AppColor.mailboxBackgroundColor),
|
|
||||||
child: MediaQuery(
|
|
||||||
data: const MediaQueryData(padding: EdgeInsets.zero),
|
|
||||||
child: ListTile(
|
|
||||||
contentPadding: EdgeInsets.zero,
|
|
||||||
onTap: () => {
|
|
||||||
if (_onOpenMailboxFolderActionClick != null) {
|
|
||||||
_onOpenMailboxFolderActionClick!()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
leading: Padding(
|
|
||||||
padding: const EdgeInsets.only(left: 34),
|
|
||||||
child: _icon != null
|
|
||||||
? SvgPicture.asset(
|
|
||||||
_icon!,
|
|
||||||
width: 24,
|
|
||||||
height: 24,
|
|
||||||
colorFilter: AppColor.mailboxIconColor.asFilter(),
|
|
||||||
fit: BoxFit.fill)
|
|
||||||
: const SizedBox.shrink()),
|
|
||||||
title: Padding(
|
|
||||||
padding: const EdgeInsets.only(left: 8),
|
|
||||||
child: Text(
|
|
||||||
_name ?? '',
|
|
||||||
maxLines: 1,
|
|
||||||
style: const TextStyle(fontSize: 15, color: AppColor.mailboxTextColor, fontWeight: FontWeight.bold),
|
|
||||||
)),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -17,6 +17,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_displa
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class MailBoxFolderTileBuilder {
|
class MailBoxFolderTileBuilder {
|
||||||
|
|
||||||
@@ -82,15 +83,15 @@ class MailBoxFolderTileBuilder {
|
|||||||
Widget build() {
|
Widget build() {
|
||||||
if (responsiveUtils?.isWebDesktop(_context) == true && mailboxDisplayed == MailboxDisplayed.mailbox) {
|
if (responsiveUtils?.isWebDesktop(_context) == true && mailboxDisplayed == MailboxDisplayed.mailbox) {
|
||||||
return DragTarget<List<PresentationEmail>>(
|
return DragTarget<List<PresentationEmail>>(
|
||||||
builder: (_, __, ___) => _buildMailboxItem(),
|
builder: (_, __, ___) => _buildMailboxItem(_context),
|
||||||
onAccept: (emails) => _onDragItemAccepted?.call(emails, _mailboxNode.item),
|
onAccept: (emails) => _onDragItemAccepted?.call(emails, _mailboxNode.item),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return _buildMailboxItem();
|
return _buildMailboxItem(_context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildMailboxItem() {
|
Widget _buildMailboxItem(BuildContext context) {
|
||||||
if (mailboxDisplayed == MailboxDisplayed.mailbox) {
|
if (mailboxDisplayed == MailboxDisplayed.mailbox) {
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
return StatefulBuilder(
|
return StatefulBuilder(
|
||||||
@@ -108,11 +109,11 @@ class MailBoxFolderTileBuilder {
|
|||||||
? CrossAxisAlignment.start
|
? CrossAxisAlignment.start
|
||||||
: CrossAxisAlignment.center,
|
: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
_buildLeadingMailboxItem(),
|
_buildLeadingMailboxItem(context),
|
||||||
const SizedBox(width: 4),
|
const SizedBox(width: 4),
|
||||||
Expanded(child: _buildTitleFolderItem()),
|
Expanded(child: _buildTitleFolderItem()),
|
||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
_buildTrailingItemForMailboxView()
|
_buildTrailingItemForMailboxView(context)
|
||||||
])
|
])
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -141,12 +142,12 @@ class MailBoxFolderTileBuilder {
|
|||||||
? CrossAxisAlignment.start
|
? CrossAxisAlignment.start
|
||||||
: CrossAxisAlignment.center,
|
: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
_buildLeadingMailboxItem(),
|
_buildLeadingMailboxItem(context),
|
||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
Expanded(child: _buildTitleFolderItem()),
|
Expanded(child: _buildTitleFolderItem()),
|
||||||
_buildSelectedIcon(),
|
_buildSelectedIcon(),
|
||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
_buildTrailingItemForMailboxView()
|
_buildTrailingItemForMailboxView(context)
|
||||||
]),
|
]),
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
@@ -171,7 +172,7 @@ class MailBoxFolderTileBuilder {
|
|||||||
? AppColor.colorItemSelected
|
? AppColor.colorItemSelected
|
||||||
: Colors.transparent,
|
: Colors.transparent,
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
_buildLeadingMailboxItem(),
|
_buildLeadingMailboxItem(context),
|
||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
Expanded(child: _buildTitleFolderItem()),
|
Expanded(child: _buildTitleFolderItem()),
|
||||||
_buildSelectedIcon()
|
_buildSelectedIcon()
|
||||||
@@ -184,7 +185,7 @@ class MailBoxFolderTileBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildLeadingMailboxItem() {
|
Widget _buildLeadingMailboxItem(BuildContext context) {
|
||||||
return Row(children: [
|
return Row(children: [
|
||||||
if (_mailboxNode.hasChildren())
|
if (_mailboxNode.hasChildren())
|
||||||
Row(children: [
|
Row(children: [
|
||||||
@@ -211,20 +212,27 @@ class MailBoxFolderTileBuilder {
|
|||||||
else
|
else
|
||||||
const SizedBox(width: 32),
|
const SizedBox(width: 32),
|
||||||
Transform(
|
Transform(
|
||||||
transform: Matrix4.translationValues(-4.0, 0.0, 0.0),
|
transform: Matrix4.translationValues(
|
||||||
|
AppUtils.isDirectionRTL(context) ? 0.0 : -4.0,
|
||||||
|
0.0,
|
||||||
|
0.0
|
||||||
|
),
|
||||||
child: _buildLeadingIcon()
|
child: _buildLeadingIcon()
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildTrailingItemForMailboxView() {
|
Widget _buildTrailingItemForMailboxView(BuildContext context) {
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
if (isHoverItem) {
|
if (isHoverItem) {
|
||||||
return _buildMenuIcon();
|
return _buildMenuIcon(context);
|
||||||
} else if (_mailboxNode.item.getCountUnReadEmails().isNotEmpty
|
} else if (_mailboxNode.item.getCountUnReadEmails().isNotEmpty
|
||||||
&& _mailboxNode.item.matchCountingRules()) {
|
&& _mailboxNode.item.matchCountingRules()) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 10),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 10,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 10 : 0,
|
||||||
|
),
|
||||||
child: _buildCounter(),
|
child: _buildCounter(),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@@ -233,7 +241,10 @@ class MailBoxFolderTileBuilder {
|
|||||||
} else {
|
} else {
|
||||||
if (_mailboxNode.hasChildren()) {
|
if (_mailboxNode.hasChildren()) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 12),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
|
||||||
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
if (_mailboxNode.item.getCountUnReadEmails().isNotEmpty
|
if (_mailboxNode.item.getCountUnReadEmails().isNotEmpty
|
||||||
@@ -245,7 +256,10 @@ class MailBoxFolderTileBuilder {
|
|||||||
} else if (_mailboxNode.item.getCountUnReadEmails().isNotEmpty
|
} else if (_mailboxNode.item.getCountUnReadEmails().isNotEmpty
|
||||||
&& _mailboxNode.item.matchCountingRules()) {
|
&& _mailboxNode.item.matchCountingRules()) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 12),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 12,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 12 : 0,
|
||||||
|
),
|
||||||
child: _buildCounter(),
|
child: _buildCounter(),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@@ -328,9 +342,12 @@ class MailBoxFolderTileBuilder {
|
|||||||
fit: BoxFit.fill);
|
fit: BoxFit.fill);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildMenuIcon() {
|
Widget _buildMenuIcon(BuildContext context) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 8),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
),
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTapDown: (detail) {
|
onTapDown: (detail) {
|
||||||
final screenSize = MediaQuery.of(_context).size;
|
final screenSize = MediaQuery.of(_context).size;
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
|
|
||||||
import 'package:core/core.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
|
import 'package:core/presentation/utils/style_utils.dart';
|
||||||
|
import 'package:core/presentation/views/image/avatar_builder.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get_utils/src/platform/platform.dart';
|
import 'package:get/get_utils/src/platform/platform.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
typedef OnSubtitleClick = void Function();
|
typedef OnSubtitleClick = void Function();
|
||||||
|
|
||||||
@@ -49,7 +53,11 @@ class UserInformationWidgetBuilder extends StatelessWidget {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: titlePadding ?? const EdgeInsets.only(left: 16, top: 10),
|
padding: titlePadding ?? EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
top: 10
|
||||||
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
_userProfile != null ? '${_userProfile?.email}' : '',
|
_userProfile != null ? '${_userProfile?.email}' : '',
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
@@ -60,7 +68,10 @@ class UserInformationWidgetBuilder extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
subtitle != null
|
subtitle != null
|
||||||
? Padding(
|
? Padding(
|
||||||
padding: const EdgeInsets.only(left: 10),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 10,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 10 : 0
|
||||||
|
),
|
||||||
child: Material(
|
child: Material(
|
||||||
borderRadius: BorderRadius.circular(20),
|
borderRadius: BorderRadius.circular(20),
|
||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
@@ -80,10 +91,14 @@ class UserInformationWidgetBuilder extends StatelessWidget {
|
|||||||
])),
|
])),
|
||||||
if (!kIsWeb)
|
if (!kIsWeb)
|
||||||
Transform(
|
Transform(
|
||||||
transform: Matrix4.translationValues(14.0, 0.0, 0.0),
|
transform: Matrix4.translationValues(
|
||||||
|
AppUtils.isDirectionRTL(context) ? -14.0 : 14.0,
|
||||||
|
0.0,
|
||||||
|
0.0
|
||||||
|
),
|
||||||
child: IconButton(
|
child: IconButton(
|
||||||
icon: SvgPicture.asset(
|
icon: SvgPicture.asset(
|
||||||
_imagePaths.icCollapseFolder,
|
AppUtils.isDirectionRTL(context) ? _imagePaths.icBack : _imagePaths.icCollapseFolder,
|
||||||
fit: BoxFit.fill,
|
fit: BoxFit.fill,
|
||||||
colorFilter: AppColor.colorCollapseMailbox.asFilter()),
|
colorFilter: AppColor.colorCollapseMailbox.asFilter()),
|
||||||
onPressed: () => {}))
|
onPressed: () => {}))
|
||||||
|
|||||||
@@ -205,7 +205,6 @@ class MailboxCreatorController extends BaseController {
|
|||||||
mailboxLocation: selectedMailbox.value);
|
mailboxLocation: selectedMailbox.value);
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onCreatedMailboxCallback?.call(newMailboxArguments);
|
onCreatedMailboxCallback?.call(newMailboxArguments);
|
||||||
} else {
|
} else {
|
||||||
popBack(result: newMailboxArguments);
|
popBack(result: newMailboxArguments);
|
||||||
@@ -217,7 +216,6 @@ class MailboxCreatorController extends BaseController {
|
|||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onDismissMailboxCreator?.call();
|
onDismissMailboxCreator?.call();
|
||||||
} else {
|
} else {
|
||||||
popBack();
|
popBack();
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import 'package:tmail_ui_user/features/thread/presentation/thread_view.dart';
|
|||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
import 'widgets/app_dashboard/app_grid_dashboard_overlay.dart';
|
import 'widgets/app_dashboard/app_grid_dashboard_overlay.dart';
|
||||||
|
|
||||||
@@ -61,7 +62,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
Container(
|
Container(
|
||||||
width: ResponsiveUtils.defaultSizeMenu,
|
width: ResponsiveUtils.defaultSizeMenu,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
padding: const EdgeInsets.only(left: 28),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 28,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 28 : 0,
|
||||||
|
),
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
height: 80,
|
height: 80,
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
@@ -95,7 +99,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
Expanded(child: Container(
|
Expanded(child: Container(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
padding: const EdgeInsets.only(right: 10),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 10,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 10 : 0,
|
||||||
|
),
|
||||||
height: 80,
|
height: 80,
|
||||||
child: _buildRightHeader(context)))
|
child: _buildRightHeader(context)))
|
||||||
]),
|
]),
|
||||||
@@ -118,8 +125,12 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
Expanded(child: Column(children: [
|
Expanded(child: Column(children: [
|
||||||
const SpamReportBannerWebWidget(),
|
const SpamReportBannerWebWidget(),
|
||||||
_buildEmptyTrashButton(context),
|
_buildEmptyTrashButton(context),
|
||||||
const QuotasWarningBannerWidget(
|
QuotasWarningBannerWidget(
|
||||||
margin: EdgeInsets.only(right: 16, top: 8),
|
margin: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
top: 8
|
||||||
|
),
|
||||||
),
|
),
|
||||||
_buildVacationNotificationMessage(context),
|
_buildVacationNotificationMessage(context),
|
||||||
_buildListButtonQuickSearchFilter(context),
|
_buildListButtonQuickSearchFilter(context),
|
||||||
@@ -212,7 +223,12 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
|
|
||||||
Widget _buildThreadViewForWebDesktop(BuildContext context) {
|
Widget _buildThreadViewForWebDesktop(BuildContext context) {
|
||||||
return Container(
|
return Container(
|
||||||
margin: const EdgeInsets.only(right: 16, top: 8, bottom: 16),
|
margin: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
top: 8,
|
||||||
|
bottom: 16
|
||||||
|
),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(20),
|
borderRadius: BorderRadius.circular(20),
|
||||||
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
|
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
|
||||||
@@ -273,9 +289,13 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
behavior: HitTestBehavior.opaque,
|
behavior: HitTestBehavior.opaque,
|
||||||
onTap: () => appGridDashboardController.toggleAppGridDashboard()),
|
onTap: () => appGridDashboardController.toggleAppGridDashboard()),
|
||||||
child: PortalTarget(
|
child: PortalTarget(
|
||||||
anchor: const Aligned(
|
anchor: Aligned(
|
||||||
follower: Alignment.topRight,
|
follower: AppUtils.isDirectionRTL(context)
|
||||||
target: Alignment.bottomRight
|
? Alignment.topLeft
|
||||||
|
: Alignment.topRight,
|
||||||
|
target: AppUtils.isDirectionRTL(context)
|
||||||
|
? Alignment.bottomLeft
|
||||||
|
: Alignment.bottomRight
|
||||||
),
|
),
|
||||||
portalFollower: Obx(() {
|
portalFollower: Obx(() {
|
||||||
if (appGridDashboardController.linagoraApplications.value != null) {
|
if (appGridDashboardController.linagoraApplications.value != null) {
|
||||||
@@ -344,7 +364,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
..decoration(const BoxDecoration(
|
..decoration(const BoxDecoration(
|
||||||
borderRadius: BorderRadius.all(Radius.circular(10)),
|
borderRadius: BorderRadius.all(Radius.circular(10)),
|
||||||
color: AppColor.colorButtonHeaderThread))
|
color: AppColor.colorButtonHeaderThread))
|
||||||
..paddingIcon(const EdgeInsets.only(right: 8))
|
..paddingIcon(EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0
|
||||||
|
))
|
||||||
..size(16)
|
..size(16)
|
||||||
..radiusSplash(10)
|
..radiusSplash(10)
|
||||||
..padding(const EdgeInsets.symmetric(horizontal: 12, vertical: 8))
|
..padding(const EdgeInsets.symmetric(horizontal: 12, vertical: 8))
|
||||||
@@ -354,7 +377,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
.build(),
|
.build(),
|
||||||
if (mailBoxDashboardController.isAbleMarkAllAsRead())
|
if (mailBoxDashboardController.isAbleMarkAllAsRead())
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 16),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
),
|
||||||
child: (ButtonBuilder(imagePaths.icMarkAllAsRead)
|
child: (ButtonBuilder(imagePaths.icMarkAllAsRead)
|
||||||
..key(const Key('button_mark_all_as_read'))
|
..key(const Key('button_mark_all_as_read'))
|
||||||
..decoration(const BoxDecoration(
|
..decoration(const BoxDecoration(
|
||||||
@@ -378,13 +404,19 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
..decoration(BoxDecoration(
|
..decoration(BoxDecoration(
|
||||||
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
||||||
color: controller.filterMessageOption.value.getBackgroundColor()))
|
color: controller.filterMessageOption.value.getBackgroundColor()))
|
||||||
..paddingIcon(const EdgeInsets.only(right: 8))
|
..paddingIcon(EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
))
|
||||||
..size(16)
|
..size(16)
|
||||||
..padding(const EdgeInsets.symmetric(horizontal: 12, vertical: 8))
|
..padding(const EdgeInsets.symmetric(horizontal: 12, vertical: 8))
|
||||||
..radiusSplash(10)
|
..radiusSplash(10)
|
||||||
..textStyle(controller.filterMessageOption.value.getTextStyle())
|
..textStyle(controller.filterMessageOption.value.getTextStyle())
|
||||||
..addIconAction(Padding(
|
..addIconAction(Padding(
|
||||||
padding: const EdgeInsets.only(left: 8),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
),
|
||||||
child: SvgPicture.asset(imagePaths.icArrowDown, fit: BoxFit.fill)))
|
child: SvgPicture.asset(imagePaths.icArrowDown, fit: BoxFit.fill)))
|
||||||
..addOnPressActionWithPositionClick((position) =>
|
..addOnPressActionWithPositionClick((position) =>
|
||||||
controller.openPopupMenuAction(
|
controller.openPopupMenuAction(
|
||||||
@@ -472,7 +504,11 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
return Obx(() {
|
return Obx(() {
|
||||||
if (controller.vacationResponse.value?.vacationResponderIsValid == true) {
|
if (controller.vacationResponse.value?.vacationResponderIsValid == true) {
|
||||||
return VacationNotificationMessageWidget(
|
return VacationNotificationMessageWidget(
|
||||||
margin: const EdgeInsets.only(top: 16, right: 16),
|
margin: EdgeInsets.only(
|
||||||
|
top: 16,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
),
|
||||||
vacationResponse: controller.vacationResponse.value!,
|
vacationResponse: controller.vacationResponse.value!,
|
||||||
actionGotoVacationSetting: () => controller.goToVacationSetting(),
|
actionGotoVacationSetting: () => controller.goToVacationSetting(),
|
||||||
actionEndNow: () => controller.disableVacationResponder());
|
actionEndNow: () => controller.disableVacationResponder());
|
||||||
@@ -491,7 +527,11 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
return Obx(() {
|
return Obx(() {
|
||||||
if (supportListButtonQuickSearchFilter(context)) {
|
if (supportListButtonQuickSearchFilter(context)) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 16, top: 16),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
top: 16
|
||||||
|
),
|
||||||
child: Row(children: QuickSearchFilter.values
|
child: Row(children: QuickSearchFilter.values
|
||||||
.map((filter) => _buildQuickSearchFilterButton(context, filter))
|
.map((filter) => _buildQuickSearchFilterButton(context, filter))
|
||||||
.toList()
|
.toList()
|
||||||
@@ -514,7 +554,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 8),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
),
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if (filter != QuickSearchFilter.last7Days) {
|
if (filter != QuickSearchFilter.last7Days) {
|
||||||
@@ -613,11 +656,18 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
borderRadius: const BorderRadius.all(Radius.circular(14)),
|
borderRadius: const BorderRadius.all(Radius.circular(14)),
|
||||||
border: Border.all(color: AppColor.colorLineLeftEmailView),
|
border: Border.all(color: AppColor.colorLineLeftEmailView),
|
||||||
color: Colors.white),
|
color: Colors.white),
|
||||||
margin: const EdgeInsets.only(right: 16, top: 16),
|
margin: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
top: 16
|
||||||
|
),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(right: 16),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
),
|
||||||
child: SvgPicture.asset(
|
child: SvgPicture.asset(
|
||||||
imagePaths.icDeleteTrash,
|
imagePaths.icDeleteTrash,
|
||||||
fit: BoxFit.fill)),
|
fit: BoxFit.fill)),
|
||||||
@@ -626,7 +676,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 8),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 8 : 0
|
||||||
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(context).message_delete_all_email_in_trash_button,
|
AppLocalizations.of(context).message_delete_all_email_in_trash_button,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
@@ -671,7 +724,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
color: AppColor.colorShadowComposerButton
|
color: AppColor.colorShadowComposerButton
|
||||||
)
|
)
|
||||||
]))
|
]))
|
||||||
..paddingIcon(const EdgeInsets.only(right: 8))
|
..paddingIcon(EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
))
|
||||||
..iconColor(Colors.white)
|
..iconColor(Colors.white)
|
||||||
..size(24)
|
..size(24)
|
||||||
..radiusSplash(10)
|
..radiusSplash(10)
|
||||||
|
|||||||
+9
-2
@@ -7,6 +7,7 @@ import 'package:flutter_svg/flutter_svg.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class IconOpenAdvancedSearchWidget extends StatelessWidget {
|
class IconOpenAdvancedSearchWidget extends StatelessWidget {
|
||||||
IconOpenAdvancedSearchWidget(
|
IconOpenAdvancedSearchWidget(
|
||||||
@@ -23,11 +24,17 @@ class IconOpenAdvancedSearchWidget extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Obx(
|
return Obx(
|
||||||
() => Padding(
|
() => Padding(
|
||||||
padding: const EdgeInsets.only(right: 8),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
),
|
||||||
child: buildIconWeb(
|
child: buildIconWeb(
|
||||||
splashRadius: 15,
|
splashRadius: 15,
|
||||||
minSize: 40,
|
minSize: 40,
|
||||||
iconPadding: const EdgeInsets.only(right: 2),
|
iconPadding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 2,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 2 : 0,
|
||||||
|
),
|
||||||
icon: SvgPicture.asset(_imagePaths.icFilterAdvanced,
|
icon: SvgPicture.asset(_imagePaths.icFilterAdvanced,
|
||||||
colorFilter: searchController.isAdvancedSearchViewOpen.isTrue || searchController.advancedSearchIsActivated.isTrue
|
colorFilter: searchController.isAdvancedSearchViewOpen.isTrue || searchController.advancedSearchIsActivated.isTrue
|
||||||
? AppColor.colorFilterMessageEnabled.asFilter()
|
? AppColor.colorFilterMessageEnabled.asFilter()
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/ad
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/email_quick_search_item_tile_widget.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/email_quick_search_item_tile_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/recent_search_item_tile_widget.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/recent_search_item_tile_widget.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
||||||
final MailboxDashBoardController dashBoardController;
|
final MailboxDashBoardController dashBoardController;
|
||||||
@@ -189,7 +190,10 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
|||||||
labelStyle: const TextStyle(color: Colors.black, fontSize: 16.0)
|
labelStyle: const TextStyle(color: Colors.black, fontSize: 16.0)
|
||||||
),
|
),
|
||||||
leftButton: Padding(
|
leftButton: Padding(
|
||||||
padding: const EdgeInsets.only(left: 8),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 8 : 0
|
||||||
|
),
|
||||||
child: buildIconWeb(
|
child: buildIconWeb(
|
||||||
minSize: 40,
|
minSize: 40,
|
||||||
iconPadding: EdgeInsets.zero,
|
iconPadding: EdgeInsets.zero,
|
||||||
@@ -215,10 +219,12 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
|||||||
final isFilterSelected = filter.isApplied(dashBoardController.searchController.listFilterOnSuggestionForm);
|
final isFilterSelected = filter.isApplied(dashBoardController.searchController.listFilterOnSuggestionForm);
|
||||||
|
|
||||||
return Chip(
|
return Chip(
|
||||||
labelPadding: const EdgeInsets.only(
|
labelPadding: EdgeInsets.only(
|
||||||
top: 2,
|
top: 2,
|
||||||
bottom: 2,
|
bottom: 2,
|
||||||
right: 10),
|
right: AppUtils.isDirectionRTL(context) ? 0 : 10,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 10 : 0,
|
||||||
|
),
|
||||||
label: Text(
|
label: Text(
|
||||||
filter.getName(context),
|
filter.getName(context),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
|
|||||||
+27
-11
@@ -6,6 +6,7 @@ import 'package:flutter_svg/flutter_svg.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/spam_report_controller.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class SpamReportBannerWebWidget extends StatelessWidget {
|
class SpamReportBannerWebWidget extends StatelessWidget {
|
||||||
const SpamReportBannerWebWidget({ Key? key }) : super(key: key);
|
const SpamReportBannerWebWidget({ Key? key }) : super(key: key);
|
||||||
@@ -22,7 +23,11 @@ class SpamReportBannerWebWidget extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
return Container(
|
return Container(
|
||||||
height: 84,
|
height: 84,
|
||||||
margin: const EdgeInsets.only(right: 16, top: 16),
|
margin: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
top: 16
|
||||||
|
),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(12),
|
borderRadius: BorderRadius.circular(12),
|
||||||
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
|
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
|
||||||
@@ -53,8 +58,9 @@ class SpamReportBannerWebWidget extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
left: 32,
|
left: AppUtils.isDirectionRTL(context) ? 0 : 32,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 32 : 0,
|
||||||
),
|
),
|
||||||
child: buildTextButton(
|
child: buildTextButton(
|
||||||
AppLocalizations.of(context).showDetails,
|
AppLocalizations.of(context).showDetails,
|
||||||
@@ -71,14 +77,24 @@ class SpamReportBannerWebWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
Positioned(
|
if (AppUtils.isDirectionRTL(context))
|
||||||
top: 16,
|
Positioned(
|
||||||
right: 16,
|
top: 16,
|
||||||
child: buildSVGIconButton(
|
left: 16,
|
||||||
icon: imagePaths.icCloseComposer,
|
child: buildSVGIconButton(
|
||||||
onTap: () => spamReportController.dismissSpamReportAction(),
|
icon: imagePaths.icCloseComposer,
|
||||||
),
|
onTap: spamReportController.dismissSpamReportAction,
|
||||||
),
|
),
|
||||||
|
)
|
||||||
|
else
|
||||||
|
Positioned(
|
||||||
|
top: 16,
|
||||||
|
right: 16,
|
||||||
|
child: buildSVGIconButton(
|
||||||
|
icon: imagePaths.icCloseComposer,
|
||||||
|
onTap: spamReportController.dismissSpamReportAction,
|
||||||
|
),
|
||||||
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
+2
-1
@@ -57,6 +57,7 @@ class EmailRulesHeaderWidget extends StatelessWidget {
|
|||||||
..iconColor(Colors.white)
|
..iconColor(Colors.white)
|
||||||
..size(20)
|
..size(20)
|
||||||
..radiusSplash(10)
|
..radiusSplash(10)
|
||||||
|
..addBoxConstraints(const BoxConstraints(minWidth: 130))
|
||||||
..padding(const EdgeInsets.symmetric(vertical: 12,horizontal: 8))
|
..padding(const EdgeInsets.symmetric(vertical: 12,horizontal: 8))
|
||||||
..textStyle(const TextStyle(
|
..textStyle(const TextStyle(
|
||||||
fontSize: 17,
|
fontSize: 17,
|
||||||
@@ -68,7 +69,7 @@ class EmailRulesHeaderWidget extends StatelessWidget {
|
|||||||
AppLocalizations.of(context).addNewRule,
|
AppLocalizations.of(context).addNewRule,
|
||||||
isVertical: false,
|
isVertical: false,
|
||||||
)).build(),
|
)).build(),
|
||||||
const Expanded(child: SizedBox()),
|
const Spacer(),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+1
-1
@@ -34,7 +34,7 @@ extension LocaleExtension on Locale {
|
|||||||
case 'ru':
|
case 'ru':
|
||||||
return 'Русский';
|
return 'Русский';
|
||||||
case 'ar':
|
case 'ar':
|
||||||
return 'اَلْعَرَبِيَّةُ';
|
return 'عربي';
|
||||||
case 'it':
|
case 'it':
|
||||||
return 'Italiano';
|
return 'Italiano';
|
||||||
default:
|
default:
|
||||||
|
|||||||
+40
-30
@@ -2,11 +2,13 @@
|
|||||||
import 'package:core/presentation/extensions/color_extension.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_portal/flutter_portal.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_controller.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/widgets/change_language_button_widget.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/widgets/change_language_button_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/widgets/language_and_region_header_widget.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/widgets/language_and_region_header_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class LanguageAndRegionView extends GetWidget<LanguageAndRegionController> {
|
class LanguageAndRegionView extends GetWidget<LanguageAndRegionController> {
|
||||||
|
|
||||||
@@ -16,36 +18,44 @@ class LanguageAndRegionView extends GetWidget<LanguageAndRegionController> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Portal(
|
||||||
backgroundColor: _responsiveUtils.isWebDesktop(context)
|
child: Scaffold(
|
||||||
? AppColor.colorBgDesktop
|
backgroundColor: _responsiveUtils.isWebDesktop(context)
|
||||||
: Colors.white,
|
? AppColor.colorBgDesktop
|
||||||
body: Container(
|
: Colors.white,
|
||||||
width: double.infinity,
|
body: Container(
|
||||||
margin: _responsiveUtils.isWebDesktop(context)
|
width: double.infinity,
|
||||||
? const EdgeInsets.all(24)
|
margin: _responsiveUtils.isWebDesktop(context)
|
||||||
: EdgeInsets.symmetric(horizontal: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)),
|
? const EdgeInsets.all(24)
|
||||||
color: _responsiveUtils.isWebDesktop(context) ? null : Colors.white,
|
: EdgeInsets.symmetric(horizontal: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)),
|
||||||
decoration: _responsiveUtils.isWebDesktop(context)
|
color: _responsiveUtils.isWebDesktop(context) ? null : Colors.white,
|
||||||
? BoxDecoration(
|
decoration: _responsiveUtils.isWebDesktop(context)
|
||||||
borderRadius: BorderRadius.circular(20),
|
? BoxDecoration(
|
||||||
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
|
borderRadius: BorderRadius.circular(20),
|
||||||
color: Colors.white)
|
border: Border.all(color: AppColor.colorBorderBodyThread, width: 1),
|
||||||
: null,
|
color: Colors.white)
|
||||||
child: ClipRRect(
|
: null,
|
||||||
borderRadius: BorderRadius.circular(
|
child: ClipRRect(
|
||||||
_responsiveUtils.isWebDesktop(context) ? 20 : 0),
|
borderRadius: BorderRadius.circular(
|
||||||
child: Padding(
|
_responsiveUtils.isWebDesktop(context) ? 20 : 0),
|
||||||
padding: EdgeInsets.only(
|
child: Padding(
|
||||||
left: _responsiveUtils.isWebDesktop(context) ? 24 : 0,
|
padding: EdgeInsets.only(
|
||||||
top: 24),
|
right: AppUtils.isDirectionRTL(context)
|
||||||
child: Column(
|
? _responsiveUtils.isWebDesktop(context) ? 24 : 0
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
: 0,
|
||||||
children: [
|
left: AppUtils.isDirectionRTL(context)
|
||||||
const LanguageAndRegionHeaderWidget(),
|
? 0
|
||||||
const SizedBox(height: 22),
|
: _responsiveUtils.isWebDesktop(context) ? 24 : 0,
|
||||||
Expanded(child: ChangeLanguageButtonWidget())
|
top: 24
|
||||||
]
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
const LanguageAndRegionHeaderWidget(),
|
||||||
|
const SizedBox(height: 22),
|
||||||
|
Expanded(child: ChangeLanguageButtonWidget())
|
||||||
|
]
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
+6
-1
@@ -16,6 +16,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visib
|
|||||||
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/utils/mailbox_visibility_utils.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/utils/mailbox_visibility_utils.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_header_widget.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_header_widget.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class MailboxVisibilityView extends GetWidget<MailboxVisibilityController>
|
class MailboxVisibilityView extends GetWidget<MailboxVisibilityController>
|
||||||
with AppLoaderMixin,
|
with AppLoaderMixin,
|
||||||
@@ -137,7 +138,11 @@ class MailboxVisibilityView extends GetWidget<MailboxVisibilityController>
|
|||||||
context,
|
context,
|
||||||
key: const Key('children_tree_mailbox_child'),
|
key: const Key('children_tree_mailbox_child'),
|
||||||
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
||||||
paddingChild: const EdgeInsets.only(left: 10),
|
isDirectionRTL: AppUtils.isDirectionRTL(context),
|
||||||
|
paddingChild: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 10,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 10 : 0,
|
||||||
|
),
|
||||||
parent: MailBoxVisibilityFolderTileBuilder(
|
parent: MailBoxVisibilityFolderTileBuilder(
|
||||||
_imagePaths,
|
_imagePaths,
|
||||||
mailboxNode,
|
mailboxNode,
|
||||||
|
|||||||
+7
-3
@@ -9,6 +9,7 @@ import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_ma
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class MailBoxVisibilityFolderTileBuilder extends StatelessWidget {
|
class MailBoxVisibilityFolderTileBuilder extends StatelessWidget {
|
||||||
|
|
||||||
@@ -75,7 +76,7 @@ class MailBoxVisibilityFolderTileBuilder extends StatelessWidget {
|
|||||||
else
|
else
|
||||||
const SizedBox(width: 24),
|
const SizedBox(width: 24),
|
||||||
if (!_mailboxNode.item.isTeamMailboxes)
|
if (!_mailboxNode.item.isTeamMailboxes)
|
||||||
_buildMailboxIcon(),
|
_buildMailboxIcon(context),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -113,9 +114,12 @@ class MailBoxVisibilityFolderTileBuilder extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildMailboxIcon() {
|
Widget _buildMailboxIcon(BuildContext context) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 8),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
),
|
||||||
child: SvgPicture.asset(
|
child: SvgPicture.asset(
|
||||||
_mailboxNode.item.getMailboxIcon(_imagePaths),
|
_mailboxNode.item.getMailboxIcon(_imagePaths),
|
||||||
width: 20,
|
width: 20,
|
||||||
|
|||||||
+5
-1
@@ -1,6 +1,7 @@
|
|||||||
import 'package:core/presentation/extensions/color_extension.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class MailboxVisibilityHeaderWidget extends StatelessWidget {
|
class MailboxVisibilityHeaderWidget extends StatelessWidget {
|
||||||
|
|
||||||
@@ -9,7 +10,10 @@ class MailboxVisibilityHeaderWidget extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(left: 24),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 24,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 24 : 0
|
||||||
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import 'package:get/get.dart';
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_view.dart';
|
||||||
@@ -46,7 +47,7 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
|
|||||||
desktop: Column(children: [
|
desktop: Column(children: [
|
||||||
Row(children: [
|
Row(children: [
|
||||||
Container(width: 256, color: Colors.white,
|
Container(width: 256, color: Colors.white,
|
||||||
padding: const EdgeInsets.only(top: 25, bottom: 25, left: 32),
|
padding: SettingsUtils.getPaddingHeaderSetting(context),
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
(SloganBuilder(arrangedByHorizontal: true)
|
(SloganBuilder(arrangedByHorizontal: true)
|
||||||
..setSloganText(AppLocalizations.of(context).app_name)
|
..setSloganText(AppLocalizations.of(context).app_name)
|
||||||
@@ -71,7 +72,7 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
|
|||||||
])
|
])
|
||||||
),
|
),
|
||||||
Expanded(child: Padding(
|
Expanded(child: Padding(
|
||||||
padding: const EdgeInsets.only(right: 10, top: 16, bottom: 10, left: 48),
|
padding: SettingsUtils.getPaddingRightHeaderSetting(context),
|
||||||
child: _buildRightHeader(context)))
|
child: _buildRightHeader(context)))
|
||||||
]),
|
]),
|
||||||
Expanded(child: Row(
|
Expanded(child: Row(
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ 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_menu_item_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';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
|
class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
|
||||||
|
|
||||||
@@ -57,11 +58,18 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
|
|||||||
color: _responsiveUtils.isWebDesktop(context) ? AppColor.colorBgDesktop : Colors.white,
|
color: _responsiveUtils.isWebDesktop(context) ? AppColor.colorBgDesktop : Colors.white,
|
||||||
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 20, top: 24),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 20,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 20 : 0,
|
||||||
|
top: 24
|
||||||
|
),
|
||||||
child: (ButtonBuilder(_imagePaths.icBack)
|
child: (ButtonBuilder(_imagePaths.icBack)
|
||||||
..key(const Key('button_back'))
|
..key(const Key('button_back'))
|
||||||
..decoration(BoxDecoration(borderRadius: BorderRadius.circular(10), color: AppColor.colorBgMailboxSelected))
|
..decoration(BoxDecoration(borderRadius: BorderRadius.circular(10), color: AppColor.colorBgMailboxSelected))
|
||||||
..paddingIcon(const EdgeInsets.only(right: 8))
|
..paddingIcon(EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
))
|
||||||
..iconColor(AppColor.colorTextButton)
|
..iconColor(AppColor.colorTextButton)
|
||||||
..maxWidth(100)
|
..maxWidth(100)
|
||||||
..size(16)
|
..size(16)
|
||||||
@@ -72,14 +80,21 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
|
|||||||
..text(AppLocalizations.of(context).back, isVertical: false))
|
..text(AppLocalizations.of(context).back, isVertical: false))
|
||||||
.build()),
|
.build()),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 32, top: 20),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 32,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 32 : 0,
|
||||||
|
top: 20
|
||||||
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(context).manage_account,
|
AppLocalizations.of(context).manage_account,
|
||||||
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 17))),
|
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 17))),
|
||||||
const SizedBox(height: 12),
|
const SizedBox(height: 12),
|
||||||
Obx(
|
Obx(
|
||||||
() => ListView.builder(
|
() => ListView.builder(
|
||||||
padding: const EdgeInsets.only(left: 16, right: 8),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 8 : 16,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 16 : 8
|
||||||
|
),
|
||||||
key: const Key('list_manage_account_property'),
|
key: const Key('list_manage_account_property'),
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
itemCount: controller.listAccountMenuItem.length,
|
itemCount: controller.listAccountMenuItem.length,
|
||||||
@@ -95,21 +110,31 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
|
|||||||
const Padding(
|
const Padding(
|
||||||
padding: EdgeInsets.symmetric(vertical: 16),
|
padding: EdgeInsets.symmetric(vertical: 16),
|
||||||
child: Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)),
|
child: Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)),
|
||||||
Padding(padding: const EdgeInsets.only(left: 32),
|
Padding(
|
||||||
child: InkWell(
|
padding: EdgeInsets.only(
|
||||||
onTap: () {
|
left: AppUtils.isDirectionRTL(context) ? 0 : 32,
|
||||||
controller.logout(
|
right: AppUtils.isDirectionRTL(context) ? 32 : 0,
|
||||||
controller.dashBoardController.sessionCurrent.value,
|
),
|
||||||
controller.dashBoardController.accountId.value
|
child: InkWell(
|
||||||
);
|
onTap: () {
|
||||||
},
|
controller.logout(
|
||||||
child: Row(children: [
|
controller.dashBoardController.sessionCurrent.value,
|
||||||
SvgPicture.asset(_imagePaths.icSignOut, fit: BoxFit.fill),
|
controller.dashBoardController.accountId.value
|
||||||
const SizedBox(width: 12),
|
);
|
||||||
Expanded(child: Text(AppLocalizations.of(context).sign_out,
|
},
|
||||||
style: const TextStyle(fontWeight: FontWeight.normal, fontSize: 15, color: Colors.black)))
|
child: Row(children: [
|
||||||
])
|
SvgPicture.asset(_imagePaths.icSignOut, 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
|
||||||
|
)
|
||||||
|
))
|
||||||
|
])
|
||||||
|
)
|
||||||
),
|
),
|
||||||
]),
|
]),
|
||||||
)),
|
)),
|
||||||
|
|||||||
+5
-1
@@ -9,6 +9,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings
|
|||||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/setting_first_level_tile_builder.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/setting_first_level_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
||||||
SettingsFirstLevelView({Key? key}) : super(key: key);
|
SettingsFirstLevelView({Key? key}) : super(key: key);
|
||||||
@@ -25,7 +26,10 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
|||||||
child: UserInformationWidgetBuilder(
|
child: UserInformationWidgetBuilder(
|
||||||
_imagePaths,
|
_imagePaths,
|
||||||
controller.manageAccountDashboardController.userProfile.value,
|
controller.manageAccountDashboardController.userProfile.value,
|
||||||
titlePadding: const EdgeInsets.only(left: 16))
|
titlePadding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 16 : 0
|
||||||
|
))
|
||||||
)),
|
)),
|
||||||
Divider(
|
Divider(
|
||||||
color: AppColor.colorDividerComposer,
|
color: AppColor.colorDividerComposer,
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/profiles/prof
|
|||||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_view.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_view.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
typedef CloseSettingsViewAction = void Function();
|
typedef CloseSettingsViewAction = void Function();
|
||||||
|
|
||||||
@@ -66,9 +67,12 @@ class SettingsView extends GetWidget<SettingsController> {
|
|||||||
fromAccountDashBoard: true,
|
fromAccountDashBoard: true,
|
||||||
vacationResponse: controller.manageAccountDashboardController.vacationResponse.value!,
|
vacationResponse: controller.manageAccountDashboardController.vacationResponse.value!,
|
||||||
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 16),
|
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 16),
|
||||||
leadingIcon: const Padding(
|
leadingIcon: Padding(
|
||||||
padding: EdgeInsets.only(right: 16),
|
padding: EdgeInsets.only(
|
||||||
child: Icon(Icons.timer, size: 20),
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
),
|
||||||
|
child: const Icon(Icons.timer, size: 20),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@@ -131,13 +135,14 @@ class SettingsView extends GetWidget<SettingsController> {
|
|||||||
padding: const EdgeInsets.symmetric(horizontal: 8),
|
padding: const EdgeInsets.symmetric(horizontal: 8),
|
||||||
child: Row(mainAxisSize: MainAxisSize.min, children: [
|
child: Row(mainAxisSize: MainAxisSize.min, children: [
|
||||||
SvgPicture.asset(
|
SvgPicture.asset(
|
||||||
_imagePaths.icBack,
|
AppUtils.isDirectionRTL(context) ? _imagePaths.icCollapseFolder : _imagePaths.icBack,
|
||||||
width: 18,
|
|
||||||
height: 18,
|
|
||||||
colorFilter: AppColor.colorTextButton.asFilter(),
|
colorFilter: AppColor.colorTextButton.asFilter(),
|
||||||
fit: BoxFit.fill),
|
fit: BoxFit.fill),
|
||||||
Container(
|
Container(
|
||||||
margin: const EdgeInsets.only(left: 8),
|
margin: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 8 : 0,
|
||||||
|
),
|
||||||
constraints: const BoxConstraints(maxWidth: 100),
|
constraints: const BoxConstraints(maxWidth: 100),
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(context).settings,
|
AppLocalizations.of(context).settings,
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import 'package:core/presentation/extensions/color_extension.dart';
|
|||||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
import 'package:core/utils/build_utils.dart';
|
import 'package:core/utils/build_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class SettingsUtils {
|
class SettingsUtils {
|
||||||
static double getHorizontalPadding(BuildContext context, ResponsiveUtils responsiveUtils) {
|
static double getHorizontalPadding(BuildContext context, ResponsiveUtils responsiveUtils) {
|
||||||
@@ -142,4 +143,20 @@ class SettingsUtils {
|
|||||||
return EdgeInsets.zero;
|
return EdgeInsets.zero;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static EdgeInsets getPaddingHeaderSetting(BuildContext context) {
|
||||||
|
if (AppUtils.isDirectionRTL(context)) {
|
||||||
|
return const EdgeInsets.only(top: 25, bottom: 25, right: 32);
|
||||||
|
} else {
|
||||||
|
return const EdgeInsets.only(top: 25, bottom: 25, left: 32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static EdgeInsets getPaddingRightHeaderSetting(BuildContext context) {
|
||||||
|
if (AppUtils.isDirectionRTL(context)) {
|
||||||
|
return const EdgeInsets.only(right: 48, top: 16, bottom: 10, left: 10);
|
||||||
|
} else {
|
||||||
|
return const EdgeInsets.only(right: 10, top: 16, bottom: 10, left: 48);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+15
-4
@@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_svg/svg.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
typedef SettingFirstLevelTileClickAction = void Function();
|
typedef SettingFirstLevelTileClickAction = void Function();
|
||||||
|
|
||||||
@@ -41,7 +42,10 @@ class SettingFirstLevelTileBuilder extends StatelessWidget {
|
|||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(left: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? SettingsUtils.getHorizontalPadding(context, _responsiveUtils) : 0,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : SettingsUtils.getHorizontalPadding(context, _responsiveUtils),
|
||||||
|
),
|
||||||
child: _buildSettingIcon(context)),
|
child: _buildSettingIcon(context)),
|
||||||
Expanded(child: Padding(
|
Expanded(child: Padding(
|
||||||
padding: const EdgeInsets.only(left: 12, right: 12),
|
padding: const EdgeInsets.only(left: 12, right: 12),
|
||||||
@@ -61,7 +65,11 @@ class SettingFirstLevelTileBuilder extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
subtitle != null
|
subtitle != null
|
||||||
? Padding(
|
? Padding(
|
||||||
padding: EdgeInsets.only(left: _getSubtitleLeftPadding(context), right: 12, top: 12),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 12 : _getSubtitleLeftPadding(context),
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? _getSubtitleLeftPadding(context) : 12,
|
||||||
|
top: 12
|
||||||
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
subtitle!,
|
subtitle!,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
@@ -72,9 +80,12 @@ class SettingFirstLevelTileBuilder extends StatelessWidget {
|
|||||||
]
|
]
|
||||||
)),
|
)),
|
||||||
IconButton(
|
IconButton(
|
||||||
padding: EdgeInsets.only(right: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : SettingsUtils.getHorizontalPadding(context, _responsiveUtils),
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? SettingsUtils.getHorizontalPadding(context, _responsiveUtils) : 0,
|
||||||
|
),
|
||||||
icon: SvgPicture.asset(
|
icon: SvgPicture.asset(
|
||||||
_imagePath.icCollapseFolder,
|
AppUtils.isDirectionRTL(context) ? _imagePath.icBack : _imagePath.icCollapseFolder,
|
||||||
fit: BoxFit.fill,
|
fit: BoxFit.fill,
|
||||||
colorFilter: AppColor.colorCollapseMailbox.asFilter()),
|
colorFilter: AppColor.colorCollapseMailbox.asFilter()),
|
||||||
onPressed: clickAction
|
onPressed: clickAction
|
||||||
|
|||||||
@@ -419,10 +419,9 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
|
|||||||
Widget _buildMessagePlainTextEditor(BuildContext context) {
|
Widget _buildMessagePlainTextEditor(BuildContext context) {
|
||||||
return (TextFieldBuilder()
|
return (TextFieldBuilder()
|
||||||
..onChange((value) => controller.updateMessageBody(context, value))
|
..onChange((value) => controller.updateMessageBody(context, value))
|
||||||
..textInputAction(TextInputAction.next)
|
..keyboardType(TextInputType.multiline)
|
||||||
..addController(controller.messageTextController)
|
..addController(controller.messageTextController)
|
||||||
..textStyle(const TextStyle(color: Colors.black, fontSize: 16))
|
..textStyle(const TextStyle(color: Colors.black, fontSize: 16))
|
||||||
..keyboardType(TextInputType.text)
|
|
||||||
..minLines(10)
|
..minLines(10)
|
||||||
..maxLines(null)
|
..maxLines(null)
|
||||||
..textDecoration((TextInputDecorationBuilder()
|
..textDecoration((TextInputDecorationBuilder()
|
||||||
|
|||||||
@@ -88,7 +88,6 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
inputConditionValueController = TextEditingController();
|
inputConditionValueController = TextEditingController();
|
||||||
inputRuleNameFocusNode = FocusNode();
|
inputRuleNameFocusNode = FocusNode();
|
||||||
inputRuleConditionFocusNode = FocusNode();
|
inputRuleConditionFocusNode = FocusNode();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -319,7 +318,6 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
newTMailRule);
|
newTMailRule);
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onCreatedRuleFilterCallback?.call(ruleFilterRequest);
|
onCreatedRuleFilterCallback?.call(ruleFilterRequest);
|
||||||
} else {
|
} else {
|
||||||
popBack(result: ruleFilterRequest);
|
popBack(result: ruleFilterRequest);
|
||||||
@@ -330,7 +328,6 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
newTMailRule);
|
newTMailRule);
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onCreatedRuleFilterCallback?.call(ruleFilterRequest);
|
onCreatedRuleFilterCallback?.call(ruleFilterRequest);
|
||||||
} else {
|
} else {
|
||||||
popBack(result: ruleFilterRequest);
|
popBack(result: ruleFilterRequest);
|
||||||
@@ -359,7 +356,6 @@ class RulesFilterCreatorController extends BaseMailboxController {
|
|||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onDismissRuleFilterCreator?.call();
|
onDismissRuleFilterCreator?.call();
|
||||||
} else {
|
} else {
|
||||||
popBack();
|
popBack();
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_sta
|
|||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart'
|
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart'
|
||||||
if (dart.library.html) 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_web_builder.dart';
|
if (dart.library.html) 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_web_builder.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class SearchEmailView extends GetWidget<SearchEmailController>
|
class SearchEmailView extends GetWidget<SearchEmailController>
|
||||||
with AppLoaderMixin {
|
with AppLoaderMixin {
|
||||||
@@ -108,11 +109,11 @@ class SearchEmailView extends GetWidget<SearchEmailController>
|
|||||||
return Row(
|
return Row(
|
||||||
children: [
|
children: [
|
||||||
buildIconWeb(
|
buildIconWeb(
|
||||||
icon: SvgPicture.asset(_imagePaths.icBack,
|
icon: SvgPicture.asset(
|
||||||
width: 18,
|
AppUtils.isDirectionRTL(context) ? _imagePaths.icCollapseFolder : _imagePaths.icBack,
|
||||||
height: 18,
|
colorFilter: AppColor.colorTextButton.asFilter(),
|
||||||
colorFilter: AppColor.colorTextButton.asFilter(),
|
fit: BoxFit.fill
|
||||||
fit: BoxFit.fill),
|
),
|
||||||
tooltip: AppLocalizations.of(context).back,
|
tooltip: AppLocalizations.of(context).back,
|
||||||
onTap: () => controller.closeSearchView(context)
|
onTap: () => controller.closeSearchView(context)
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import 'package:tmail_ui_user/features/thread/presentation/widgets/filter_messag
|
|||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/spam_report_banner_widget.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/widgets/spam_report_banner_widget.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class ThreadView extends GetWidget<ThreadController>
|
class ThreadView extends GetWidget<ThreadController>
|
||||||
with AppLoaderMixin,
|
with AppLoaderMixin,
|
||||||
@@ -187,11 +188,16 @@ class ThreadView extends GetWidget<ThreadController>
|
|||||||
? EdgeInsets.zero
|
? EdgeInsets.zero
|
||||||
: controller.listEmailSelected.isNotEmpty ? const EdgeInsets.only(bottom: 70) : EdgeInsets.zero,
|
: controller.listEmailSelected.isNotEmpty ? const EdgeInsets.only(bottom: 70) : EdgeInsets.zero,
|
||||||
child: Align(
|
child: Align(
|
||||||
alignment: Alignment.bottomRight,
|
alignment: AppUtils.isDirectionRTL(context)
|
||||||
|
? Alignment.bottomLeft
|
||||||
|
: Alignment.bottomRight,
|
||||||
child: ScrollingFloatingButtonAnimated(
|
child: ScrollingFloatingButtonAnimated(
|
||||||
icon: SvgPicture.asset(_imagePaths.icCompose, width: 20, height: 20, fit: BoxFit.fill),
|
icon: SvgPicture.asset(_imagePaths.icCompose, width: 20, height: 20, fit: BoxFit.fill),
|
||||||
text: Padding(
|
text: Padding(
|
||||||
padding: const EdgeInsets.only(right: 16),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
),
|
||||||
child: Text(AppLocalizations.of(context).compose,
|
child: Text(AppLocalizations.of(context).compose,
|
||||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||||
@@ -532,14 +538,17 @@ class ThreadView extends GetWidget<ThreadController>
|
|||||||
border: Border.all(color: AppColor.colorLineLeftEmailView),
|
border: Border.all(color: AppColor.colorLineLeftEmailView),
|
||||||
color: Colors.white),
|
color: Colors.white),
|
||||||
margin: EdgeInsets.only(
|
margin: EdgeInsets.only(
|
||||||
left: _responsiveUtils.isWebDesktop(context) ? 0 : 16,
|
left: AppUtils.isDirectionRTL(context) ? 16 : _responsiveUtils.isWebDesktop(context) ? 0 : 16,
|
||||||
right: 16,
|
right: AppUtils.isDirectionRTL(context) ? _responsiveUtils.isWebDesktop(context) ? 0 : 16 : 16,
|
||||||
bottom: _responsiveUtils.isWebDesktop(context) ? 0 : 16,
|
bottom: _responsiveUtils.isWebDesktop(context) ? 0 : 16,
|
||||||
top: _responsiveUtils.isWebDesktop(context) ? 16 : 0),
|
top: _responsiveUtils.isWebDesktop(context) ? 16 : 0),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(right: 16),
|
padding: EdgeInsets.only(
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
|
||||||
|
),
|
||||||
child: SvgPicture.asset(
|
child: SvgPicture.asset(
|
||||||
_imagePaths.icDeleteTrash,
|
_imagePaths.icDeleteTrash,
|
||||||
fit: BoxFit.fill)),
|
fit: BoxFit.fill)),
|
||||||
@@ -548,7 +557,10 @@ class ThreadView extends GetWidget<ThreadController>
|
|||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 8),
|
padding: EdgeInsets.only(
|
||||||
|
left: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
right: AppUtils.isDirectionRTL(context) ? 0 : 8,
|
||||||
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
AppLocalizations.of(context).message_delete_all_email_in_trash_button,
|
AppLocalizations.of(context).message_delete_all_email_in_trash_button,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
|
|||||||
+2
-1
@@ -1,4 +1,5 @@
|
|||||||
import 'package:core/core.dart';
|
import 'package:core/presentation/utils/theme_utils.dart';
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
import 'package:core/core.dart';
|
import 'package:core/utils/build_utils.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
import 'package:tmail_ui_user/main/utils/app_config.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
import 'package:intl/intl.dart' as intl;
|
||||||
|
|
||||||
class AppUtils {
|
class AppUtils {
|
||||||
|
|
||||||
@@ -26,4 +28,8 @@ class AppUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static String? get fcmVapidPublicKey => BuildUtils.isWeb ? AppConfig.fcmVapidPublicKeyWeb : null;
|
static String? get fcmVapidPublicKey => BuildUtils.isWeb ? AppConfig.fcmVapidPublicKeyWeb : null;
|
||||||
|
|
||||||
|
static bool isDirectionRTL(BuildContext context) {
|
||||||
|
return intl.Bidi.isRtlLanguage(Localizations.localeOf(context).languageCode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user