【发布时间】:2019-05-29 04:42:39
【问题描述】:
我是 Flutter 的新手,我想通过调用 API 从 InputField 翻译一些文本。但是我不想在每次击键时都调用它,而是只在用户暂停输入时调用它。
在 Android 上,我只会使用 Handler 类和 postDelay() 并事先调用 removeAllCallbacksAndMessages(null)。有没有办法在 Dart 上做类似的事情?
这是我当前的代码:
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
我正在从我的 Bloc 中调用代码,如下所示:
@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(),因为我无法从嵌套函数的块中产生新状态。
感谢任何帮助!
【问题讨论】:
标签: flutter dart dart-async