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

Kon*_*ash 23 import dart flutter flutter-web flutter-windows

我有 flutter 应用程序,它为每个平台(移动、网络、窗口)使用不同的 webview 插件。
虽然我能够import基于web和建立平台mobile,但我无法导入 Windows。

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

  1. 这就是我导入网络和移动包的方式(工作)。
import 'package:eam_flutter/form/mobileui.dart'
    if (dart.library.html) 'package:eam_flutter/form/webui.dart'
    as multiPlatform;   
Run Code Online (Sandbox Code Playgroud)
  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;
Run Code Online (Sandbox Code Playgroud)

如何为 Windows 指定条件导入?

smo*_*gan 20

对于发现此问题的其他人,请注意,接受的答案并不是所提出问题的答案。问题的答案是你不能。无法使用条件导入来获得移动设备和桌面设备之间的不同行为;请参阅Dart 团队的评论


cod*_*shi 7

因为 window 属于 dart io,所以没有条件导入支持。我有这个解决方法并且发现它有效。
我最终使用不同的包导入为每个平台创建文件。

import 'package:flutter/foundation.dart' show kIsWeb;
import 'dart:io' as io;
Run Code Online (Sandbox Code Playgroud)
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...
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这是对与所提出问题不同的问题的回答。问题是关于不同的“编译时”行为;这给出了不同的*运行时*行为。对于您想要后者的情况,这并不是真正的解决方法,而是正常的做法。对于前者(如果出于某种原因确实需要),它没有帮助,所以根本不是一个解决方法。 (5认同)
  • @KonTash这就是为什么通常更好地询问有关您试图解决的*问题*的问题,而不是如何实现您认为是问题解决方案的一个特定解决方案。如果您问如何在不同平台上运行不同的代码,这将是一个很好的答案。相反,现在有一个 SO 问题,其接受的答案不正确,将来可能会让其他人感到困惑。 (5认同)