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

优雅地处理Flutter Web平台上的移动专用插件

古扬
2023-03-14

我注意到flutter web不支持诸如< code>path_provider 、< code>firebase_messaging 、< code>google_fonts等Flutter插件(该插件仍处于测试阶段)。有没有人能提供一些关于如何在支持的平台上使用这个插件的见解,并防止他们在不支持的平台上破坏应用程序

    < li >在不受支持的平台上,是否有任何标准或文档化的方法来妥善处理插件? < li >在为不受支持的平台构建时,我可以从pubspec中排除插件吗,可能使用了某种包装? < li >为web构建时,一些dart插件附带的Android或iOS本机代码会发生什么情况?

共有1个答案

鲁峰
2023-03-14

您可以通过有条件的导入来实现这一点。这个答案提供了一个很好的方法。以下是那篇文章的要点:

核心思想如下。

  1. 创建一个抽象类来定义您通常需要使用的方法。
  2. 创建特定于扩展此抽象类的webandroid依赖项的实现。
  3. 创建一个存根,它公开一个方法来返回这个抽象实现的实例。这只是为了让飞镖分析工具开心。
  4. html" target="_blank">抽象类中导入此存根文件以及特定于mobileweb的条件导入。然后在其工厂构造函数中返回特定实现的实例。如果编写正确,这将由条件导入自动处理。

这个方法允许你基于平台进行这些导入,并适用于所有可能不支持所有可能的flutter平台的包(例如dart:html,dart:js,dart:js_util,dart:io)。这似乎是目前用相同的代码库处理不同平台的最佳方式。

据我所知,您不能有条件地从< code>pubspec.yaml中排除插件(当然我可能是错的),尽管这对于我前面提到的有条件导入来说是不必要的。

当您构建web时,您使用的插件中的任何原生Android或iOS代码都不会包含在内。这对于Android和iOS来说是完全一样的。在为Android构建时,在构建应用程序时根本不考虑iOS代码。构建颤振应用程序只编译dart代码。除了构建本机应用程序之外,它对本机代码没有任何特殊的作用。

 类似资料:
  • 让我们假设我们有这样一个用python编写的琐碎守护进程: 我们使用< code>start-stop-daemon对其进行守护,默认情况下,它会在< code> - stop上发送< code > SIGTERM (< code > TERM )信号。 假设当前执行的步骤是。此时我们正在发送信号。 发生的情况是执行立即终止。 我发现我可以使用<code>signal.signal(signal.

  • 问题内容: 有没有办法清理此(IMO)恐怖代码? 具体来说,我在谈论错误处理。能够一次性处理所有错误将是很好的。 问题答案:

  • 问题内容: 假设我们有一个用python编写的琐碎守护程序: 我们将它守护起来,默认使用它发送信号–。 假设当前执行的步骤是。此时此刻,我们正在发送TERM信号。 发生的情况是执行立即终止。 我发现我可以使用处理信号事件,但事实是它仍然会中断当前执行并将控制权传递给。 因此,我的问题是-是否可以不中断当前执行,而是TERM在单独的线程(?)中处理信号,以便能够进行设置,从而有机会优雅地停止运行?

  • 我的web应用程序是由对服务器端的大量Ajax调用组成的。每次客户登录我的站点时,登录页面将从服务器获取(JSON Web令牌)令牌,并将其作为存储在客户端。(我选择将其存储为cookie,是因为这是唯一让浏览器自动发送的方式,而且据说比HTML5网页存储更安全)。令牌中有一个字段描述令牌的过期日期。对于每个Ajax调用,都会发送令牌进行身份验证。 但是上面的方法有一个问题:“如何在客户端优雅地处

  • 问题内容: 我正在处理一个将文件附加到电子邮件的PHP表单,并试图妥善处理上传的文件太大的情况。 我了解到,其中有两个设置会影响文件上传的最大大小:和。 如果文件的大小超过,PHP会将文件的大小返回为0。我可以检查一下。 但是,如果超出了范围,我的脚本将以静默方式失败并返回空白表格。 有什么办法可以捕捉到此错误? 问题答案: 从文档中: 如果发布数据的大小大于post_max_size,则 $ _

  • 本文向大家介绍Spring Boot优雅地处理404异常问题,包括了Spring Boot优雅地处理404异常问题的使用技巧和注意事项,需要的朋友参考一下 背景 在使用SpringBoot的过程中,你肯定遇到过404错误。比如下面的代码: 当我们使用错误的请求地址(POST http://127.0.0.1:8888/hello/test1?id=98)进行请求时,会报下面的错误: 虽然上面的返回