如何在 Flutter 移动端、Web 端和窗口中添加条件导入?
Posted
技术标签:
【中文标题】如何在 Flutter 移动端、Web 端和窗口中添加条件导入?【英文标题】:How to add conditional imports across Flutter mobile,web and window? 【发布时间】:2021-08-28 10:12:31 【问题描述】:我有 Flutter 应用程序,它为每个平台(移动、网络、窗口)使用不同的 webview 插件。
虽然我可以在web
和mobile
的基础上使用import
平台,但我无法为Windows 导入。
如果不是移动设备或网络,我尝试添加 else 条件,但它正在使用mobile
插件。
-
这就是我为 Web 和移动 (工作) 导入包的方式。
import 'package:eam_flutter/form/mobileui.dart'
if (dart.library.html) 'package:eam_flutter/form/webui.dart'
as multiPlatform;
-
这是我为 web、移动和 windows 导入包的方式(不工作,它显示移动 webview 异常,因为它不支持桌面)。
import 'package:eam_flutter/form/windowui.dart'
if (dart.library.html) 'package:eam_flutter/form/webui.dart'
if (dart.library.io) 'package:eam_flutter/form/mobileui.dart'
as multiPlatform;
如何为 windows 指定条件导入?
【问题讨论】:
你不能;见***.com/questions/62724798/… @smorgan 有什么解决方法吗? @codingwithtashi 解决方法是什么?这个问题没有说明要解决的问题,只是一个期望的解决方案,而那个特定的解决方案是不可能的。潜在问题可能还有其他解决方案。 @smorgan 我的意思是,如何让它在没有平台错误的情况下工作,但没关系我让它工作。谢谢 【参考方案1】:对于发现此问题的任何其他人,请注意,接受的答案不是对所提出问题的答案。所问问题的答案是你不能。没有办法使用条件导入来获得移动和桌面之间的不同行为;见this comment from the Dart team。
【讨论】:
【参考方案2】:由于窗口属于 dart io,因此没有条件导入支持。 我有这个解决方法,发现它有效。 我最终使用不同的包导入为每个平台创建文件。
import 'package:flutter/foundation.dart' show kIsWeb;
import 'dart:io' as io;
if(kIsWeb)
return WebPage(); //your web page with web package import in it
else if (!kIsWeb && io.Platform.isWindows)
return WindowsPage(); //your window page with window package import in it
else if(!kIsWeb && io.Platform.isandroid)
return AndroidPage(); //your android page with android package import in it
//you can add others condition...
【讨论】:
请注意,这是对不同问题的回答。问题是关于具有不同的 compile-time 行为;这给出了不同的 runtime 行为。对于您想要后者的情况,这并不是真正的解决方法,这是正常的做法。对于前者(如果出于某种原因实际需要),它没有帮助,所以根本不是一种解决方法。 @smorgan,谢谢。使用给定的代码,我可以避免遇到的问题。我想我应该这样做,因为 windows 没有条件导入 @KonTash 这就是为什么询问有关您尝试解决的问题的问题通常要好得多,而不是如何实施您认为是解决方案的特定解决方案到问题。如果您问如何在不同平台上运行不同的代码,这将是一个很好的答案。相反,现在有一个 SO 问题,其答案不正确,将来可能会混淆其他人。以上是关于如何在 Flutter 移动端、Web 端和窗口中添加条件导入?的主要内容,如果未能解决你的问题,请参考以下文章
在嵌入式 Linux 设备上使用 Flutter 开发图形界面
在嵌入式 Linux 设备上使用 Flutter 开发图形界面