1+ import 'package:core/presentation/extensions/color_extension.dart' ;
2+ import 'package:core/presentation/resources/image_paths.dart' ;
3+ import 'package:core/presentation/utils/responsive_utils.dart' ;
4+ import 'package:core/presentation/utils/style_utils.dart' ;
5+ import 'package:core/utils/build_utils.dart' ;
6+ import 'package:flutter/material.dart' ;
7+ import 'package:flutter_svg/flutter_svg.dart' ;
8+ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart' ;
9+ import 'package:model/mailbox/presentation_mailbox.dart' ;
10+ import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart' ;
11+ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart' ;
12+ import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart' ;
13+ import 'package:tmail_ui_user/features/search/mailbox/presentation/utils/search_mailbox_utils.dart' ;
14+
15+ class DestinationPickerSearchMailboxItemBuilder extends StatelessWidget {
16+
17+ final PresentationMailbox _presentationMailbox;
18+ final ImagePaths _imagePaths;
19+ final ResponsiveUtils _responsiveUtils;
20+ final MailboxActions ? mailboxActions;
21+ final MailboxId ? mailboxIdAlreadySelected;
22+ final OnClickOpenMailboxAction ? onClickOpenMailboxAction;
23+
24+ const DestinationPickerSearchMailboxItemBuilder (
25+ this ._imagePaths,
26+ this ._responsiveUtils,
27+ this ._presentationMailbox,
28+ {
29+ Key ? key,
30+ this .mailboxActions,
31+ this .mailboxIdAlreadySelected,
32+ this .onClickOpenMailboxAction
33+ }
34+ ) : super (key: key);
35+
36+ @override
37+ Widget build (BuildContext context) {
38+ return AbsorbPointer (
39+ absorbing: ! _presentationMailbox.isActivated,
40+ child: Opacity (
41+ opacity: _presentationMailbox.isActivated ? 1.0 : 0.3 ,
42+ child: Material (
43+ color: Colors .transparent,
44+ child: InkWell (
45+ onTap: _onTapMailboxAction,
46+ borderRadius: const BorderRadius .all (Radius .circular (8 )),
47+ hoverColor: AppColor .colorBgMailboxSelected,
48+ child: Padding (
49+ padding: SearchMailboxUtils .getPaddingItemListView (context, _responsiveUtils),
50+ child: Row (
51+ crossAxisAlignment: _presentationMailbox.mailboxPath? .isNotEmpty == true
52+ || _presentationMailbox.isTeamMailboxes
53+ ? CrossAxisAlignment .start
54+ : CrossAxisAlignment .center,
55+ children: [
56+ _buildMailboxIcon (),
57+ Expanded (child: Padding (
58+ padding: const EdgeInsets .symmetric (horizontal: 8 ),
59+ child: Column (
60+ crossAxisAlignment: CrossAxisAlignment .start,
61+ children: [
62+ _buildTitleItem (),
63+ _buildSubtitleItem ()
64+ ]
65+ )
66+ )),
67+ _buildSelectedIcon ()
68+ ]
69+ ),
70+ )
71+ ),
72+ )
73+ ),
74+ );
75+ }
76+
77+ void _onTapMailboxAction () {
78+ if (onClickOpenMailboxAction != null ) {
79+ onClickOpenMailboxAction? .call (_presentationMailbox);
80+ }
81+ }
82+
83+ Widget _buildMailboxIcon () {
84+ return SvgPicture .asset (
85+ _presentationMailbox.getMailboxIcon (_imagePaths),
86+ width: BuildUtils .isWeb ? 20 : 24 ,
87+ height: BuildUtils .isWeb ? 20 : 24 ,
88+ fit: BoxFit .fill
89+ );
90+ }
91+
92+ Widget _buildTitleItem () {
93+ return Text (
94+ _presentationMailbox.name? .name ?? '' ,
95+ maxLines: 1 ,
96+ overflow: CommonTextStyle .defaultTextOverFlow,
97+ softWrap: CommonTextStyle .defaultSoftWrap,
98+ style: const TextStyle (
99+ fontSize: 15 ,
100+ color: Colors .black
101+ ),
102+ );
103+ }
104+
105+ Widget _buildSubtitleItem () {
106+ if (_presentationMailbox.mailboxPath? .isNotEmpty == true ) {
107+ return Text (
108+ _presentationMailbox.mailboxPath ?? '' ,
109+ maxLines: 1 ,
110+ overflow: CommonTextStyle .defaultTextOverFlow,
111+ softWrap: CommonTextStyle .defaultSoftWrap,
112+ style: const TextStyle (
113+ fontSize: 11 ,
114+ color: AppColor .colorMailboxPath,
115+ fontWeight: FontWeight .normal
116+ ),
117+ );
118+ } else if (_presentationMailbox.isTeamMailboxes) {
119+ return Text (
120+ _presentationMailbox.emailTeamMailBoxes ?? '' ,
121+ maxLines: 1 ,
122+ softWrap: CommonTextStyle .defaultSoftWrap,
123+ overflow: CommonTextStyle .defaultTextOverFlow,
124+ style: const TextStyle (
125+ fontSize: 11 ,
126+ color: AppColor .colorEmailAddressFull,
127+ fontWeight: FontWeight .normal
128+ )
129+ );
130+ } else {
131+ return const SizedBox .shrink ();
132+ }
133+ }
134+
135+ Widget _buildSelectedIcon () {
136+ if (_presentationMailbox.id == mailboxIdAlreadySelected &&
137+ (mailboxActions == MailboxActions .select ||
138+ mailboxActions == MailboxActions .create)) {
139+ return Padding (
140+ padding: const EdgeInsets .only (right: 8 ),
141+ child: SvgPicture .asset (
142+ _imagePaths.icFilterSelected,
143+ width: 20 ,
144+ height: 20 ,
145+ fit: BoxFit .fill
146+ ),
147+ );
148+ } else {
149+ return const SizedBox .shrink ();
150+ }
151+ }
152+ }
0 commit comments