TF-3087 [WEB] Apply new design suggestions search for email address in search bar

This commit is contained in:
dab246
2024-08-30 13:54:01 +07:00
committed by Dat H. Pham
parent b407257e65
commit 208a6cde0d
@@ -1200,65 +1200,10 @@ class _SuggestionsListState<T, P, R> extends State<_SuggestionsList<T, P, R>>
}
Widget createSuggestionsWidget() {
final listItemSuggestionWidget = _suggestions?.map((T suggestion) {
if (widget.itemBuilder != null) {
return InkWell(
child: widget.itemBuilder!(context, suggestion),
onTap: () => widget.onSuggestionSelected?.call(suggestion),
);
} else {
return const SizedBox.shrink();
}
}).toList() ?? [];
final loadingWidget = widget.loadingBuilder != null
? widget.loadingBuilder!(context)
: const Align(
alignment: Alignment.center,
child: Padding(
padding: EdgeInsets.symmetric(vertical: 8.0),
child: CircularProgressIndicator(),
),
);
final listAction = Wrap(
children: widget.listActionButton!.map((dynamic action) {
if (widget.actionButtonBuilder != null) {
return Padding(
padding: EdgeInsets.only(
right: widget.isDirectionRTL ? 0 : 8,
left: widget.isDirectionRTL ? 8 : 0,
bottom: kIsWeb ? 8 : 0
),
child: InkWell(
borderRadius: const BorderRadius.all(Radius.circular(10)),
onTap: () {
if (widget.buttonActionCallback != null) {
widget.buttonActionCallback!(action);
invalidateSuggestions();
}
},
child: widget.actionButtonBuilder!(context, action),
),
);
} else {
return const SizedBox.shrink();
}
}).toList());
final listItemContactWidget = _contacts?.map((P contact) {
if (widget.contactSuggestionBuilder != null) {
return Material(
type: MaterialType.transparency,
child: InkWell(
child: widget.contactSuggestionBuilder!(context, contact),
onTap: () => widget.onContactSuggestionSelected?.call(contact),
),
);
} else {
return const SizedBox.shrink();
}
}).toList() ?? [];
final listItemSuggestionWidget = _buildListViewSuggestionWidget();
final loadingWidget = _buildLoadingBarWidget();
final listAction = _buildListActionWidget();
final listItemContactWidget = _buildListViewContactWidget();
Widget child = ListView(
padding: EdgeInsets.zero,
@@ -1267,17 +1212,14 @@ class _SuggestionsListState<T, P, R> extends State<_SuggestionsList<T, P, R>>
controller: _scrollController,
reverse: widget.suggestionsBox!.direction == AxisDirection.down ? false : true, // reverses the list to start at the bottom
children: [
if (widget.listActionButton != null && widget.listActionButton?.isNotEmpty == true)
Padding(
padding: widget.listActionPadding ?? EdgeInsets.zero,
child: listAction,
),
if (_isLoading == true && widget.hideOnLoading == false && widget.keepSuggestionsOnLoading == false)
loadingWidget,
if (listItemContactWidget.isNotEmpty)
... listItemContactWidget,
if (listAction != null) listAction,
if (loadingWidget != null) loadingWidget,
if (widget.buttonShowAllResult != null && widget.controller?.text.isNotEmpty == true)
widget.buttonShowAllResult!(context, widget.controller?.text),
if (listItemContactWidget.isNotEmpty)
... listItemContactWidget,
if (listItemContactWidget.isNotEmpty && listItemSuggestionWidget.isNotEmpty)
const Divider(),
if (listItemSuggestionWidget.isNotEmpty)
... [
... listItemSuggestionWidget,
@@ -1297,55 +1239,9 @@ class _SuggestionsListState<T, P, R> extends State<_SuggestionsList<T, P, R>>
}
Widget createRecentWidget() {
final listItemRecent = _recentItems?.map((R recent) {
if (widget.itemRecentBuilder != null) {
return InkWell(
child: widget.itemRecentBuilder!(context, recent),
onTap: () {
if (widget.onRecentSelected != null) {
widget.onRecentSelected!(recent);
}
},
);
} else {
return const SizedBox.shrink();
}
}).toList() ?? [];
final loadingWidget = widget.loadingBuilder != null
? widget.loadingBuilder!(context)
: const Align(
alignment: Alignment.center,
child: Padding(
padding: EdgeInsets.symmetric(vertical: 8.0),
child: CircularProgressIndicator(),
),
);
final listAction = Wrap(
children: widget.listActionButton!.map((dynamic action) {
if (widget.actionButtonBuilder != null) {
return Padding(
padding: EdgeInsets.only(
right: widget.isDirectionRTL ? 0 : 8,
left: widget.isDirectionRTL ? 8 : 0,
bottom: kIsWeb ? 8 : 0
),
child: InkWell(
borderRadius: const BorderRadius.all(Radius.circular(10)),
onTap: () {
if (widget.buttonActionCallback != null) {
widget.buttonActionCallback!(action);
invalidateSuggestions();
}
},
child: widget.actionButtonBuilder!(context, action),
),
);
} else {
return const SizedBox.shrink();
}
}).toList());
final listItemRecent = _buildListViewRecentWidget();
final loadingWidget = _buildLoadingBarWidget();
final listAction = _buildListActionWidget();
Widget child = ListView(
padding: EdgeInsets.zero,
@@ -1354,13 +1250,8 @@ class _SuggestionsListState<T, P, R> extends State<_SuggestionsList<T, P, R>>
controller: _scrollController,
reverse: widget.suggestionsBox!.direction == AxisDirection.down ? false : true, // reverses the list to start at the bottom
children: [
if (widget.listActionButton != null && widget.listActionButton?.isNotEmpty == true)
Padding(
padding: widget.listActionPadding ?? EdgeInsets.zero,
child: listAction,
),
if (_isLoading == true && widget.hideOnLoading == false && widget.keepSuggestionsOnLoading == false)
loadingWidget,
if (listAction != null) listAction,
if (loadingWidget != null) loadingWidget,
if (widget.buttonShowAllResult != null && widget.controller?.text.isNotEmpty == true)
widget.buttonShowAllResult!(context, widget.controller?.text),
if (_recentItems?.isNotEmpty == true && widget.itemRecentBuilder != null && widget.titleHeaderRecent != null)
@@ -1382,6 +1273,120 @@ class _SuggestionsListState<T, P, R> extends State<_SuggestionsList<T, P, R>>
return child;
}
Widget? _buildListActionWidget() {
if (widget.listActionButton?.isNotEmpty != true
|| widget.actionButtonBuilder == null) {
return null;
}
final listActionWidget = Wrap(children: widget.listActionButton!
.map((action) {
if (widget.buttonActionCallback != null) {
return Padding(
padding: const EdgeInsetsDirectional.only(end: 8, bottom: 8),
child: InkWell(
borderRadius: const BorderRadius.all(Radius.circular(10)),
onTap: () {
widget.buttonActionCallback?.call(action);
invalidateSuggestions();
},
child: widget.actionButtonBuilder!(context, action),
),
);
} else {
return Padding(
padding: const EdgeInsetsDirectional.only(end: 8, bottom: 8),
child: widget.actionButtonBuilder!(context, action)
);
}
})
.toList()
);
if (widget.listActionPadding != null) {
return Padding(padding: widget.listActionPadding!, child: listActionWidget);
} else {
return listActionWidget;
}
}
Widget? _buildLoadingBarWidget() {
if (_isLoading != true
|| widget.hideOnLoading != false
|| widget.keepSuggestionsOnLoading != false) {
return null;
}
if (widget.loadingBuilder != null) {
return widget.loadingBuilder!(context);
} else {
return const Center(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 8.0),
child: CircularProgressIndicator(),
),
);
}
}
List<Widget> _buildListViewRecentWidget() {
if (_recentItems?.isNotEmpty != true || widget.itemRecentBuilder == null) {
return [];
}
return _recentItems!
.map((recent) {
if (widget.onRecentSelected != null) {
return InkWell(
child: widget.itemRecentBuilder!(context, recent),
onTap: () => widget.onRecentSelected!(recent),
);
} else {
return widget.itemRecentBuilder!(context, recent);
}
})
.toList();
}
List<Widget> _buildListViewSuggestionWidget() {
if (_suggestions?.isNotEmpty != true || widget.itemBuilder == null) {
return [];
}
return _suggestions!
.map((suggestion) {
if (widget.onSuggestionSelected != null) {
return InkWell(
child: widget.itemBuilder!(context, suggestion),
onTap: () => widget.onSuggestionSelected?.call(suggestion),
);
} else {
return widget.itemBuilder!(context, suggestion);
}
})
.toList();
}
List<Widget> _buildListViewContactWidget() {
if (_contacts?.isNotEmpty != true || widget.contactSuggestionBuilder == null) {
return [];
}
return _contacts!
.map((contact) {
if (widget.onContactSuggestionSelected != null) {
return InkWell(
child: widget.contactSuggestionBuilder!(context, contact),
onTap: () => widget.onContactSuggestionSelected?.call(contact),
);
} else {
return widget.contactSuggestionBuilder!(context, contact);
}
})
.toList();
}
}
/// Supply an instance of this class to the [TypeAhead.suggestionsBoxDecoration]