diff --git a/assets/images/ic_attachment.svg b/assets/images/ic_attachment.svg new file mode 100644 index 000000000..c8b73212d --- /dev/null +++ b/assets/images/ic_attachment.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/ic_chevron.svg b/assets/images/ic_chevron.svg new file mode 100644 index 000000000..160b012ef --- /dev/null +++ b/assets/images/ic_chevron.svg @@ -0,0 +1,5 @@ + + + diff --git a/assets/images/ic_star.svg b/assets/images/ic_star.svg new file mode 100644 index 000000000..f4be89974 --- /dev/null +++ b/assets/images/ic_star.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/ic_unstar.svg b/assets/images/ic_unstar.svg new file mode 100644 index 000000000..1701a0df2 --- /dev/null +++ b/assets/images/ic_unstar.svg @@ -0,0 +1,3 @@ + + + diff --git a/core/lib/domain/extensions/datetime_extension.dart b/core/lib/domain/extensions/datetime_extension.dart index 9b7d39026..b95223db1 100644 --- a/core/lib/domain/extensions/datetime_extension.dart +++ b/core/lib/domain/extensions/datetime_extension.dart @@ -28,7 +28,7 @@ extension DateTimeNullableExtension on DateTime? { String toPattern() { if (this != null) { if (this!.isToday()) { - return 'h:mm a'; + return 'H:mm'; } else if (this!.isYesterday()) { return 'EEE'; } else if (this!.isThisYear()) { diff --git a/core/lib/presentation/extensions/color_extension.dart b/core/lib/presentation/extensions/color_extension.dart index ed5810f62..477159bb1 100644 --- a/core/lib/presentation/extensions/color_extension.dart +++ b/core/lib/presentation/extensions/color_extension.dart @@ -67,7 +67,7 @@ extension AppColor on Color { static const mapGradientColor = [ [Color(0xFF21D4FD), Color(0xFFB721FF)], - [Color(0xFF43E97B), Color(0xFF38F9D7)], + [Color(0xFF38F9D7), Color(0xFF43E97B)], [Color(0xFF11E6F0), Color(0xFF4FACFE)], [Color(0xFFE88395), Color(0xFFEF9C8F)], [Color(0xFF8DDAD5), Color(0xFF00CDAC)], diff --git a/core/lib/presentation/resources/image_paths.dart b/core/lib/presentation/resources/image_paths.dart index ca91ff1c7..c65180df2 100644 --- a/core/lib/presentation/resources/image_paths.dart +++ b/core/lib/presentation/resources/image_paths.dart @@ -43,6 +43,10 @@ class ImagePaths { String get icPhotoLibrary => _getImagePath('ic_photo_library.svg'); String get icEmptyImageDefault => _getImagePath('empty_image_default.svg'); String get icUnread => _getImagePath('ic_unread.svg'); + String get icStar => _getImagePath('ic_star.svg'); + String get icUnStar => _getImagePath('ic_unstar.svg'); + String get icAttachment => _getImagePath('ic_attachment.svg'); + String get icChevron => _getImagePath('ic_chevron.svg'); String _getImagePath(String imageName) { return AssetsPaths.images + imageName; diff --git a/core/lib/presentation/views/image/avatar_builder.dart b/core/lib/presentation/views/image/avatar_builder.dart index 35cb7fd6e..82fd273bc 100644 --- a/core/lib/presentation/views/image/avatar_builder.dart +++ b/core/lib/presentation/views/image/avatar_builder.dart @@ -71,6 +71,7 @@ class AvatarBuilder { ? LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, + tileMode: TileMode.decal, colors: _avatarColors ?? []) : null, color: _bgColor ?? AppColor.avatarColor), diff --git a/lib/features/thread/presentation/widgets/email_tile_builder.dart b/lib/features/thread/presentation/widgets/email_tile_builder.dart index 28044b7d3..4a5d0420b 100644 --- a/lib/features/thread/presentation/widgets/email_tile_builder.dart +++ b/lib/features/thread/presentation/widgets/email_tile_builder.dart @@ -88,12 +88,10 @@ class EmailTileBuilder { title: Transform( transform: Matrix4.translationValues(-8.0, 0.0, 0.0), child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, children: [ if (_presentationEmail.isUnReadEmail()) Padding( - padding: EdgeInsets.only(top: 6, right: 5), + padding: EdgeInsets.only(right: 5), child: SvgPicture.asset(_imagePaths.icUnread, width: 9, height: 9, fit: BoxFit.fill)), Expanded( child: _searchStatus == SearchStatus.ACTIVE && _searchQuery != null && _searchQuery!.value.isNotEmpty @@ -108,13 +106,24 @@ class EmailTileBuilder { overflow:TextOverflow.ellipsis, style: TextStyle(fontSize: 15, color: AppColor.colorNameEmail, fontWeight: FontWeight.w600)) ), + if (_presentationEmail.hasAttachment == true) + Padding( + padding: EdgeInsets.only(left: 8), + child: (ButtonBuilder(_imagePaths.icAttachment) + ..padding(0) + ..size(16)) + .build()), Padding( - padding: EdgeInsets.only(right: 4), + padding: EdgeInsets.only(right: 4, left: 8), child: Text( '${_presentationEmail.getReceivedAt(Localizations.localeOf(_context).toLanguageTag())}', maxLines: 1, overflow:TextOverflow.ellipsis, - style: TextStyle(fontSize: 13, color: AppColor.colorContentEmail))) + style: TextStyle(fontSize: 13, color: AppColor.colorContentEmail))), + (ButtonBuilder(_imagePaths.icChevron) + ..padding(0) + ..size(16)) + .build(), ], ) ), @@ -123,28 +132,24 @@ class EmailTileBuilder { child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, + mainAxisSize: MainAxisSize.min, children: [ Padding( padding: EdgeInsets.zero, child: Row( + mainAxisSize: MainAxisSize.min, children: [ - Expanded( - child: _searchStatus == SearchStatus.ACTIVE && _searchQuery != null && _searchQuery!.value.isNotEmpty - ? RichTextBuilder( - '${_presentationEmail.getEmailTitle()}', - '${_searchQuery!.value}', - TextStyle( - fontSize: 13, - color: _presentationEmail.isUnReadEmail() ? AppColor.subjectEmailTextColorUnRead : AppColor.colorNameEmail), - TextStyle( - fontSize: 13, - backgroundColor: AppColor.bgWordSearch, - color: _presentationEmail.isUnReadEmail() ? AppColor.subjectEmailTextColorUnRead : AppColor.colorNameEmail)).build() - : Text( - '${_presentationEmail.getEmailTitle()}', - maxLines: 1, - overflow:TextOverflow.ellipsis, - style: TextStyle(fontSize: 13, color: AppColor.colorNameEmail)) + Expanded(child: _searchStatus == SearchStatus.ACTIVE && _searchQuery != null && _searchQuery!.value.isNotEmpty + ? RichTextBuilder( + '${_presentationEmail.getEmailTitle()}', + '${_searchQuery!.value}', + TextStyle(fontSize: 13, color: AppColor.colorNameEmail), + TextStyle(fontSize: 13, backgroundColor: AppColor.bgWordSearch, color: AppColor.colorNameEmail)).build() + : Text( + '${_presentationEmail.getEmailTitle()}', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle(fontSize: 13, color: AppColor.colorNameEmail)) ), if (_searchStatus == SearchStatus.ACTIVE && _presentationEmail.mailboxName.isNotEmpty) Container( @@ -160,48 +165,36 @@ class EmailTileBuilder { overflow: TextOverflow.ellipsis, style: TextStyle(fontSize: 10, color: AppColor.mailboxTextColor, fontWeight: FontWeight.bold), ) - ) + ), + if (_presentationEmail.isFlaggedEmail() ) + (ButtonBuilder(_imagePaths.icStar) + ..padding(0) + ..size(15)) + .build(), ], )), - Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Expanded( - child: _searchStatus == SearchStatus.ACTIVE && _searchQuery != null && _searchQuery!.value.isNotEmpty - ? RichTextBuilder( - '${_presentationEmail.getPartialContent()}', - '${_searchQuery!.value}', - TextStyle(fontSize: 13, color: AppColor.colorContentEmail), - TextStyle(fontSize: 13, color: AppColor.colorContentEmail, backgroundColor: AppColor.bgWordSearch)).build() - : Text( - '${_presentationEmail.getPartialContent()}', - maxLines: 1, - overflow:TextOverflow.ellipsis, - style: TextStyle(fontSize: 13, color: AppColor.colorContentEmail)) + Padding( + padding: EdgeInsets.only(top: 8), + child: Row(children: [ + Expanded(child: _searchStatus == SearchStatus.ACTIVE && _searchQuery != null && _searchQuery!.value.isNotEmpty + ? RichTextBuilder( + '${_presentationEmail.getPartialContent()}', + '${_searchQuery!.value}', + TextStyle(fontSize: 13, color: AppColor.colorContentEmail), + TextStyle(fontSize: 13, color: AppColor.colorContentEmail, backgroundColor: AppColor.bgWordSearch)).build() + : Text( + '${_presentationEmail.getPartialContent()}', + maxLines: 1, + overflow:TextOverflow.ellipsis, + style: TextStyle(fontSize: 13, color: AppColor.colorContentEmail)) ), - if (_presentationEmail.hasAttachment == true) - (ButtonBuilder(_imagePaths.icShare) - ..padding(5) - ..size(20)) - .build(), - (ButtonBuilder(_presentationEmail.isFlaggedEmail() ? _imagePaths.icFlagged : _imagePaths.icFlag) - ..padding(5) - ..size(20) - ..onPressActionClick(() { - if (_onMarkAsStarEmailActionClick != null) { - _onMarkAsStarEmailActionClick!(_presentationEmail); - } - })) - .build(), - ], - ) + ])) ], ) ), ), Padding( - padding: EdgeInsets.only(top: 8, right: 12), + padding: EdgeInsets.only(top: 12, right: 12), child: Divider(color: AppColor.lineItemListColor, height: 1, thickness: 0.2)), ]), )