TF-1155 Handle moving focus between fields using the tab key in advanced search

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 7044a1ca5477390af9d1d7a9003e0d8aae7c632f)
This commit is contained in:
dab246
2023-11-08 12:22:10 +07:00
committed by Dat Vu
parent e41aa811ff
commit bfb35a7187
6 changed files with 82 additions and 123 deletions
@@ -118,7 +118,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.toAddressExpandMode.value, expandMode: controller.toAddressExpandMode.value,
controller: controller.toEmailAddressController, controller: controller.toEmailAddressController,
focusNode: controller.toAddressFocusNode, focusNode: controller.toAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyToEmailTagEditor, keyTagEditor: controller.keyToEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
padding: ComposerStyle.mobileRecipientPadding, padding: ComposerStyle.mobileRecipientPadding,
@@ -139,7 +138,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.ccAddressExpandMode.value, expandMode: controller.ccAddressExpandMode.value,
controller: controller.ccEmailAddressController, controller: controller.ccEmailAddressController,
focusNode: controller.ccAddressFocusNode, focusNode: controller.ccAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyCcEmailTagEditor, keyTagEditor: controller.keyCcEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
nextFocusNode: controller.getNextFocusOfCcEmailAddress(), nextFocusNode: controller.getNextFocusOfCcEmailAddress(),
@@ -160,7 +158,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.bccAddressExpandMode.value, expandMode: controller.bccAddressExpandMode.value,
controller: controller.bccEmailAddressController, controller: controller.bccEmailAddressController,
focusNode: controller.bccAddressFocusNode, focusNode: controller.bccAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyBccEmailTagEditor, keyTagEditor: controller.keyBccEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
nextFocusNode: controller.subjectEmailInputFocusNode, nextFocusNode: controller.subjectEmailInputFocusNode,
@@ -269,7 +266,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.toAddressExpandMode.value, expandMode: controller.toAddressExpandMode.value,
controller: controller.toEmailAddressController, controller: controller.toEmailAddressController,
focusNode: controller.toAddressFocusNode, focusNode: controller.toAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyToEmailTagEditor, keyTagEditor: controller.keyToEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
padding: ComposerStyle.mobileRecipientPadding, padding: ComposerStyle.mobileRecipientPadding,
@@ -290,7 +286,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.ccAddressExpandMode.value, expandMode: controller.ccAddressExpandMode.value,
controller: controller.ccEmailAddressController, controller: controller.ccEmailAddressController,
focusNode: controller.ccAddressFocusNode, focusNode: controller.ccAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyCcEmailTagEditor, keyTagEditor: controller.keyCcEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
nextFocusNode: controller.getNextFocusOfCcEmailAddress(), nextFocusNode: controller.getNextFocusOfCcEmailAddress(),
@@ -311,7 +306,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.bccAddressExpandMode.value, expandMode: controller.bccAddressExpandMode.value,
controller: controller.bccEmailAddressController, controller: controller.bccEmailAddressController,
focusNode: controller.bccAddressFocusNode, focusNode: controller.bccAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyBccEmailTagEditor, keyTagEditor: controller.keyBccEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
nextFocusNode: controller.subjectEmailInputFocusNode, nextFocusNode: controller.subjectEmailInputFocusNode,
@@ -95,7 +95,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.toAddressExpandMode.value, expandMode: controller.toAddressExpandMode.value,
controller: controller.toEmailAddressController, controller: controller.toEmailAddressController,
focusNode: controller.toAddressFocusNode, focusNode: controller.toAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyToEmailTagEditor, keyTagEditor: controller.keyToEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
padding: ComposerStyle.mobileRecipientPadding, padding: ComposerStyle.mobileRecipientPadding,
@@ -116,7 +115,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.ccAddressExpandMode.value, expandMode: controller.ccAddressExpandMode.value,
controller: controller.ccEmailAddressController, controller: controller.ccEmailAddressController,
focusNode: controller.ccAddressFocusNode, focusNode: controller.ccAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyCcEmailTagEditor, keyTagEditor: controller.keyCcEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
nextFocusNode: controller.getNextFocusOfCcEmailAddress(), nextFocusNode: controller.getNextFocusOfCcEmailAddress(),
@@ -137,7 +135,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.bccAddressExpandMode.value, expandMode: controller.bccAddressExpandMode.value,
controller: controller.bccEmailAddressController, controller: controller.bccEmailAddressController,
focusNode: controller.bccAddressFocusNode, focusNode: controller.bccAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyBccEmailTagEditor, keyTagEditor: controller.keyBccEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
nextFocusNode: controller.subjectEmailInputFocusNode, nextFocusNode: controller.subjectEmailInputFocusNode,
@@ -276,7 +273,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.toAddressExpandMode.value, expandMode: controller.toAddressExpandMode.value,
controller: controller.toEmailAddressController, controller: controller.toEmailAddressController,
focusNode: controller.toAddressFocusNode, focusNode: controller.toAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyToEmailTagEditor, keyTagEditor: controller.keyToEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
padding: ComposerStyle.desktopRecipientPadding, padding: ComposerStyle.desktopRecipientPadding,
@@ -297,7 +293,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.ccAddressExpandMode.value, expandMode: controller.ccAddressExpandMode.value,
controller: controller.ccEmailAddressController, controller: controller.ccEmailAddressController,
focusNode: controller.ccAddressFocusNode, focusNode: controller.ccAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyCcEmailTagEditor, keyTagEditor: controller.keyCcEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
nextFocusNode: controller.getNextFocusOfCcEmailAddress(), nextFocusNode: controller.getNextFocusOfCcEmailAddress(),
@@ -318,7 +313,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.bccAddressExpandMode.value, expandMode: controller.bccAddressExpandMode.value,
controller: controller.bccEmailAddressController, controller: controller.bccEmailAddressController,
focusNode: controller.bccAddressFocusNode, focusNode: controller.bccAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyBccEmailTagEditor, keyTagEditor: controller.keyBccEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
nextFocusNode: controller.subjectEmailInputFocusNode, nextFocusNode: controller.subjectEmailInputFocusNode,
@@ -509,7 +503,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.toAddressExpandMode.value, expandMode: controller.toAddressExpandMode.value,
controller: controller.toEmailAddressController, controller: controller.toEmailAddressController,
focusNode: controller.toAddressFocusNode, focusNode: controller.toAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyToEmailTagEditor, keyTagEditor: controller.keyToEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
padding: ComposerStyle.tabletRecipientPadding, padding: ComposerStyle.tabletRecipientPadding,
@@ -530,7 +523,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.ccAddressExpandMode.value, expandMode: controller.ccAddressExpandMode.value,
controller: controller.ccEmailAddressController, controller: controller.ccEmailAddressController,
focusNode: controller.ccAddressFocusNode, focusNode: controller.ccAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyCcEmailTagEditor, keyTagEditor: controller.keyCcEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
nextFocusNode: controller.getNextFocusOfCcEmailAddress(), nextFocusNode: controller.getNextFocusOfCcEmailAddress(),
@@ -551,7 +543,6 @@ class ComposerView extends GetWidget<ComposerController> {
expandMode: controller.bccAddressExpandMode.value, expandMode: controller.bccAddressExpandMode.value,
controller: controller.bccEmailAddressController, controller: controller.bccEmailAddressController,
focusNode: controller.bccAddressFocusNode, focusNode: controller.bccAddressFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyBccEmailTagEditor, keyTagEditor: controller.keyBccEmailTagEditor,
isInitial: controller.isInitialRecipient.value, isInitial: controller.isInitialRecipient.value,
nextFocusNode: controller.subjectEmailInputFocusNode, nextFocusNode: controller.subjectEmailInputFocusNode,
@@ -45,7 +45,6 @@ class RecipientComposerWidget extends StatefulWidget {
final PrefixRecipientState bccState; final PrefixRecipientState bccState;
final bool? isInitial; final bool? isInitial;
final FocusNode? focusNode; final FocusNode? focusNode;
final bool autoDisposeFocusNode;
final GlobalKey? keyTagEditor; final GlobalKey? keyTagEditor;
final FocusNode? nextFocusNode; final FocusNode? nextFocusNode;
final TextEditingController? controller; final TextEditingController? controller;
@@ -71,7 +70,6 @@ class RecipientComposerWidget extends StatefulWidget {
this.isInitial, this.isInitial,
this.controller, this.controller,
this.focusNode, this.focusNode,
this.autoDisposeFocusNode = true,
this.expandMode = ExpandMode.EXPAND, this.expandMode = ExpandMode.EXPAND,
this.keyTagEditor, this.keyTagEditor,
this.nextFocusNode, this.nextFocusNode,
@@ -165,7 +163,6 @@ class _RecipientComposerWidgetState extends State<RecipientComposerWidget> {
enableBorder: _isDragging, enableBorder: _isDragging,
borderRadius: RecipientComposerWidgetStyle.enableBorderRadius, borderRadius: RecipientComposerWidgetStyle.enableBorderRadius,
enableBorderColor: RecipientComposerWidgetStyle.enableBorderColor, enableBorderColor: RecipientComposerWidgetStyle.enableBorderColor,
autoDisposeFocusNode: widget.autoDisposeFocusNode,
keyboardType: TextInputType.emailAddress, keyboardType: TextInputType.emailAddress,
textInputAction: TextInputAction.done, textInputAction: TextInputAction.done,
debounceDuration: RecipientComposerWidgetStyle.suggestionDebounceDuration, debounceDuration: RecipientComposerWidgetStyle.suggestionDebounceDuration,
@@ -240,7 +237,6 @@ class _RecipientComposerWidgetState extends State<RecipientComposerWidget> {
length: _collapsedListEmailAddress.length, length: _collapsedListEmailAddress.length,
controller: widget.controller, controller: widget.controller,
focusNode: widget.focusNode, focusNode: widget.focusNode,
autoDisposeFocusNode: widget.autoDisposeFocusNode,
keyboardType: TextInputType.emailAddress, keyboardType: TextInputType.emailAddress,
textInputAction: TextInputAction.done, textInputAction: TextInputAction.done,
debounceDuration: RecipientComposerWidgetStyle.suggestionDebounceDuration, debounceDuration: RecipientComposerWidgetStyle.suggestionDebounceDuration,
@@ -36,13 +36,10 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
controller: controller.fromEmailAddressController, controller: controller.fromEmailAddressController,
focusNode: controller.focusManager.fromFieldFocusNode, focusNode: controller.focusManager.fromFieldFocusNode,
nextFocusNode: controller.focusManager.toFieldFocusNode, nextFocusNode: controller.focusManager.toFieldFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyFromEmailTagEditor, keyTagEditor: controller.keyFromEmailTagEditor,
onFocusEmailAddressChangeAction: controller.onEmailAddressFocusChange,
onShowFullListEmailAddressAction: controller.showFullEmailAddress, onShowFullListEmailAddressAction: controller.showFullEmailAddress,
onUpdateListEmailAddressAction: controller.updateListEmailAddress, onUpdateListEmailAddressAction: controller.updateListEmailAddress,
onSuggestionEmailAddress: controller.getAutoCompleteSuggestion, onSuggestionEmailAddress: controller.getAutoCompleteSuggestion,
onFocusNextAddressAction: controller.handleFocusNextAddressAction,
onRemoveEmailAddressAction: controller.removeEmailAddress, onRemoveEmailAddressAction: controller.removeEmailAddress,
), ),
TextFieldAutocompleteEmailAddressWeb( TextFieldAutocompleteEmailAddressWeb(
@@ -52,13 +49,10 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
controller: controller.toEmailAddressController, controller: controller.toEmailAddressController,
focusNode: controller.focusManager.toFieldFocusNode, focusNode: controller.focusManager.toFieldFocusNode,
nextFocusNode: controller.focusManager.subjectFieldFocusNode, nextFocusNode: controller.focusManager.subjectFieldFocusNode,
autoDisposeFocusNode: false,
keyTagEditor: controller.keyToEmailTagEditor, keyTagEditor: controller.keyToEmailTagEditor,
onFocusEmailAddressChangeAction: controller.onEmailAddressFocusChange,
onShowFullListEmailAddressAction: controller.showFullEmailAddress, onShowFullListEmailAddressAction: controller.showFullEmailAddress,
onUpdateListEmailAddressAction: controller.updateListEmailAddress, onUpdateListEmailAddressAction: controller.updateListEmailAddress,
onSuggestionEmailAddress: controller.getAutoCompleteSuggestion, onSuggestionEmailAddress: controller.getAutoCompleteSuggestion,
onFocusNextAddressAction: controller.handleFocusNextAddressAction,
onRemoveEmailAddressAction: controller.removeEmailAddress, onRemoveEmailAddressAction: controller.removeEmailAddress,
), ),
_buildFilterField( _buildFilterField(
@@ -21,7 +21,6 @@ typedef OnSuggestionEmailAddress = Future<List<EmailAddress>> Function(String wo
typedef OnUpdateListEmailAddressAction = void Function(AdvancedSearchFilterField field, List<EmailAddress> newData); typedef OnUpdateListEmailAddressAction = void Function(AdvancedSearchFilterField field, List<EmailAddress> newData);
typedef OnDeleteEmailAddressTypeAction = void Function(AdvancedSearchFilterField field); typedef OnDeleteEmailAddressTypeAction = void Function(AdvancedSearchFilterField field);
typedef OnShowFullListEmailAddressAction = void Function(AdvancedSearchFilterField field); typedef OnShowFullListEmailAddressAction = void Function(AdvancedSearchFilterField field);
typedef OnFocusEmailAddressChangeAction = void Function(AdvancedSearchFilterField field, bool isFocus);
typedef OnRemoveEmailAddressAction = void Function(EmailAddress emailAddress, AdvancedSearchFilterField field); typedef OnRemoveEmailAddressAction = void Function(EmailAddress emailAddress, AdvancedSearchFilterField field);
typedef OnDeleteTagAction = void Function(EmailAddress emailAddress); typedef OnDeleteTagAction = void Function(EmailAddress emailAddress);
@@ -31,7 +30,6 @@ class TextFieldAutocompleteEmailAddressWeb extends StatefulWidget {
final List<EmailAddress> listEmailAddress; final List<EmailAddress> listEmailAddress;
final ExpandMode expandMode; final ExpandMode expandMode;
final FocusNode? focusNode; final FocusNode? focusNode;
final bool autoDisposeFocusNode;
final GlobalKey? keyTagEditor; final GlobalKey? keyTagEditor;
final FocusNode? nextFocusNode; final FocusNode? nextFocusNode;
final EdgeInsetsGeometry? padding; final EdgeInsetsGeometry? padding;
@@ -41,11 +39,8 @@ class TextFieldAutocompleteEmailAddressWeb extends StatefulWidget {
final OnUpdateListEmailAddressAction? onUpdateListEmailAddressAction; final OnUpdateListEmailAddressAction? onUpdateListEmailAddressAction;
final OnDeleteEmailAddressTypeAction? onDeleteEmailAddressTypeAction; final OnDeleteEmailAddressTypeAction? onDeleteEmailAddressTypeAction;
final OnShowFullListEmailAddressAction? onShowFullListEmailAddressAction; final OnShowFullListEmailAddressAction? onShowFullListEmailAddressAction;
final OnFocusEmailAddressChangeAction? onFocusEmailAddressChangeAction;
final OnRemoveEmailAddressAction? onRemoveEmailAddressAction; final OnRemoveEmailAddressAction? onRemoveEmailAddressAction;
final VoidCallback? onFocusNextAddressAction;
final TextEditingController? controller; final TextEditingController? controller;
final TapRegionCallback? onTapOutside;
const TextFieldAutocompleteEmailAddressWeb({ const TextFieldAutocompleteEmailAddressWeb({
Key? key, Key? key,
@@ -53,7 +48,6 @@ class TextFieldAutocompleteEmailAddressWeb extends StatefulWidget {
required this.listEmailAddress, required this.listEmailAddress,
this.expandMode = ExpandMode.EXPAND, this.expandMode = ExpandMode.EXPAND,
this.focusNode, this.focusNode,
this.autoDisposeFocusNode = true,
this.keyTagEditor, this.keyTagEditor,
this.nextFocusNode, this.nextFocusNode,
this.padding, this.padding,
@@ -63,11 +57,8 @@ class TextFieldAutocompleteEmailAddressWeb extends StatefulWidget {
this.onUpdateListEmailAddressAction, this.onUpdateListEmailAddressAction,
this.onDeleteEmailAddressTypeAction, this.onDeleteEmailAddressTypeAction,
this.onShowFullListEmailAddressAction, this.onShowFullListEmailAddressAction,
this.onFocusEmailAddressChangeAction,
this.onRemoveEmailAddressAction, this.onRemoveEmailAddressAction,
this.onFocusNextAddressAction,
this.controller, this.controller,
this.onTapOutside,
}) : super(key: key); }) : super(key: key);
@override @override
@@ -111,96 +102,89 @@ class _TextFieldAutocompleteEmailAddressWebState extends State<TextFieldAutocomp
), ),
const SizedBox(width: TextFieldAutoCompleteEmailAddressWebStyles.space), const SizedBox(width: TextFieldAutoCompleteEmailAddressWebStyles.space),
Expanded( Expanded(
child: FocusScope( child: StatefulBuilder(
child: Focus( builder: ((context, setState) {
onFocusChange: (focus) { return TagEditor<SuggestionEmailAddress>(
widget.onFocusEmailAddressChangeAction?.call(widget.field, focus); key: widget.keyTagEditor,
}, length: _collapsedListEmailAddress.length,
onKey: (focusNode, event) { controller: widget.controller,
if (event.logicalKey == LogicalKeyboardKey.tab) { focusNodeKeyboard: widget.focusNode,
widget.nextFocusNode?.requestFocus(); keyboardType: TextInputType.emailAddress,
widget.onFocusNextAddressAction?.call(); textInputAction: TextInputAction.done,
return KeyEventResult.handled; debounceDuration: TextFieldAutoCompleteEmailAddressWebStyles.debounceDuration,
} hasAddButton: false,
return KeyEventResult.ignored; autofocus: widget.field == AdvancedSearchFilterField.form && _currentListEmailAddress.isEmpty,
}, inputDecoration: InputDecoration(
child: StatefulBuilder( filled: true,
builder: ((context, setState) { fillColor: TextFieldAutoCompleteEmailAddressWebStyles.textInputFillColor,
return TagEditor<SuggestionEmailAddress>( border: TextFieldAutoCompleteEmailAddressWebStyles.textInputBorder,
key: widget.keyTagEditor, hintText: widget.field.getHintText(context),
length: _collapsedListEmailAddress.length, hintStyle: TextFieldAutoCompleteEmailAddressWebStyles.textInputHintStyle,
controller: widget.controller, isDense: true,
focusNode: widget.focusNode, contentPadding: TextFieldAutoCompleteEmailAddressWebStyles.textInputContentPadding,
autoDisposeFocusNode: widget.autoDisposeFocusNode, ),
keyboardType: TextInputType.emailAddress, padding: TextFieldAutoCompleteEmailAddressWebStyles.tagEditorPadding,
textInputAction: TextInputAction.done, borderRadius: TextFieldAutoCompleteEmailAddressWebStyles.borderRadius,
debounceDuration: TextFieldAutoCompleteEmailAddressWebStyles.debounceDuration, borderSize: TextFieldAutoCompleteEmailAddressWebStyles.borderWidth,
hasAddButton: false, focusedBorderColor: TextFieldAutoCompleteEmailAddressWebStyles.focusedBorderColor,
autofocus: widget.field == AdvancedSearchFilterField.form && _currentListEmailAddress.isEmpty, enableBorder: true,
inputDecoration: InputDecoration( enableBorderColor: AppColor.colorInputBorderCreateMailbox,
filled: true, minTextFieldWidth: TextFieldAutoCompleteEmailAddressWebStyles.minTextFieldWidth,
fillColor: TextFieldAutoCompleteEmailAddressWebStyles.textInputFillColor, resetTextOnSubmitted: true,
border: TextFieldAutoCompleteEmailAddressWebStyles.textInputBorder, suggestionsBoxElevation: TextFieldAutoCompleteEmailAddressWebStyles.suggestionBoxElevation,
hintText: widget.field.getHintText(context), suggestionsBoxBackgroundColor: TextFieldAutoCompleteEmailAddressWebStyles.suggestionBoxBackgroundColor,
hintStyle: TextFieldAutoCompleteEmailAddressWebStyles.textInputHintStyle, suggestionsBoxRadius: TextFieldAutoCompleteEmailAddressWebStyles.suggestionBoxRadius,
isDense: true, suggestionsBoxMaxHeight: TextFieldAutoCompleteEmailAddressWebStyles.suggestionBoxMaxHeight,
contentPadding: TextFieldAutoCompleteEmailAddressWebStyles.textInputContentPadding, suggestionBoxWidth: _getSuggestionBoxWidth(constraints.maxWidth),
), textStyle: TextFieldAutoCompleteEmailAddressWebStyles.textInputTextStyle,
padding: TextFieldAutoCompleteEmailAddressWebStyles.tagEditorPadding, onFocusTagAction: (focused) => _handleFocusTagAction.call(focused, setState),
borderRadius: TextFieldAutoCompleteEmailAddressWebStyles.borderRadius, onDeleteTagAction: () => _handleDeleteLatestTagAction.call(setState),
borderSize: TextFieldAutoCompleteEmailAddressWebStyles.borderWidth, onSelectOptionAction: (item) => _handleSelectOptionAction.call(item, setState),
focusedBorderColor: TextFieldAutoCompleteEmailAddressWebStyles.focusedBorderColor, onSubmitted: (value) => _handleSubmitTagAction.call(value, setState),
enableBorder: true, tagBuilder: (context, index) {
enableBorderColor: AppColor.colorInputBorderCreateMailbox, final currentEmailAddress = _currentListEmailAddress.elementAt(index);
minTextFieldWidth: TextFieldAutoCompleteEmailAddressWebStyles.minTextFieldWidth, final isLatestEmail = currentEmailAddress == _currentListEmailAddress.last;
resetTextOnSubmitted: true, return AutoCompleteTagItemWidgetWeb(
suggestionsBoxElevation: TextFieldAutoCompleteEmailAddressWebStyles.suggestionBoxElevation, field: widget.field,
suggestionsBoxBackgroundColor: TextFieldAutoCompleteEmailAddressWebStyles.suggestionBoxBackgroundColor, currentEmailAddress: currentEmailAddress,
suggestionsBoxRadius: TextFieldAutoCompleteEmailAddressWebStyles.suggestionBoxRadius, currentListEmailAddress: _currentListEmailAddress,
suggestionsBoxMaxHeight: TextFieldAutoCompleteEmailAddressWebStyles.suggestionBoxMaxHeight, collapsedListEmailAddress: _collapsedListEmailAddress,
suggestionBoxWidth: _getSuggestionBoxWidth(constraints.maxWidth), isLatestEmail: isLatestEmail,
textStyle: TextFieldAutoCompleteEmailAddressWebStyles.textInputTextStyle, isCollapsed: _isCollapse,
onFocusTagAction: (focused) => _handleFocusTagAction.call(focused, setState), isLatestTagFocused: _lastTagFocused,
onDeleteTagAction: () => _handleDeleteLatestTagAction.call(setState), onDeleteTagAction: (emailAddress) => _handleDeleteTagAction.call(emailAddress, setState),
onSelectOptionAction: (item) => _handleSelectOptionAction.call(item, setState), onShowFullAction: widget.onShowFullListEmailAddressAction,
onSubmitted: (value) => _handleSubmitTagAction.call(value, setState), );
onTapOutside: widget.onTapOutside, },
tagBuilder: (context, index) { onTagChanged: (tag) => _handleOnTagChangeAction.call(tag, setState),
final currentEmailAddress = _currentListEmailAddress.elementAt(index); findSuggestions: _findSuggestions,
final isLatestEmail = currentEmailAddress == _currentListEmailAddress.last; suggestionBuilder: (context, tagEditorState, suggestionEmailAddress, index, length, highlight, suggestionValid) {
return AutoCompleteTagItemWidgetWeb( return AutoCompleteSuggestionItemWidgetWeb(
field: widget.field, suggestionState: suggestionEmailAddress.state,
currentEmailAddress: currentEmailAddress, emailAddress: suggestionEmailAddress.emailAddress,
currentListEmailAddress: _currentListEmailAddress, suggestionValid: suggestionValid,
collapsedListEmailAddress: _collapsedListEmailAddress, highlight: highlight,
isLatestEmail: isLatestEmail, onSelectedAction: (emailAddress) {
isCollapsed: _isCollapse, setState(() => _currentListEmailAddress.add(emailAddress));
isLatestTagFocused: _lastTagFocused, _updateListEmailAddressAction();
onDeleteTagAction: (emailAddress) => _handleDeleteTagAction.call(emailAddress, setState), tagEditorState.resetTextField();
onShowFullAction: widget.onShowFullListEmailAddressAction, tagEditorState.closeSuggestionBox();
);
},
onTagChanged: (tag) => _handleOnTagChangeAction.call(tag, setState),
findSuggestions: _findSuggestions,
useDefaultHighlight: true,
suggestionBuilder: (context, tagEditorState, suggestionEmailAddress, index, length, highlight, suggestionValid) {
return AutoCompleteSuggestionItemWidgetWeb(
suggestionState: suggestionEmailAddress.state,
emailAddress: suggestionEmailAddress.emailAddress,
suggestionValid: suggestionValid,
highlight: highlight,
onSelectedAction: (emailAddress) {
setState(() => _currentListEmailAddress.add(emailAddress));
_updateListEmailAddressAction();
tagEditorState.resetTextField();
tagEditorState.closeSuggestionBox();
},
);
}, },
); );
}) },
), onHandleKeyEventAction: (event) {
) if (event is RawKeyDownEvent) {
switch (event.logicalKey) {
case LogicalKeyboardKey.tab:
widget.nextFocusNode?.requestFocus();
break;
default:
break;
}
}
},
);
})
), ),
), ),
], ],
+1 -1
View File
@@ -1553,7 +1553,7 @@ packages:
description: description:
path: "." path: "."
ref: master ref: master
resolved-ref: "796d679e3aaf34d0107819d1f12bb3cf45a59d64" resolved-ref: aad6fb53c832fbe3b86f2b9eaefaab7a83392529
url: "https://github.com/dab246/super_tag_editor.git" url: "https://github.com/dab246/super_tag_editor.git"
source: git source: git
version: "0.2.0" version: "0.2.0"