在 Web 上运行的 Flutter 应用程序失败并出现错误:只有 JS 互操作成员可能是“外部的”

Posted

技术标签:

【中文标题】在 Web 上运行的 Flutter 应用程序失败并出现错误:只有 JS 互操作成员可能是“外部的”【英文标题】:Flutter app running on web failing with error: Only JS interop members may be 'external' 【发布时间】:2021-09-22 21:10:53 【问题描述】:

我正在尝试让我当前的 Flutter 应用程序在网络上运行。我打电话给flutter create .,但如果我尝试在 Chrome 中运行它,我会收到大约 10000 条错误消息提示,这些消息看起来都像这样:

尝试删除 'external' 关键字或添加 JS 互操作注释。 外部 ffi.Pointer 移除; ^

../../flutter/.pub-cache/hosted/pub.dartlang.org/objectbox-1.1.0/lib/src/native/bindings/objectbox-c.dart:6289:41: 错误:只有 JS 互操作成员可能是“外部的”。尝试删除 'external' 关键字或添加 JS 互操作注释。外部的 ffi.Pointer 列表; ^

../../flutter/.pub-cache/hosted/pub.dartlang.org/objectbox-1.1.0/lib/src/native/bindings/objectbox-c.dart:6292:16: 错误:只有 JS 互操作成员可能是“外部的”。尝试删除 'external' 关键字或添加 JS 互操作注释。外部整数 数数; ^

编译应用程序失败。

我试着用谷歌搜索它,但我找不到任何关于它的东西。有谁知道这是关于什么以及我如何适应它??

【问题讨论】:

好吧,我使用的是 moor db,我不得不删除 import 'package:moor/ffi.dart';因为它只支持移动设备 【参考方案1】:

在此处重新发布the answer from a GitHub issue:

您无法使用不支持 Web 的包构建您的 Web 应用,而 ObjectBox 尚不支持 (there's an issue you can track though)。

有时您可能希望在一小部分代码中具有依赖关系,如果它不适用于 web 也可​​以,在这种情况下,您可以使用“条件导入”,例如:

import 'myapp/sources-that-use-objectbox.dart' if (dart.library.html) 'myapp/sources-that-dont-use-objectbox.dart';

【讨论】:

【参考方案2】:

就我而言,我不小心使用了网络不支持的“ffi”库。然后,我在我的代码中删除了对该库的所有导入,并且还从“pubsec.yaml”中删除了该库。现在可以正常启动了。

【讨论】:

以上是关于在 Web 上运行的 Flutter 应用程序失败并出现错误:只有 JS 互操作成员可能是“外部的”的主要内容,如果未能解决你的问题,请参考以下文章

在 BigSur、XCode 12 上 Flutter iOS 构建失败

Flutter Web:google_sign_in_web:适用于桌面和 iOS。在 Android Chrome 上失败

相同的 Flutter Web 构建使用 `dhttp` 在本地运行,但使用 `firebase serve` 或 `firebase deploy` 失败

无法在 iOS 模拟器上运行 Flutter 应用程序 / 命令 PhaseScriptExecution 失败,退出代码为非零

检查 Flutter 应用程序是否在 Web 上运行

Flutter iOS 在模拟器上运行失败:未定义符号:_OBJC_CLASS_$_EAAccessory