You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Flutter调用JS异步函数并获取结果?Flutter Web转Promise为Future

在Flutter Web中将JavaScript Promise转换为Dart Future的方法

1. 修正JavaScript端代码

先补全原代码中遗漏的搜索文本参数,简化后的asyncTest函数本身会返回Promise(async函数默认返回Promise):

<script>
  const client = algoliasearch("4HURXXXXX", "xxxxxb8fxxxx");
  async function asyncTest(indexName, searchText) {
    const index = client.initIndex(indexName);
    // 传入搜索关键词执行Algolia搜索
    return await index.search(searchText);
  }
</script>

2. Flutter Dart端转换Promise为Future

使用dart:js_util库的promiseToFuture方法,将JS返回的Promise直接转换为Dart的Future,就能用Dart的异步语法处理结果:

import 'dart:js' as js;
import 'dart:js_util' as js_util;

// 封装搜索方法
Future<void> getAlgoliaSearchResults(String searchValue) async {
  try {
    // 调用JS端的asyncTest函数,获取JS Promise对象
    final jsPromise = js.context.callMethod('asyncTest', ['stock_items', searchValue]);
    // 将JS Promise转换为Dart Future
    final searchResults = await js_util.promiseToFuture(jsPromise);
    
    // 提取搜索结果中的hits数据(根据Algolia返回格式)
    final hits = js_util.getProperty(searchResults, 'hits');
    // 这里可以根据业务需求处理hits数据
    print('获取到搜索结果:$hits');
  } catch (error) {
    // 捕获搜索过程中的错误
    print('搜索失败:$error');
  }
}

关键说明

  • JavaScript的async函数天然返回Promise,无需额外处理回调
  • dart:js_util.promiseToFuture是官方提供的工具方法,专门用于在Flutter Web中实现JS Promise与Dart Future的双向转换
  • 处理JS返回的对象时,需用js_util.getProperty来读取属性,避免直接访问导致的类型错误

内容的提问来源于stack exchange,提问作者Brandon Pillay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:01:20