是否可以在 Flutter 中有条件地编译代码?
Is it possible to compile code conditional in Flutter?
我想使用与 android 不同的依赖项为 Web 编译我的 Flutter 代码。没有同时支持两者的依赖项,所以我需要找到另一种方法。
我在网上找到了 build.yaml,但我还不太明白。也许这对我来说是正确的选择,有人可以帮助我更好地理解它(谢谢 :D)。
它应该在编译阶段分开,因为如果我为 web 编译,android 依赖项会阻止编译。
Skipping compiling pay_balance|lib/main_web_entrypoint.dart with ddc because some of its
transitive libraries have sdk dependencies that not supported on this platform:
firebase_core|lib/firebase_core.dart
https://github.com/dart-lang/build/blob/master/docs/faq.md#how-can-i-resolve-skipped-compiling-warnings
最终结果应该是一个代码,它对 web 和 android 具有不同的依赖关系,而不是编译另一个。因此,当我为 web 开发时,不应编译 android 依赖项!
您必须如上所述使用条件导入。我最近这样做了,是这样的:
您需要创建一些冗长的文件,但还算不错。
my_service.dart
- 用于导入
my_service_main.dart
- 由于 Dart 导入的当前工作方式,将用于存根初始导入
my_service_web.dart
- 将导入特定于 Web 的库,例如 dart:html
并执行您要实现的内容的 Web 版本
my_service_mobile.dart
- 将导入 iOS/Android 库,例如 dart:io
并做移动版本
- 创建这 4 个文件
- 确保你的方法在每个方法中都被命名为相同的东西
throw UnsupportedError
来自 "main" 版本
- 处理进口
综合起来
// my_service_main.dart
void doTheThing() => throw UnsupportedError('doTheThing Unsupported')
// my_service_web.dart
import 'dart:html' as html;
void doTheThing(){
// do your thing, use `html`, etc
}
//my_service_mobile.dart
import 'dart:io';
void doTheThing(){
// do your thing using dart:io
}
// The export file
// my_service.dart
export 'my_service_main.dart'
if (dart.library.js) 'my_service_web.dart'
if (dart.library.io) 'my_service_mobile.dart'
// Then in your code you can import
import 'my_service.dart';
void main() {
doTheThing();
}
我想使用与 android 不同的依赖项为 Web 编译我的 Flutter 代码。没有同时支持两者的依赖项,所以我需要找到另一种方法。
我在网上找到了 build.yaml,但我还不太明白。也许这对我来说是正确的选择,有人可以帮助我更好地理解它(谢谢 :D)。
它应该在编译阶段分开,因为如果我为 web 编译,android 依赖项会阻止编译。
Skipping compiling pay_balance|lib/main_web_entrypoint.dart with ddc because some of its
transitive libraries have sdk dependencies that not supported on this platform:
firebase_core|lib/firebase_core.dart
https://github.com/dart-lang/build/blob/master/docs/faq.md#how-can-i-resolve-skipped-compiling-warnings
最终结果应该是一个代码,它对 web 和 android 具有不同的依赖关系,而不是编译另一个。因此,当我为 web 开发时,不应编译 android 依赖项!
您必须如上所述使用条件导入。我最近这样做了,是这样的:
您需要创建一些冗长的文件,但还算不错。
my_service.dart
- 用于导入
my_service_main.dart
- 由于 Dart 导入的当前工作方式,将用于存根初始导入
my_service_web.dart
- 将导入特定于 Web 的库,例如 dart:html
并执行您要实现的内容的 Web 版本
my_service_mobile.dart
- 将导入 iOS/Android 库,例如 dart:io
并做移动版本
- 创建这 4 个文件
- 确保你的方法在每个方法中都被命名为相同的东西
throw UnsupportedError
来自 "main" 版本- 处理进口
综合起来
// my_service_main.dart
void doTheThing() => throw UnsupportedError('doTheThing Unsupported')
// my_service_web.dart
import 'dart:html' as html;
void doTheThing(){
// do your thing, use `html`, etc
}
//my_service_mobile.dart
import 'dart:io';
void doTheThing(){
// do your thing using dart:io
}
// The export file
// my_service.dart
export 'my_service_main.dart'
if (dart.library.js) 'my_service_web.dart'
if (dart.library.io) 'my_service_mobile.dart'
// Then in your code you can import
import 'my_service.dart';
void main() {
doTheThing();
}