我需要从 JS 获取 Flutter Web 上 Algolia 的搜索结果?
这是在index.html中:
<script>
const client = algoliasearch("4HURXXXXX", "xxxxxb8fxxxx");
async function asyncTest(indexx, text, hitCallback, errorCallback) {
// Get the
const index = client.initIndex(indexx);
const res = await index.search();
return res;
}
</script>
flutter :
import 'dart:js' as js;
js.context.callMethod('asyncTest', [
'stock_items',
searchValue,
]);
如何获得 Javsdript promise 作为 Dart Future?
最佳答案
您可以使用 dart:js
库将 JavaScript Promise 转换为 Dart Future。
import 'dart:async';
import 'dart:js' as js;
Future<dynamic> searchAlgolia(String index, String text) {
final completer = Completer<dynamic>();
js.context.callMethod('asyncTest', [
index,
text,
(result) => completer.complete(result),
(error) => completer.completeError(error),
]);
return completer.future;
}
在这段代码中,我创建了一个 Completer 将 JavaScript Promise 转换为 Dart Future。您需要将索引和文本参数传递给 JavaScript 中的 asyncTest
函数。您还可以传递两个回调来处理成功和错误情况。当 JavaScript Promise 解析时,完成器将完成结果。如果 Promise 被拒绝,则完成器将完成并出现错误。最后返回完成者的 future 属性。
关于javascript - 如何从 Flutter 调用异步 JS 函数并获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76838915/