如何在 Flutter 移动端、Web 端和窗口中添加条件导入?

Posted

技术标签:

【中文标题】如何在 Flutter 移动端、Web 端和窗口中添加条件导入?【英文标题】:How to add conditional imports across Flutter mobile,web and window? 【发布时间】:2021-08-28 10:12:31 【问题描述】:

我有 Flutter 应用程序,它为每个平台(移动、网络、窗口)使用不同的 webview 插件。 虽然我可以在webmobile 的基础上使用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 端和窗口中添加条件导入?的主要内容,如果未能解决你的问题,请参考以下文章

web移动端和PC端利用chrome同步开发调试

移动端和pc端,响应式设计布局

在嵌入式 Linux 设备上使用 Flutter 开发图形界面

在嵌入式 Linux 设备上使用 Flutter 开发图形界面

在嵌入式 Linux 设备上使用 Flutter 开发图形界面

前端js判断移动端和PC端方法