我有一个flutter应用程序,它为每个平台(移动、web、窗口(使用不同的webview插件
虽然我可以基于web
和mobile
的import
平台,但我无法为windows导入。
我已经尝试添加其他条件,如果它不是移动或网络,但它正在使用mobile
插件。
- 这就是我为网络和移动设备导入包的方式(工作(
import 'package:eam_flutter/form/mobileui.dart'
if (dart.library.html) 'package:eam_flutter/form/webui.dart'
as multiPlatform;
- 这就是我为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
环境变量指定为true
。package1
和类Caculator1
不会打包到apk或ipa中。
有关更多详细信息,请参阅我在这里写的答案。
因此,我们可以导入所有包,并使用const环境值来决定要导入哪些包。摇树机制足够聪明,可以移除未使用的部件。
查看此示例你需要创建两个文件一个用于web&另一个用于操作系统和进口的使用条件