如何从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
相关产品推荐
相关产品推荐

