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

Flutter应用中用flutter_js调用Seam API遇错误,求原因及解决办法

问题分析与解决方案:flutter_js 无法运行 Seam JavaScript SDK

核心结论

flutter_js 确实无法直接兼容 Seam JavaScript SDK,同时你的代码还存在两处语法错误,叠加环境限制导致功能失效。

眼前报错的直接原因

  1. ES模块语法不支持
    flutter_js 的运行环境仅支持纯原生JavaScript,不兼容ES6的import/export模块语法。你的代码里import { Seam } from 'seam'属于模块导入语法,会被识别为非法代码,直接抛出Unexpected token '{'错误。

  2. 异步函数语法错误
    unlockApartment函数内部使用了await关键字,但函数本身未声明为async,这属于JS语法错误,即便解决了导入问题,也会导致运行失败。修正后的函数应该是:

    async function unlockApartment(){
      const seam = new Seam()
      const lock = await seam.locks.get({ name: 'Front Door' })
      await seam.locks.unlockDoor({ device_id: lock.device_id })
      return 'success';
    }
    

flutter_js 无法兼容 Seam SDK的本质原因

Seam JavaScript SDK 依赖浏览器环境的核心能力:

  • 网络请求:SDK内部会调用浏览器的fetch或XMLHttpRequest发起API请求,但flutter_js未提供这些浏览器专属API;
  • 存储:部分SDK逻辑可能依赖localStorage存储认证信息,而flutter_js也不支持这类浏览器存储能力。

即便修复了语法问题,SDK的核心API调用功能也无法在flutter_js环境中正常运行,因为缺少必要的环境依赖。

可行的替代方案

方案1:直接用Dart调用Seam REST API

跳过中间层,直接用Flutter的http或dio包调用Seam的REST API,这是最简洁高效的方案。参考示例:

import 'package:http/http.dart' as http;
import 'dart:convert';

Future<void> unlockLock() async {
  final response = await http.post(
    Uri.parse('https://connect.getseam.com/locks/unlock_door'),
    headers: {
      'Authorization': 'Bearer YOUR_SEAM_API_KEY',
      'Content-Type': 'application/json',
    },
    body: jsonEncode({
      'device_id': 'YOUR_LOCK_DEVICE_ID'
    }),
  );

  if (response.statusCode == 200) {
    print('解锁成功');
  } else {
    print('解锁失败:${response.body}');
  }
}

方案2:用WebView承载Seam SDK

如果一定要使用Seam JavaScript SDK,可以通过webview_flutter包在Flutter中嵌入WebView——WebView提供完整的浏览器环境,能支持SDK的所有功能。然后通过Flutter与WebView的JS桥通信触发解锁操作:

  1. 在WebView中加载包含Seam SDK的网页;
  2. 定义Flutter调用WebView中JS函数的通信通道;
  3. 点击按钮时通过通道调用WebView内的unlockApartment函数。

内容的提问来源于stack exchange,提问作者Inigo Hohmeyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:55:11