如何在Flutter手机、网络和窗口中添加有条件的导入



我有一个flutter应用程序,它为每个平台(移动、web、窗口(使用不同的webview插件
虽然我可以基于webmobileimport平台,但我无法为windows导入。

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

  1. 这就是我为网络和移动设备导入包的方式(工作(
import 'package:eam_flutter/form/mobileui.dart'
if (dart.library.html) 'package:eam_flutter/form/webui.dart'
as multiPlatform;   
  1. 这就是我为web、移动和windows导入包的方式(不工作,它显示移动web视图异常,因为它不支持桌面(
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;

如何为窗口指定条件导入?

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

由于windows属于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...

请使用该包。

universal_html

也许我们不再需要条件导入了。看看下面的代码:

import 'package:package1/package1.dart';
import 'package:package2/package2.dart';
const keepFunc1 = bool.fromEnvironment('KEEP_FUNC1');
dynamic result2;
void main() {
if (keepFunc1) {
result2 = Calculator1()..addOne(1);
} else {
result2 = Calculator2()..addOne(1);
}
runApp(const MyApp());
}

如果未将KEEP_FUNC1环境变量指定为truepackage1和类Caculator1不会打包到apkipa中。

有关更多详细信息,请参阅我在这里写的答案。

因此,我们可以导入所有包,并使用const环境值来决定要导入哪些包。摇树机制足够聪明,可以移除未使用的部件。

查看此示例你需要创建两个文件一个用于web&另一个用于操作系统和进口的使用条件

最新更新