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

如何通过Dart js_interop实现Tauri v2与Flutter Web集成并调用API?

解决Flutter Web通过Dart js_interop调用Tauri v2 invoke方法的问题

你的错误核心在于Tauri的invoke方法返回的是异步Promise,而非同步字符串,你之前的interop定义错误地将返回值声明为JSString,导致类型不匹配。

正确的JS Interop定义

import 'dart:js_interop';
import 'dart:js_util'; // 用于处理参数转JS对象

@JS('window.__TAURI__.core.invoke')
external JSPromise<JSString> invoke(JSString command, [JSObject? args]);

调用示例(异步处理)

因为invoke返回Promise,必须用async/await处理异步逻辑:

Future<String> callTauriCmd(String command, [Map<String, dynamic>? args]) async {
  // 可选:将Dart参数Map转为JS对象
  final jsArgs = args != null ? jsify(args) as JSObject : null;
  // 调用invoke并解析Promise结果
  final jsResult = await invoke(command.toJS, jsArgs).toDart;
  // 将JS字符串转为Dart字符串
  return jsResult.toDart;
}

额外注意事项

  1. 确认Tauri配置tauri.conf.json中已启用全局Tauri对象:
{
  "tauri": {
    "windows": [
      {
        "webview": {
          "withGlobalTauri": true
        }
      }
    ]
  }
}
  1. 若Tauri命令返回非字符串类型,需调整泛型适配:
    • 返回JSON对象:使用JSPromise<JSObject>,后续用dartify转为Dart Map
    • 返回数字:使用JSPromise<JSNumber>,转为Dart int/double类型

内容的提问来源于stack exchange,提问作者Ramon Rivas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:01:06