我们知道,在Flutter中可以用 Platform.operatingSystem 实现平台差异代码,但它有一些不足:
- 一部分插件在web或windows平台无法编译,但在其它平台却要用到它;
- 将所有代码都一起编译(哪怕是当前平台不需要的),增加了安装包体积;
- 需要对代码实现多渠道发布,不同渠道使用不同代码或插件。
为了解决上述问题,我实现了一个宏定义工具,可以像类似C语言那样在dart代码中添加#ifdef #else,具体使用方法如下
1.在main.dart中添加宏定义
// #ifdef WEB
/* print('Hello web!');*/
// #else
print("Hello windows");
// #endif
2.在pobspec.yaml中添加宏定义,并实现多个宏判断
#ifdef ANDROID IOS APP
flutter_bugly: ^0.4.3 #集成bugly 用于更新
#endif
注意:#ifdef代码需要写入单行注释中,因为dart本身并不支持,在编译代码前运行命令,转换所有宏:
例如,编译Windows平台前,运行命令
definetool.exe -define WINDOWS
编译安卓前,运行命令:
definetool.exe -define ANDROID
这个工具本身是用dart写的,所以支持linux、windows、mac平台
下载地址:
https://github.com/fengdeyingzi/definetool/releases/tag/v1.3