dart 如何在Flutter移动的、Web端和Window端添加条件导入?

vsikbqxv  于 2023-06-19  发布在  Flutter
关注(0)|答案(5)|浏览(222)

我有Flutter应用程序,它使用不同的webview插件为每个平台(移动的,网络,窗口)。
虽然我能够基于webmobileimport平台,但我不能为windows导入。
我已经尝试添加其他条件,如果它不是移动的或网络,但它是采取mobile插件。
1.这就是我如何导入Web和移动的(工作)。

import 'package:eam_flutter/form/mobileui.dart'
    if (dart.library.html) 'package:eam_flutter/form/webui.dart'
    as multiPlatform;

1.这是我如何导入包的网页,移动的和窗口(不工作,它是显示移动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指定条件导入?

ykejflvf

ykejflvf1#

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

oxosxuxt

oxosxuxt2#

因为window没有条件导入支持,因为它属于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...
qgelzfjb

qgelzfjb3#

也许我们不再需要有条件的进口。看看下面的代码:

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环境变量指定为truepackage1Caculator1类不会打包到 apkipa 中。
更多细节,请看我在这里写的答案。
所以我们可以导入所有的包,并使用一个const环境值来决定要导入的包。摇动树木的机制足够智能,可以移除未使用的部分。

xpszyzbs

xpszyzbs4#

选中此example,您需要创建2个文件,一个用于Web,另一个用于操作系统,并在导入时使用条件

eufgjt7s

eufgjt7s5#

使用该包。

universal_html

相关问题