Flutter — FutureBuilder в SearchDelegate с запросом задержки

Я изо всех сил пытался реализовать простую функцию поиска, используя 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();
}

person NM Naufaldo    schedule 19.07.2021    source источник