【问题标题】:Avoid using web-only libraries outside Flutter web plugin packages避免在 Flutter Web 插件包之外使用纯 Web 库
【发布时间】:2020-06-24 01:44:12
【问题描述】:

我正在构建一个 Flutter 应用程序,并尝试在网络上运行。其中一部分包含一些特定于 Web 的代码:

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:htmldart:jsdart:js_util 在 不是 Web 插件的 Flutter 包。这些库不是 在网络环境之外支持;依赖于它们的功能 在 Flutter 移动端运行时会失败,它们的使用一般是 在 Flutter web 中不鼓励使用。

允许访问网络库:

plugin packages that declare web as a supported context

否则,将不允许导入 dart:htmldart:jsdart:js_util

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

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

【问题讨论】:

    标签: html flutter dart flutter-web


    【解决方案1】:

    使用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;
    

    对于那些因其他相关网页导入问题(如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';
    

    【讨论】:

    • universal_html: ^1.2.2 对我不起作用,但universal_html: ^1.2.1the linked documentation 所示。
    • @StackUnderflow。好的,谢谢通知。也许这是他们的版本号中的一个错误。无论如何,我暂时更新了我的答案以使用1.2.1
    • 我正在使用 FunctionStringCallback,它导致了这个错误。尝试将其更改为最终变量。
    猜你喜欢
    • 2021-01-25
    • 2020-01-03
    • 2019-10-28
    • 2021-10-03
    • 1970-01-01
    • 2020-06-02
    • 2021-08-16
    • 1970-01-01
    • 2013-02-15
    相关资源
    最近更新 更多