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

如何从JavaScript调用返回字符串的Dart异步函数

在JavaScript中调用返回字符串的Dart异步函数

出现js._DartObject.new的问题,核心是Dart异步函数返回的Future在JavaScript中未被正确识别为Promise,且函数未通过interop包装让JS能处理。以下是具体解决步骤:

1. Dart端:正确暴露异步函数

使用package:js库将异步函数包装并暴露给JS,确保函数能被JS识别:

import 'package:js/js.dart';

// 定义供JS调用的全局函数名
@JS('fetchDartString')
external void registerFetchFunction(Function func);

void main() {
  // 用allowInterop包装Dart异步函数,让JS能处理
  registerFetchFunction(allowInterop(() async {
    // 模拟异步操作,比如接口请求、数据处理
    await Future.delayed(const Duration(milliseconds: 500));
    return "这是来自Dart的异步字符串结果";
  }));
}

2. JavaScript端:调用并处理Promise

Dart的异步函数通过allowInterop包装后,在JS中会被视为Promise,直接用await获取结果即可:

async function getDartResult() {
  try {
    const stringResult = await fetchDartString();
    console.log(stringResult); // 输出完整字符串
  } catch (err) {
    console.error('调用出错:', err);
  }
}

// 执行调用
getDartResult();

关键注意事项

  • 必须用allowInterop包装Dart函数:否则JS无法识别Dart的函数对象,会返回原始的_DartObject。
  • 异步函数返回的Future会自动转为JS Promise:不需要额外手动转换,直接await即可拿到字符串结果。
  • 确保Dart生成的JS文件已加载:在Flutter Web场景下,要确认index.html中已引入main.dart.js。

内容的提问来源于stack exchange,提问作者Emmanuel Fongang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:47:07