Я хочу реализовать панель приложений, как показано ниже, где есть текстовое поле и несколько значков:
Значки можно легко добавить в действие, но как добавить текстовое поле и добавить к нему действие поиска. Доступно множество плагинов панели поиска, но все они занимают всю панель приложения, и нет возможности упомянуть подсказки. Может ли кто-нибудь дать некоторую идею, это будет большим подспорьем для меня.
В собственности заголовка, внутри AppBar, вы можете передать виджет, что означает, что вы можете добавить любой компонент, который хотите, например TextField. см. пример ниже:
appBar: AppBar(
title: TextField(
decoration: InputDecoration(
hintText: 'Search',
prefixIcon: Icon(Icons.search)
),
),
),
Я предлагаю вам обернуть это TextField в GestureDetector, отключить TextField с свойством, называемым enable
(установленным в false), и в методе onTap
внутри GestureDetector вы можете вызвать метод showSearch()
.
Чтобы вызвать это showSearch()
, вам нужно передать context
и searchDelegate
, которые являются компонентом, расширяющим класс, проверьте этот пример:
class CustomSearchDelegate extends SearchDelegate {
@override
List<Widget> buildActions(BuildContext context) {
// TODO: implement buildActions
return null;
}
@override
Widget buildLeading(BuildContext context) {
// TODO: implement buildLeading
return null;
}
@override
Widget buildResults(BuildContext context) {
// TODO: implement buildResults
return null;
}
@override
Widget buildSuggestions(BuildContext context) {
// TODO: implement buildSuggestions
return null;
}
}
Источник: Реализация поиска во Flutter
Теперь вы можете сделать это:
GestureDetector:
onTap: () => showSearch(context: context, delegate: CustomSearchScreen()),
child: ....
Спасибо. Это большая помощь.
Идея преобразования текстового поля в панель поиска с делегатом поиска. отличная идея. Спасибо
добавить то, что вы сделали до сих пор