Flutter 条件导入移动端 vs 桌面端
Posted
技术标签:
【中文标题】Flutter 条件导入移动端 vs 桌面端【英文标题】:Flutter conditionnal import mobile vs desktop 【发布时间】: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。排除与否的区别可以忽略不计。 【参考方案1】:没有办法做你所描述的;条件导入only support library-based conditions,移动和桌面支持的库没有区别。
【讨论】:
理论上,dart 团队可以创建虚拟库来实现此目的。 无论如何,很抱歉在经过大量研究后没有早点接受,你是对的,它不能用随附的库来完成。我仍然认为这很痛苦,但无论如何;) @Lulupointu 你找到解决方法了吗? @ValentinVignal 正如我在其中一条评论中所说,我的一个解决方案(只有一个 Android 版本的插件)是手动创建一个我需要的类的虚拟版本(它只返回错误) 然后使用条件导入。这不是最好的,但如果你真的需要的话,至少它可以工作,不管多么乏味以上是关于Flutter 条件导入移动端 vs 桌面端的主要内容,如果未能解决你的问题,请参考以下文章