当前位置: 首页 > 知识库问答 >
问题:

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

丘华翰
2023-03-14

我正在构建一个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 库

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

避免在非网络插件的飘飘包中使用网页库、飞镖:html飞镖:js和飞镖:js_util。这些库在 Web 上下文之外不受支持。依赖于它们的功能在Flutter移动版的运行时会失败,并且在Flutter Web中通常不鼓励使用它们。

允许在以下位置访问Web库:

plugin packages that declare web as a supported context

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

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

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

共有2个答案

闻人宜
2023-03-14

由于将Flatter web合并到主Flatter存储库中,当以web、Android和iOS为目标时,不再可能在主频道上的Flatter项目中直接添加web库导入(例如,dart:html或dart:js)。

使用通用 html 包,它为多个平台和 Web 库提供广泛的支持。

>

  • 从项目的根级别,命令

    flutter pub add universal_html
    
      import 'package:universal_html/html.dart' as html
    

    运行某些web文件(例如dart:js)不需要此包。在我的例子中,我只需要删除import'dart:js'import语句。

  • 双元魁
    2023-03-14

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

    dependencies:
      universal_html: ^1.2.1
    

    然后不使用< code >将“dart:html”作为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页面中使用表格(现在已经有了CSS)? 表格有什么用途?表具有哪些CSS所没有的功能? 问题答案: 一点都不。但是将表格用于表格数据。只是不要将它们用于一般布局。 但是,如果您显示表格数据(例如结果或什至是表格),请继续使用表格!

    • 我们采用的 Serverless 底层的技术是 Lambda 计算。Lambda 计算是在调用时才运行,我们的程序不是时刻在后台运行的,当我们的 HTTP API 请求到了 API Gateway 的时候,才会开始调用我们的 Lambda 函数。这个时候,我们的应用程序才正式开发运行。从启动到运行的这段时间,就是 Lambda 函数的冷启动时间。 据今年初 New Relic 的统计数据表明,La

    • 今天我开始学习ReactJS,一个小时后我就开始面对这个问题。。我想在页面上的div中插入一个有两行的组件。下面是我正在做的一个简化示例。 我有一个html: 渲染功能如下: 下面我调用渲染: 生成的HTML如下所示: 我不是一个非常高兴的问题,这个问题迫使我将所有内容都打包在一个div“DeadSimpleComponent”中。在没有显式DOM操作的情况下,最好且简单的解决方法是什么? 201

    • 让我们看一下使用两种不同的方式去计算单词的个数,第一种方式使用 reduceByKey 另外一种方式使用 groupByKey: val words = Array("one", "two", "two", "three", "three", "three") val wordPairsRDD = sc.parallelize(words).map(word => (word, 1)) val

    • 问题内容: 我有以下(也许是常见的)问题,此刻绝对使我感到困惑: 有几个生成的事件对象扩展了抽象类,我想将它们划分为Session Bean,例如 但是将来可能会有两种以上的事件类型,因此if- else将会很长,甚至可能无法读取。另外,在这种情况下,我认为这并不是真正的“最佳实践”。 我可以在类型中添加一个抽象方法,并让它们自行划分,但随后我必须在每个实体中注入特定的Session Bean。

    • 问题内容: 具有“ instanceof”操作链被认为是“代码异味”。标准答案是“使用多态性”。在这种情况下我该怎么办? 基类有许多子类。他们都不在我的控制之下。类似的情况是Java类Integer,Double,BigDecimal等。 我确实可以控制等。 我不想使用几行代码就能完成的代码。(有时,我制作了一个HashMap将映射到的实例,将映射到的实例,等等。但是今天我想要一些更简单的方法。)