Я плохо знаком с флаттером и хочу перевести некоторый текст из InputField
, вызвав API.Однако я не хочу вызывать его при каждом нажатии клавиши, а вместо этого, только когда пользователь приостановил набор текста.
В Android я бы просто использовал класс Handler
с postDelay()
с предварительным вызовом removeAllCallbacksAndMessages(null)
,Есть ли способ сделать что-то похожее на Дарт?
Вот мой текущий код:
Future<String> getTranslation(String query, Language from, Language to) async {
// cancel here if a call to this function was less than 500 millis ago.
return Future.delayed(const Duration(milliseconds: 500), () {
return _translator.translate(query, from: from.code, to: to.code)
});
}
Редактировать 1
Я звонюкод из моего Блока примерно так:
@override
Stream<State> mapEventToState(Event event) async* {
if (event is QueryChangeEvent) {
yield TextTranslationChangeState(
query: event.query ?? "",
translation: await _repo.getTranslation(event.query, currentState.fromLang, currentState.toLang));
}
Вот почему я не могу вызвать .then()
в будущем, потому что я не смог бы получить новое состояние из блока вложенной функции.
Любая помощь приветствуется!