【问题标题】:Flutter conditionnal import mobile vs desktopFlutter 条件导入移动端 vs 桌面端
【发布时间】:2021-06-24 15:44:03
【问题描述】:

在网络上导入与本地导入很容易

import '../wrappers/platform/platform_none.dart'
    if (dart.library.io) '../wrappers/platform/platform_io.dart'
    if (dart.library.js) '../wrappers/platform/platform_web.dart';

如果我想根据我是在移动设备 (iOS/Android) 上还是在桌面 (Linux/MacOS/Windows) 上导入不同的包怎么办?

如果没有条件导入,你怎么能通过其他方式实现呢?

【问题讨论】:

  • 您正在使用哪些特定的包,您希望在移动设备和桌面设备之间排除这些包?
  • move_to_background,将应用置于后台。当然,这对桌面没有意义,因此不受支持。
  • 但这是否会给您带来问题,或者您只是专注于应用程序大小?
  • 问题,我正在开发一个跨平台插件,所以因为条件导入而牺牲 3 个平台真是太可惜了。我确实找到了解决方法,但它基本上意味着复制插件的所有源文件-in 我正在使用,但这当然不是真正的解决方案。
  • 插件的本机代码仅针对其适用的特定平台进行编译。到处都只会包含 Dart 代码,而您上面提到的插件只有一个 16 行的 Dart 文件,包括空格和 cmets。排除与否的区别可以忽略不计。

标签: flutter import flutter-dependencies flutter-desktop


【解决方案1】:

没有办法做你所描述的;条件导入only support library-based conditions,移动和桌面支持的库没有区别。

【讨论】:

  • 理论上,dart 团队可以创建虚拟库来实现此目的。
  • 无论如何,很抱歉在经过大量研究后没有早点接受,你是对的,它不能用随附的库来完成。我仍然认为这很痛苦,但无论如何;)
  • @Lulupointu 你找到解决方法了吗?
  • @ValentinVignal 正如我在其中一条评论中所说,我的一个解决方案(只有一个 Android 版本的插件)是手动创建一个我需要的类的虚拟版本(它只返回错误) 然后使用条件导入。这不是最好的,但如果你真的需要的话,至少它可以工作,不管多么乏味
猜你喜欢
  • 2021-03-19
  • 2021-08-28
  • 2020-10-24
  • 2018-10-07
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
相关资源
最近更新 更多