You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Flutter项目构建PRO与LITE两个不同版本?

在Flutter中区分PRO版和普通版的实现方案

下面是几种实用方案,帮你构建两个功能不同的版本:

方法一:通过dart-define传递编译参数

这是最简单的轻量方案,适合仅在代码层面区分功能的场景。

  1. 代码中加入版本判断
    在代码里通过编译环境变量判断是否为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专属功能'),
            ),
        ],
      );
    }
    
  2. 编译时指定版本
    编译普通版:

    flutter build apk
    # 或者显式声明
    flutter build apk --dart-define=IS_PRO=false
    

    编译PRO版:

    flutter build apk --dart-define=IS_PRO=true
    

方法二:使用Flutter Flavors(多环境风味)

如果需要区分包名、应用名称、图标甚至资源目录,这个方案更适合。

  1. 配置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"
            }
        }
    }
    
  2. 配置iOS端Flavors
    打开ios/Runner.xcworkspace,通过Xcode添加两个Configuration(比如Free和Pro),对应不同的应用名称、图标和包名;或者修改ios/Podfile支持Flavors。

  3. 代码中判断当前风味
    可以通过包名或第三方工具(比如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();
        }
      });
    }
    
  4. 编译对应版本
    普通版:

    flutter build apk --flavor free
    

    PRO版:

    flutter build apk --flavor pro
    

方法三:条件编译与模块拆分

如果PRO版有大量独立功能模块,可以单独拆分成package,仅在PRO版中引入:

  1. 拆分PRO专属模块
    把PRO功能封装成单独的Dart package,比如my_app_pro_features。

  2. 通过环境变量控制引入
    在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:24:31