如何分别为 Flutter web 和 mobile 添加包?

Chi*_*nnu 5 dart flutter flutter-web

我正在创建一个面向 Android/iOS 和 Web 的 Flutter 项目,有什么方法可以分别为 Flutter Mobile 和 Web 添加支持的包。例如,我在 Flutter 移动应用程序中使用 dart:io 包来保存文件,但在 Flutter web 中不支持它,因此对于 web,我使用 dart:js 包下载 web 应用程序中的文件。

对于 C#,我们只是使用条件符号,但 Flutter 我找不到任何解决方案。

问题是我无法在 main.dart 文件中导入这两个包。谁能帮我实现这一目标

lrn*_*lrn 7

Dart 具有条件导入,可以根据平台库的可用性进行调整。

这意味着您可以在您的包中创建一个使用 的库dart:io,另一个使用dart:js,然后导入其中任何一个受支持的库。

import "file_loader.dart" // Version which just throws UnsupportedError
  if (dart.library.io) "file_loader_io.dart"
  if (dart.library.js) "file_loader_js.dart";

// Use imported API.
Run Code Online (Sandbox Code Playgroud)

重要的部分是你给这些库提供相同的 API——相同的类型和相同的成员,以及相同的顶级函数——这样无论导入哪个库,使用它的代码仍然有效。

编译程序时,只会使用其中一个库,因此如果其他库不正确,您将不会收到警告。您应该在所有支持的平台上测试代码,只是为了确定。


tha*_*hnb 5

例如,您应该单独实现代码,my_ui_web.dart并且my_ui_mobile.dart

然后你可以使用 if 导入这些文件:

import 'package:my_awesome_app/my_ui_mobile.dart' 
    if (dart.library.html) 'package:my_awesome_app/my_ui_web.dart' 
    as myUI;
Run Code Online (Sandbox Code Playgroud)