如何为Flutter项目构建PRO与LITE两个不同版本?
在Flutter中区分PRO版和普通版的实现方案
下面是几种实用方案,帮你构建两个功能不同的版本:
方法一:通过dart-define传递编译参数
这是最简单的轻量方案,适合仅在代码层面区分功能的场景。
代码中加入版本判断
在代码里通过编译环境变量判断是否为PRO版本,示例:// 定义常量,默认是普通版 const isPro = bool.fromEnvironment('IS_PRO', defaultValue: false); // 在UI或业务逻辑中使用 @override Widget build(BuildContext context) { return Column( children: [ // 普通版也有的基础组件 const Text('基础功能区'), // 仅PRO版显示的组件 if (isPro) ElevatedButton( onPressed: () => _showProFeature(), child: const Text('PRO专属功能'), ), ], ); }编译时指定版本
编译普通版:flutter build apk # 或者显式声明 flutter build apk --dart-define=IS_PRO=false编译PRO版:
flutter build apk --dart-define=IS_PRO=true
方法二:使用Flutter Flavors(多环境风味)
如果需要区分包名、应用名称、图标甚至资源目录,这个方案更适合。
配置Android端Flavors
修改android/app/build.gradle,添加风味配置:android { // 新增维度 flavorDimensions "appVersion" productFlavors { free { dimension "appVersion" // 普通版包名后缀 applicationIdSuffix ".free" // 普通版应用名称 resValue "string", "app_name", "我的应用" } pro { dimension "appVersion" applicationIdSuffix ".pro" resValue "string", "app_name", "我的应用 PRO" } } }配置iOS端Flavors
打开ios/Runner.xcworkspace,通过Xcode添加两个Configuration(比如Free和Pro),对应不同的应用名称、图标和包名;或者修改ios/Podfile支持Flavors。代码中判断当前风味
可以通过包名或第三方工具(比如package_info_plus)判断当前版本:import 'package:package_info_plus/package_info_plus.dart'; Future<String> getCurrentFlavor() async { final info = await PackageInfo.fromPlatform(); return info.packageName.contains('.pro') ? 'pro' : 'free'; } // 使用示例 void initState() { super.initState(); getCurrentFlavor().then((flavor) { if (flavor == 'pro') { _initProFeatures(); } }); }编译对应版本
普通版:flutter build apk --flavor freePRO版:
flutter build apk --flavor pro
方法三:条件编译与模块拆分
如果PRO版有大量独立功能模块,可以单独拆分成package,仅在PRO版中引入:
拆分PRO专属模块
把PRO功能封装成单独的Dart package,比如my_app_pro_features。通过环境变量控制引入
在pubspec.yaml中使用条件依赖:dependencies: # 普通版依赖 flutter: sdk: flutter # PRO版才引入的依赖 my_app_pro_features: path: ./my_app_pro_features condition: IS_PRO == true编译时同样通过
--dart-define=IS_PRO=true来启用依赖。
额外注意事项
- 资源区分:PRO版的专属图标、素材可以放在对应风味的资源目录,或者通过代码条件加载。
- 包体积优化:普通版要确保PRO代码不会被打包进去,使用
if (isPro)的条件判断会被Dart编译器自动剔除未使用的代码。 - 混淆配置:可以给PRO版单独开启代码混淆,提升安全性。
内容的提问来源于stack exchange,提问作者aguiadouro
相关产品推荐
相关产品推荐

