TF-495 Implement linter for composer

This commit is contained in:
dab246
2022-04-22 09:51:36 +07:00
committed by Dat H. Pham
parent d8f236a89c
commit a305ba1826
15 changed files with 223 additions and 221 deletions
@@ -54,7 +54,7 @@ class AttachmentFileComposerBuilder {
color: Colors.white),
child: Stack(children: [
ListTile(
contentPadding: EdgeInsets.only(right: kIsWeb ? 16 : 18),
contentPadding: const EdgeInsets.only(right: kIsWeb ? 16 : 18),
onTap: () {},
leading: Transform(
transform: Matrix4.translationValues(8.0, kIsWeb ? -3.0 : -5.0, 0.0),
@@ -65,7 +65,7 @@ class AttachmentFileComposerBuilder {
attachment.name ?? '',
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 12, color: AppColor.colorNameEmail, fontWeight: FontWeight.w500),
style: const TextStyle(fontSize: 12, color: AppColor.colorNameEmail, fontWeight: FontWeight.w500),
)),
subtitle: attachment.size != null && attachment.size?.value != 0
? Transform(
@@ -74,7 +74,7 @@ class AttachmentFileComposerBuilder {
filesize(attachment.size?.value, 0),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 10, color: AppColor.colorContentEmail, fontWeight: FontWeight.normal)))
style: const TextStyle(fontSize: 10, color: AppColor.colorContentEmail, fontWeight: FontWeight.normal)))
: null,
),
Positioned(right: kIsWeb ? -5 : -12, top: kIsWeb ? -5 : -12, child: buildIconWeb(
@@ -30,7 +30,7 @@ class EmailAddressInputBuilder {
final TextEditingController? controller;
final bool? isInitial;
List<EmailAddress> _listEmailAddress = <EmailAddress>[];
List<EmailAddress> listEmailAddress = <EmailAddress>[];
OnUpdateListEmailAddressAction? _onUpdateListEmailAddressAction;
OnSuggestionEmailAddress? _onSuggestionEmailAddress;
@@ -72,7 +72,7 @@ class EmailAddressInputBuilder {
this._context,
this._imagePaths,
this._prefixEmailAddress,
this._listEmailAddress,
this.listEmailAddress,
this._listEmailAddressType,
{
this.isInitial,
@@ -85,7 +85,7 @@ class EmailAddressInputBuilder {
return Row(
children: [
Text('${_prefixEmailAddress.asName(_context)}:',
style: TextStyle(fontSize: 15, color: AppColor.colorHintEmailAddressInput)),
style: const TextStyle(fontSize: 15, color: AppColor.colorHintEmailAddressInput)),
Expanded(child: Padding(
padding: EdgeInsets.only(right: _listEmailAddressType.length == 2 ? 8 : 8),
child: _buildTagEditor())),
@@ -93,8 +93,8 @@ class EmailAddressInputBuilder {
Row(children: [
if (!_listEmailAddressType.contains(PrefixEmailAddress.cc))
buildTextIcon(AppLocalizations.of(_context).cc_email_address_prefix,
padding: EdgeInsets.all(5),
textStyle: TextStyle(
padding: const EdgeInsets.all(5),
textStyle: const TextStyle(
fontSize: 15,
fontWeight: FontWeight.normal,
decoration: TextDecoration.underline,
@@ -102,14 +102,14 @@ class EmailAddressInputBuilder {
onTap: () => _onAddEmailAddressTypeAction?.call(PrefixEmailAddress.cc)),
if (!_listEmailAddressType.contains(PrefixEmailAddress.bcc))
buildTextIcon(AppLocalizations.of(_context).bcc_email_address_prefix,
padding: EdgeInsets.all(5),
textStyle: TextStyle(
padding: const EdgeInsets.all(5),
textStyle: const TextStyle(
fontSize: 15,
fontWeight: FontWeight.normal,
decoration: TextDecoration.underline,
color: AppColor.lineItemListColor),
onTap: () => _onAddEmailAddressTypeAction?.call(PrefixEmailAddress.bcc)),
SizedBox(width: 10),
const SizedBox(width: 10),
]),
if (_prefixEmailAddress != PrefixEmailAddress.to)
buildIconWeb(
@@ -121,7 +121,7 @@ class EmailAddressInputBuilder {
Widget _buildTagEditor() {
return StatefulBuilder(builder: (BuildContext context, StateSetter setState) {
final newListEmailAddress = _isCollapse ? _listEmailAddress.sublist(0, 1) : _listEmailAddress;
final newListEmailAddress = _isCollapse ? listEmailAddress.sublist(0, 1) : listEmailAddress;
return FocusScope(child: Focus(
onFocusChange: (focus) => _onFocusEmailAddressChangeAction?.call(_prefixEmailAddress, focus),
child: TagEditor<EmailAddress>(
@@ -131,7 +131,7 @@ class EmailAddressInputBuilder {
textInputAction: TextInputAction.done,
hasAddButton: false,
tagSpacing: 8,
delimiters: [' '],
delimiters: const [' '],
autofocus: _prefixEmailAddress != PrefixEmailAddress.to,
minTextFieldWidth: 20,
resetTextOnSubmitted: true,
@@ -139,48 +139,48 @@ class EmailAddressInputBuilder {
suggestionsBoxBackgroundColor: Colors.white,
suggestionsBoxRadius: 20,
iconSuggestionBox: SvgPicture.asset(_imagePaths.icAddEmailAddress, fit: BoxFit.fill),
textStyle: TextStyle(color: AppColor.colorEmailAddress, fontSize: 14, fontWeight: FontWeight.w500),
textStyle: const TextStyle(color: AppColor.colorEmailAddress, fontSize: 14, fontWeight: FontWeight.w500),
onSubmitted: (value) {
setState(() => _listEmailAddress.add(EmailAddress(null, value)));
_onUpdateListEmailAddressAction?.call(_prefixEmailAddress, _listEmailAddress);
setState(() => listEmailAddress.add(EmailAddress(null, value)));
_onUpdateListEmailAddressAction?.call(_prefixEmailAddress, listEmailAddress);
},
inputDecoration: InputDecoration(border: InputBorder.none),
inputDecoration: const InputDecoration(border: InputBorder.none),
tagBuilder: (context, index) => Stack(alignment: Alignment.centerRight, children: [
Padding(
padding: EdgeInsets.only(top: kIsWeb ? 8 : 0, right: _isCollapse ? 50 : 0),
child: InkWell(
onTap: () => _isCollapse ? _onShowFullListEmailAddressAction?.call(_prefixEmailAddress) : null,
child: Chip(
labelPadding: EdgeInsets.only(left: 12, right: 12, bottom: 2),
labelPadding: const EdgeInsets.only(left: 12, right: 12, bottom: 2),
label: Text(newListEmailAddress[index].asString(), maxLines: 1, overflow: kIsWeb ? null : TextOverflow.ellipsis),
deleteIcon: SvgPicture.asset(_imagePaths.icClose, fit: BoxFit.fill),
labelStyle: TextStyle(color: Colors.black, fontSize: 17, fontWeight: FontWeight.normal),
backgroundColor: _isEmailAddressValid(_listEmailAddress[index].emailAddress) ? AppColor.colorEmailAddressTag : Colors.white,
labelStyle: const TextStyle(color: Colors.black, fontSize: 17, fontWeight: FontWeight.normal),
backgroundColor: _isEmailAddressValid(listEmailAddress[index].emailAddress) ? AppColor.colorEmailAddressTag : Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side: BorderSide(
width: _isEmailAddressValid(_listEmailAddress[index].emailAddress) ? 0 : 1,
color: _isEmailAddressValid(_listEmailAddress[index].emailAddress) ? AppColor.colorEmailAddressTag : AppColor.colorBorderEmailAddressInvalid),
width: _isEmailAddressValid(listEmailAddress[index].emailAddress) ? 0 : 1,
color: _isEmailAddressValid(listEmailAddress[index].emailAddress) ? AppColor.colorEmailAddressTag : AppColor.colorBorderEmailAddressInvalid),
),
avatar: newListEmailAddress[index].displayName.isNotEmpty
? CircleAvatar(
backgroundColor: AppColor.colorTextButton,
child: Text(
_listEmailAddress[index].displayName[0].toUpperCase(),
style: TextStyle(color: Colors.white, fontSize: 12, fontWeight: FontWeight.w500)))
listEmailAddress[index].displayName[0].toUpperCase(),
style: const TextStyle(color: Colors.white, fontSize: 12, fontWeight: FontWeight.w500)))
: null,
onDeleted: () {
setState(() => _listEmailAddress.removeAt(index));
_onUpdateListEmailAddressAction?.call(_prefixEmailAddress, _listEmailAddress);
setState(() => listEmailAddress.removeAt(index));
_onUpdateListEmailAddressAction?.call(_prefixEmailAddress, listEmailAddress);
},
)
)
),
if (_isCollapse) _buildCounter(context, _listEmailAddress.length - newListEmailAddress.length),
if (_isCollapse) _buildCounter(context, listEmailAddress.length - newListEmailAddress.length),
]),
onTagChanged: (String value) {
setState(() => _listEmailAddress.add(EmailAddress(null, value)));
_onUpdateListEmailAddressAction?.call(_prefixEmailAddress, _listEmailAddress);
setState(() => listEmailAddress.add(EmailAddress(null, value)));
_onUpdateListEmailAddressAction?.call(_prefixEmailAddress, listEmailAddress);
},
findSuggestions: (String query) {
if (query.trim().isNotEmpty && _onSuggestionEmailAddress != null) {
@@ -204,17 +204,17 @@ class EmailAddressInputBuilder {
Widget _buildCounter(BuildContext context, int count) {
return Padding(
padding: EdgeInsets.only(left: 8, top: kIsWeb ? 8 : 0),
padding: const EdgeInsets.only(left: 8, top: kIsWeb ? 8 : 0),
child: InkWell(
onTap: () => _onShowFullListEmailAddressAction?.call(_prefixEmailAddress),
child: Chip(
labelPadding: EdgeInsets.symmetric(horizontal: 8),
labelPadding: const EdgeInsets.symmetric(horizontal: 8),
label: Text('+$count', maxLines: 1, overflow: kIsWeb ? null : TextOverflow.ellipsis),
labelStyle: TextStyle(color: Colors.black, fontSize: 17, fontWeight: FontWeight.normal),
labelStyle: const TextStyle(color: Colors.black, fontSize: 17, fontWeight: FontWeight.normal),
backgroundColor: AppColor.colorEmailAddressTag,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side: BorderSide(width: 0, color: AppColor.colorEmailAddressTag),
side: const BorderSide(width: 0, color: AppColor.colorEmailAddressTag),
),
),
),
@@ -222,7 +222,7 @@ class EmailAddressInputBuilder {
}
bool get _isCollapse {
return _listEmailAddress.length > 1 && expandMode == ExpandMode.COLLAPSE;
return listEmailAddress.length > 1 && expandMode == ExpandMode.COLLAPSE;
}
Widget _buildSuggestionItem(StateSetter setState, BuildContext context, TagsEditorState<EmailAddress> tagEditorState, EmailAddress emailAddress) {
@@ -237,22 +237,22 @@ class EmailAddressInputBuilder {
border: Border.all(color: AppColor.colorShadowBgContentEmail, width: 1.0)),
child: Text(
emailAddress.asString().isNotEmpty ? emailAddress.asString()[0].toUpperCase() : '',
style: TextStyle(color: Colors.black, fontSize: 16, fontWeight: FontWeight.w600))),
style: const TextStyle(color: Colors.black, fontSize: 16, fontWeight: FontWeight.w600))),
title: Text(
emailAddress.asString(),
maxLines: 1,
overflow: kIsWeb ? null : TextOverflow.ellipsis,
style: TextStyle(color: Colors.black, fontSize: 16, fontWeight: FontWeight.normal)),
style: const TextStyle(color: Colors.black, fontSize: 16, fontWeight: FontWeight.normal)),
subtitle: emailAddress.displayName.isNotEmpty && emailAddress.emailAddress.isNotEmpty
? Text(
emailAddress.emailAddress,
maxLines: 1,
overflow: kIsWeb ? null : TextOverflow.ellipsis,
style: TextStyle(color: AppColor.colorHintSearchBar, fontSize: 13, fontWeight: FontWeight.normal))
style: const TextStyle(color: AppColor.colorHintSearchBar, fontSize: 13, fontWeight: FontWeight.normal))
: null,
onTap: () {
setState(() => _listEmailAddress.add(emailAddress));
_onUpdateListEmailAddressAction?.call(_prefixEmailAddress, _listEmailAddress);
setState(() => listEmailAddress.add(emailAddress));
_onUpdateListEmailAddressAction?.call(_prefixEmailAddress, listEmailAddress);
tagEditorState.selectSuggestion(emailAddress);
},
);
@@ -37,11 +37,11 @@ class TopBarComposerWidgetBuilder {
Widget build() {
return Container(
key: Key('top_bar_composer_widget'),
key: const Key('top_bar_composer_widget'),
alignment: Alignment.center,
padding: EdgeInsets.zero,
child: MediaQuery(
data: MediaQueryData(padding: EdgeInsets.zero),
data: const MediaQueryData(padding: EdgeInsets.zero),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.end,
@@ -83,7 +83,7 @@ class TopBarComposerWidgetBuilder {
}
},
child: Padding(
padding: EdgeInsets.only(right: kIsWeb ? 16 : 0),
padding: const EdgeInsets.only(right: kIsWeb ? 16 : 0),
child: SvgPicture.asset(_imagePaths.icShare, fit: BoxFit.fill),
),
onTapDown: (detail) {
@@ -102,7 +102,7 @@ class TopBarComposerWidgetBuilder {
),
),
IconButton(
key: Key('button_send_email'),
key: const Key('button_send_email'),
color: _isEnableEmailSendButton ? AppColor.enableSendEmailButtonColor : AppColor.disableSendEmailButtonColor,
icon: SvgPicture.asset(
_imagePaths.icComposerSend,
@@ -114,7 +114,7 @@ class TopBarComposerWidgetBuilder {
}
}
),
SizedBox(width: 8)
const SizedBox(width: 8)
]
);
}