Функция showSearch
Функция showSearch пушит search route поверх текущего экрана.
В context передают контекст,
в delegate -
SearchDelegate
с buildLeading, buildActions, buildSuggestions и buildResults.
Future завершается результатом close().
Синтаксис
showSearch(
context: context,
delegate: SimpleSearchDelegate(),
)
Параметры
| Параметр | Описание |
|---|---|
context |
BuildContext активного экрана.
|
delegate |
SearchDelegate, который рисует UI поиска.
|
query |
Начальный текст в поле поиска. |
useRootNavigator |
Какой Navigator использовать для маршрута.
|
Пример
Давайте откроем поиск из AppBar:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: ShowSearchDemo()));
}
class ShowSearchDemo extends StatelessWidget
{
const ShowSearchDemo({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
appBar: AppBar(
title: Text('abcde'),
actions: [
IconButton(
icon: Icon(Icons.search),
onPressed: () {
showSearch(
context: context,
delegate: _BasicDelegate(),
);
},
),
],
),
body: Center(child: Text('12345')),
);
}
}
class _BasicDelegate extends SearchDelegate<void>
{
@override
Widget buildLeading(BuildContext context)
{
return IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () => close(context, null),
);
}
@override
List<Widget> buildActions(BuildContext context) => [];
@override
Widget buildResults(BuildContext context)
{
return Center(child: Text('abcde'));
}
@override
Widget buildSuggestions(BuildContext context)
{
return ListTile(title: Text('12345'));
}
}
Кнопка лупы вызовет showSearch с delegate.
Пример
Давайте передадим начальный query:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: ShowSearchQueryDemo()));
}
class ShowSearchQueryDemo extends StatelessWidget
{
const ShowSearchQueryDemo({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
showSearch(
context: context,
query: 'abcde',
delegate: _QueryDelegate(),
);
},
child: Text('12345'),
),
),
);
}
}
class _QueryDelegate extends SearchDelegate<void>
{
@override
Widget buildLeading(BuildContext context)
{
return IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () => close(context, null),
);
}
@override
List<Widget> buildActions(BuildContext context) => [];
@override
Widget buildResults(BuildContext context)
{
return Center(child: Text(query));
}
@override
Widget buildSuggestions(BuildContext context)
{
return buildResults(context);
}
}
Поле поиска откроется с текстом 'abcde'.
Смотрите также
-
класс
SearchDelegate,
логика экрана поиска -
виджет
SearchAnchor,
альтернатива M3 без маршрута -
функция
showDialog,
другой модальный маршрут -
класс
SearchController,
состояниеSearchBar