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

我有 Flutter 应用程序,它为每个平台(移动、网络、窗口)使用不同的 webview 插件。
虽然我可以在webmobile 的基础上使用import 平台,但我无法为Windows 导入。

如果不是移动设备或网络,我尝试添加 else 条件,但它正在使用mobile 插件。

  1. 这就是我为 Web 和移动 (工作) 导入包的方式。
import 'package:eam_flutter/form/mobileui.dart'
    if (dart.library.html) 'package:eam_flutter/form/webui.dart'
    as multiPlatform;   
  1. 这是我为 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 指定条件导入?

【问题讨论】:

  • @smorgan 有什么解决方法吗?
  • @codingwithtashi 解决方法是什么?这个问题没有说明要解决的问题,只是一个期望的解决方案,而那个特定的解决方案是不可能的。潜在问题可能还有其他解决方案。
  • @smorgan 我的意思是,如何让它在没有平台错误的情况下工作,但没关系我让它工作。谢谢

标签: flutter dart import flutter-web flutter-windows


【解决方案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 问题,其答案不正确,将来可能会混淆其他人。
    猜你喜欢
    • 2021-06-24
    • 2021-11-27
    • 2021-01-18
    • 2020-02-28
    • 2020-04-27
    • 1970-01-01
    • 2011-08-29
    • 2011-03-06
    相关资源
    最近更新 更多