Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
477 of 1024 menu
◀ ▶

Метод 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.

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить