Я изо всех сил пытался реализовать простую функцию поиска, используя SearchDelegate
. Я хочу подождать 2 секунды после того, как пользователь перестанет печатать, а затем сделать запрос на вызов API.
Я уже проверяю этот вопрос: Как отменить поисковые подсказки в SearchPage флаттера Виджет? и используйте этот пакет https://pub.dev/packages/debounce_throttle, но все еще не работает, как я ожидал. Каждый раз, когда пользователь набирает новый символ, приложение немедленно делает запрос на звонок.
Это пример кода для функции buildResults
@override
Widget buildResults(BuildContext context) {
return FutureBuilder(
builder: (BuildContext context, AsyncSnapshot<List<Place>> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return ListView.builder(
itemBuilder: (context, index) => ListTile(
leading: Icon(Icons.location_city),
title: Text(snapshot.data![index].name),
onTap: () { ... do something ... },
),
itemCount: snapshot.data!.length,
);
} else {
return Center(child: CircularProgressIndicator());
}
},
future: queryChanged(query),
);
}
и функция Future для запроса вызова
Future<List<Place>> _getLocation() async {
List<Place> displayPlaces = [];
...
...
return displayPlaces;
}
Код дебонсера
final debouncer = Debouncer<String>(Duration(milliseconds: 2000), initialValue: '');
Future<List<Place>> queryChanged(String query) async {
debouncer.value = query;
return _getLocation();
}