我正在构建一个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导入会出现以下错误:
dart:html
避免在Flutter Web插件包之外使用仅Web库
警告的较长版本如下所示:
避免使用网络图书馆,dart:html,dart:js并dart:js_util在颤振包不在网络插件。在网络环境之外不支持这些库;依赖于它们的功能将在Flutter mobile上运行时失败,并且在Flutter Web中通常不鼓励使用它们。 允许通过以下方式访问Web库: plugin packages that declare web as a supported context 否则,进口dart:html,dart:js并且dart:js_util是不允许的。
避免使用网络图书馆,dart:html,dart:js并dart:js_util在颤振包不在网络插件。在网络环境之外不支持这些库;依赖于它们的功能将在Flutter mobile上运行时失败,并且在Flutter Web中通常不鼓励使用它们。
dart:js
dart:js_util
允许通过以下方式访问Web库:
plugin packages that declare web as a supported context
否则,进口dart:html,dart:js并且dart:js_util是不允许的。
这不只是警告。这实际上阻止了构建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 'dart:html' as html;
import 'package:universal_html/html.dart' as html;
对于那些因其他相关的网络导入问题(例如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';