TF-4171 Display tag in mailbox list

This commit is contained in:
dab246
2025-11-25 14:02:50 +07:00
committed by Dat H. Pham
parent f4302e06e8
commit 31ed2feae4
19 changed files with 1865 additions and 38 deletions
@@ -0,0 +1,54 @@
import 'package:core/presentation/utils/theme_utils.dart';
import 'package:flutter/material.dart';
import 'package:labels/labels.dart';
import 'package:tmail_ui_user/features/labels/presentation/utils/label_utils.dart';
import 'package:tmail_ui_user/features/labels/presentation/widgets/label_widget.dart';
class LabelTagListWidget extends StatelessWidget {
final List<Label> tags;
final double horizontalPadding;
final double itemSpacing;
const LabelTagListWidget({
super.key,
required this.tags,
this.horizontalPadding = 4,
this.itemSpacing = 12,
});
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (_, constraints) {
final maxWidth = constraints.maxWidth;
final tagMaxWidth =
maxWidth - LabelUtils.defaultPlusMaxWidth - itemSpacing;
final displayedTagsDataResult = LabelUtils.safeComputeDisplayedTags(
tags: tags,
maxWidth: maxWidth,
textStyle: ThemeUtils.textStyleContentCaption(),
itemSpacing: itemSpacing,
horizontalPadding: horizontalPadding,
tagMaxWidth: tagMaxWidth,
plusMaxWidth: LabelUtils.defaultPlusMaxWidth,
);
return Wrap(
spacing: itemSpacing,
runSpacing: 6,
children: displayedTagsDataResult.displayed
.map(
(tagDisplayed) => LabelWidget(
label: tagDisplayed,
horizontalPadding: horizontalPadding,
maxWidth: tagMaxWidth,
),
)
.toList(),
);
},
);
}
}
@@ -0,0 +1,28 @@
import 'package:flutter/material.dart';
import 'package:labels/extensions/label_extension.dart';
import 'package:labels/model/label.dart';
import 'package:tmail_ui_user/features/base/widget/labels/tag_widget.dart';
class LabelWidget extends StatelessWidget {
final Label label;
final double horizontalPadding;
final double? maxWidth;
const LabelWidget({
super.key,
required this.label,
this.horizontalPadding = 4,
this.maxWidth,
});
@override
Widget build(BuildContext context) {
return TagWidget(
text: label.safeDisplayName,
backgroundColor: label.backgroundColor,
textColor: label.textColor,
horizontalPadding: horizontalPadding,
maxWidth: maxWidth,
);
}
}