html - 避免在Flutter Web插件包之外使用仅Web库

标签 html flutter dart flutter-web

我正在构建一个Flutter应用,试图在网络上工作。其中一部分包含一些特定于网络的代码:

import 'dart:html' as html;
import 'package:flutter/foundation.dart';

class DownloadViewModel extends ChangeNotifier {
  static const String url = 'https://example.com/api/v1/app/myapp_1.0.0.apk';
  void onAndroidDownloadPressed() {
    html.window.open(url, 'AndroidApp');
  }
}

但是,dart:html导入会出现以下错误:

Avoid using web-only libraries outside Flutter web plugin packages



警告的较长版本如下所示:

Avoid using web libraries, dart:html, dart:js and dart:js_util in Flutter packages that are not web plugins. These libraries are not supported outside a web context; functionality that depends on them will fail at runtime in Flutter mobile, and their use is generally discouraged in Flutter web.

Web library access is allowed in:

plugin packages that declare web as a supported context

otherwise, imports of dart:html, dart:js and dart:js_util are disallowed.



这不仅是警告。这实际上阻止了构建Android或iOS应用程序(即使非Web Flutter应用程序无法访问此方法)。

我发现的唯一解决方案是在为Android和iOS构建时注释掉导入,然后在为Web构建时取消注释。有更好的解决方案吗?

最佳答案

使用universal_html软件包。它支持浏览器,Dart VM和Flutter,并且是dart:html和其他与Web相关的库的替代品。

dependencies:
  universal_html: ^1.2.1

然后,可以使用以下导入来代替import 'dart:html' as html;:
import 'package:universal_html/html.dart' as html;

对于那些因其他相关的Web导入问题(例如dart:js)而来到此页面的人,此插件还支持以下导入:
import 'package:universal_html/driver.dart';
import 'package:universal_html/html.dart';
import 'package:universal_html/indexed_db.dart';
import 'package:universal_html/js.dart';
import 'package:universal_html/js_util.dart';
import 'package:universal_html/prefer_sdk/html.dart';
import 'package:universal_html/prefer_sdk/indexed_db.dart';
import 'package:universal_html/prefer_sdk/js.dart';
import 'package:universal_html/prefer_sdk/js_util.dart';
import 'package:universal_html/prefer_sdk/svg.dart';
import 'package:universal_html/prefer_sdk/web_gl.dart';
import 'package:universal_html/prefer_universal/html.dart';
import 'package:universal_html/prefer_universal/indexed_db.dart';
import 'package:universal_html/prefer_universal/js.dart';
import 'package:universal_html/prefer_universal/js_util.dart';
import 'package:universal_html/prefer_universal/svg.dart';
import 'package:universal_html/prefer_universal/web_gl.dart';
import 'package:universal_html/svg.dart';
import 'package:universal_html/web_gl.dart';

关于html - 避免在Flutter Web插件包之外使用仅Web库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60646793/

相关文章:

javascript - 即使 Flask 服务器推送似乎可以工作,EventSource.onmessage 也不会触发

javascript - 按 ID 删除一行中的特定 DIV

javascript - 使用 jQuery 从 DOM 中删除 SVG 元素

dart - 从当前版本升级到最新版本时出错

firebase - Flutter Firestore 检索随机 Firestore 文档

dart - 是否可以为仅DART项目添加二进制文件?

constructor - 构造函数如何使用复杂的算法初始化最终字段?

Java jsoup 选择链接

flutter - 防止未经身份验证的用户使用 Flutter Web 应用程序中的 URL 导航到路由?

flutter - 安装build_runner时Dart SDK版本不匹配