Метод buildSuggestions
Метод buildSuggestions класса SearchDelegate возвращает виджет под строкой поиска,
пока пользователь не нажал submit.
Читают query из delegate,
показывают список
ListTile
или фильтр данных.
Вызывается фреймворком внутри
showSearch.
Синтаксис
@override
Widget buildSuggestions(BuildContext context)
{
return ListTile(title: Text('abcde'));
}
Параметры
| Параметр | Описание |
|---|---|
context |
Контекст, от которого виджет ищут вверх по дереву. |
Пример
Давайте покажем подсказки из списка строк:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: SuggestDemo()));
}
class SuggestDemo extends StatelessWidget
{
const SuggestDemo({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () {
showSearch(
context: context,
delegate: _ListDelegate(),
);
},
child: Text('abcde'),
),
),
);
}
}
class _ListDelegate extends SearchDelegate<void>
{
final items = ['abcde', '12345'];
@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)
{
final match = items.where((s) => s.contains(query));
return ListView(
children: match
.map((s) => ListTile(title: Text(s)))
.toList(),
);
}
}
buildSuggestions отфильтрует строки по query.
Пример
Давайте делегируем buildResults из buildSuggestions:
import 'package:flutter/material.dart';
void main()
{
runApp(const MaterialApp(home: SuggestSameDemo()));
}
class SuggestSameDemo extends StatelessWidget
{
const SuggestSameDemo({super.key});
@override
Widget build(BuildContext context)
{
return Scaffold(
appBar: AppBar(title: Text('12345')),
body: Center(
child: IconButton(
icon: Icon(Icons.search),
onPressed: () {
showSearch(
context: context,
delegate: _SameDelegate(),
);
},
),
),
);
}
}
class _SameDelegate 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 buildResults(context);
}
}
До submit пользователь увидит тот же экран, что и в results.
Смотрите также
-
метод
buildResults,
экран после submit -
метод
buildActions,
кнопки справа вAppBar -
класс
SearchDelegate,
базовый класс поиска -
функция
showSearch,
открыть delegate