避免在 Flutter Web 插件包之外使用纯 Web 库

2024-05-26

我正在构建一个 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导入出现以下错误:

避免在 Flutter Web 插件包之外使用纯 Web 库

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

避免使用网络库,dart:html, dart:js and dart:js_util在 Flutter 包不是 Web 插件。这些库不是 支持网络环境之外;依赖于它们的功能 在Flutter mobile中运行时会失败,它们的使用一般是 在 Flutter web 中不鼓励。

允许访问网络图书馆:

plugin packages that declare web as a supported context

否则,进口dart:html, dart:js and dart:js_util是不允许的。

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

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


Use the 通用_html https://pub.dev/packages/universal_html包裹。它支持浏览器、Dart VM 和 Flutter,并且是dart:html和其他网络相关的库。

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';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免在 Flutter Web 插件包之外使用纯 Web 库 的相关文章