TF-4174 Display tag in opened email view on mobile

This commit is contained in:
dab246
2025-11-28 09:38:32 +07:00
committed by Dat H. Pham
parent e10a9d2f64
commit a684051cc9
3 changed files with 32 additions and 35 deletions
@@ -241,7 +241,6 @@ class EmailView extends GetWidget<SingleEmailController> {
ScrollController? scrollController, ScrollController? scrollController,
}) { }) {
final isMobileResponsive = controller.responsiveUtils.isMobile(context); final isMobileResponsive = controller.responsiveUtils.isMobile(context);
final isWebDesktop = controller.responsiveUtils.isWebDesktop(context);
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@@ -258,7 +257,6 @@ class EmailView extends GetWidget<SingleEmailController> {
subject: threadSubject, subject: threadSubject,
), ),
isMobileResponsive: isMobileResponsive, isMobileResponsive: isMobileResponsive,
isWebDesktop: isWebDesktop,
labels: emailLabels, labels: emailLabels,
); );
}), }),
@@ -7,46 +7,55 @@ import 'package:tmail_ui_user/features/labels/presentation/widgets/label_widget.
class EmailSubjectWidget extends StatelessWidget { class EmailSubjectWidget extends StatelessWidget {
final PresentationEmail presentationEmail; final PresentationEmail presentationEmail;
final bool isMobileResponsive; final bool isMobileResponsive;
final bool isWebDesktop;
final List<Label>? labels; final List<Label>? labels;
const EmailSubjectWidget({ const EmailSubjectWidget({
super.key, super.key,
required this.presentationEmail, required this.presentationEmail,
this.isMobileResponsive = false, this.isMobileResponsive = false,
this.isWebDesktop = false,
this.labels, this.labels,
}); });
bool get _hasLabels => labels?.isNotEmpty == true;
String get _title => presentationEmail.getEmailTitle(); String get _title => presentationEmail.getEmailTitle();
bool get _hasLabels => labels?.isNotEmpty == true;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final padding = isMobileResponsive final padding = isMobileResponsive
? EmailSubjectStyles.mobilePadding ? EmailSubjectStyles.mobilePadding
: EmailSubjectStyles.padding; : EmailSubjectStyles.padding;
if (_title.isEmpty) { if (_title.isEmpty && !_hasLabels) {
return _hasLabels && isWebDesktop return const SizedBox.shrink();
? Padding(
padding: padding,
child: _buildLabelsOnly(),
)
: const SizedBox.shrink();
}
if (_hasLabels && isWebDesktop) {
return Padding(
padding: padding,
child: _buildTitleWithLabels(),
);
} }
return Padding( return Padding(
padding: padding, padding: padding,
child: _buildTitle(), child: _buildContent(),
);
}
Widget _buildContent() {
final hasTitle = _title.isNotEmpty;
final hasLabels = _hasLabels;
if (hasTitle && !hasLabels) {
return _buildTitle();
}
if (!hasTitle && hasLabels) {
return _buildLabels();
}
return Wrap(
spacing: 10,
runSpacing: 10,
crossAxisAlignment: WrapCrossAlignment.center,
children: [
_buildTitle(),
..._buildLabelWidgets(),
],
); );
} }
@@ -58,24 +67,16 @@ class EmailSubjectWidget extends StatelessWidget {
); );
} }
Widget _buildLabelsOnly() { Widget _buildLabels() {
return Wrap( return Wrap(
spacing: 10, spacing: 10,
runSpacing: 10, runSpacing: 10,
crossAxisAlignment: WrapCrossAlignment.center, crossAxisAlignment: WrapCrossAlignment.center,
children: labels!.map(LabelWidget.create).toList(), children: _buildLabelWidgets(),
); );
} }
Widget _buildTitleWithLabels() { List<Widget> _buildLabelWidgets() {
return Wrap( return labels?.map(LabelWidget.create).toList() ?? const [];
spacing: 10,
runSpacing: 10,
crossAxisAlignment: WrapCrossAlignment.center,
children: [
_buildTitle(),
...labels!.map(LabelWidget.create),
],
);
} }
} }
@@ -43,7 +43,6 @@ class ThreadDetailCollapsedEmail extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final isMobileResponsive = responsiveUtils.isMobile(context); final isMobileResponsive = responsiveUtils.isMobile(context);
final isWebDesktop = responsiveUtils.isWebDesktop(context);
return DecoratedBox( return DecoratedBox(
decoration: const BoxDecoration( decoration: const BoxDecoration(
@@ -65,7 +64,6 @@ class ThreadDetailCollapsedEmail extends StatelessWidget {
EmailSubjectWidget( EmailSubjectWidget(
presentationEmail: presentationEmail, presentationEmail: presentationEmail,
isMobileResponsive: isMobileResponsive, isMobileResponsive: isMobileResponsive,
isWebDesktop: isWebDesktop,
labels: labels, labels: labels,
), ),
InformationSenderAndReceiverBuilder( InformationSenderAndReceiverBuilder(