TF-4124 fix: support localhost addresses in email validation

This commit is contained in:
dab246
2025-10-27 14:26:05 +07:00
committed by Dat H. Pham
parent 78b1e58519
commit 3a9b8d8205
4 changed files with 15 additions and 5 deletions
@@ -19,7 +19,7 @@ extension HandleRecipientsCollapsedExtensions on ComposerController {
bool get existEmailAddressInvalid => allListEmailAddress bool get existEmailAddressInvalid => allListEmailAddress
.any( .any(
(emailAddress) => !EmailUtils.isEmailAddressValid( (emailAddress) => !EmailUtils.isValidEmail(
emailAddress.emailAddress, emailAddress.emailAddress,
), ),
); );
@@ -51,7 +51,7 @@ class RecipientCollapsedItemWidget extends StatelessWidget {
} }
Color _getTagBackgroundColor() { Color _getTagBackgroundColor() {
if (EmailUtils.isEmailAddressValid(emailAddress.emailAddress)) { if (EmailUtils.isValidEmail(emailAddress.emailAddress)) {
return AppColor.grayBackgroundColor; return AppColor.grayBackgroundColor;
} else { } else {
return Colors.white; return Colors.white;
@@ -59,7 +59,7 @@ class RecipientCollapsedItemWidget extends StatelessWidget {
} }
Border _getTagBorder() { Border _getTagBorder() {
if (EmailUtils.isEmailAddressValid(emailAddress.emailAddress)) { if (EmailUtils.isValidEmail(emailAddress.emailAddress)) {
return Border.all( return Border.all(
width: 1, width: 1,
color: AppColor.grayBackgroundColor, color: AppColor.grayBackgroundColor,
@@ -170,7 +170,7 @@ class RecipientTagItemWidget extends StatelessWidget {
Color _getTagBackgroundColor() { Color _getTagBackgroundColor() {
if (isTagFocused) { if (isTagFocused) {
return AppColor.colorItemRecipientSelected; return AppColor.colorItemRecipientSelected;
} else if (EmailUtils.isEmailAddressValid(currentEmailAddress.emailAddress)) { } else if (EmailUtils.isValidEmail(currentEmailAddress.emailAddress)) {
return AppColor.grayBackgroundColor; return AppColor.grayBackgroundColor;
} else { } else {
return Colors.white; return Colors.white;
@@ -183,7 +183,7 @@ class RecipientTagItemWidget extends StatelessWidget {
width: 1, width: 1,
color: AppColor.primaryColor, color: AppColor.primaryColor,
); );
} else if (EmailUtils.isEmailAddressValid(currentEmailAddress.emailAddress)) { } else if (EmailUtils.isValidEmail(currentEmailAddress.emailAddress)) {
return Border.all( return Border.all(
width: 1, width: 1,
color: AppColor.grayBackgroundColor, color: AppColor.grayBackgroundColor,
@@ -20,6 +20,7 @@ import 'package:tmail_ui_user/features/email/presentation/model/email_unsubscrib
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart'; import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
import 'package:tmail_ui_user/main/error/capability_validator.dart'; import 'package:tmail_ui_user/main/error/capability_validator.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart'; import 'package:tmail_ui_user/main/routes/route_utils.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart';
class EmailUtils { class EmailUtils {
static const double desktopItemMaxWidth = 260; static const double desktopItemMaxWidth = 260;
@@ -110,6 +111,15 @@ class EmailUtils {
} }
} }
static bool isValidEmail(String address) {
try {
return isEmailAddressValid(address) ||
AppUtils.isEmailLocalhost(address);
} catch (_) {
return false;
}
}
static List<String> extractMailtoLinksFromListPost(String listPost) { static List<String> extractMailtoLinksFromListPost(String listPost) {
try { try {
if (listPost.trim().isEmpty) return []; if (listPost.trim().isEmpty) return [];