Flutter项目配置管理插件flutter_flavor的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter项目配置管理插件flutter_flavor的使用

flutter_flavor

pub package Star on Github License: MIT

flutter_flavor 插件帮助我们为应用程序的不同实例创建构建。例如,我们可以为开发环境、生产环境和演示环境创建不同的flavor。通过这种方式,可以在发布到App Store和Google Play之前拥有应用程序的不同版本。

flutter_flavor 允许快速配置和定义每个flavor的动态变量。flavors及其名称由开发者或开发团队动态定义。在flavor配置中可以设置每个flavor的namecolor以及其横幅的location。当属性name未定义或为空时,横幅将被隐藏。

你还可以独立配置横幅。上述属性是全局配置在FlavorConfig中的,但可以在FlavorBanner中更改。

Screenshot

PROD DEV TEST
Screenshot Prod Screenshot Dev Screenshot Test

注意 默认情况下横幅显示在BannerLocation.topStart,并且仅在配置的name属性已定义且非空时可见。

Getting Started

Adding package

pubspec.yaml文件中添加:

dependencies:
  flutter_flavor: ^3.1.4

Importing package

在需要使用的dart文件中导入:

import 'package:flutter_flavor/flutter_flavor.dart';

Configuring

配置一个flavor如下:

FlavorConfig(
    name: "DEVELOP",
    color: Colors.red,
    location: BannerLocation.bottomStart,
    variables: {
        "counter": 0,
        "baseUrl": "https://www.example.com",
    }
);

Using variables

使用配置好的变量:

int _counter = FlavorConfig.instance.variables["counter"];

Example

下面是一个完整的示例demo,包括main.dartapp.dart两个文件的内容。

Main

import 'package:flutter/material.dart';
import 'package:flutter_flavor/flutter_flavor.dart';

import 'app.dart';

void main() {
  FlavorConfig(
    name: "DEVELOP",
    color: Colors.red,
    location: BannerLocation.topStart,
    variables: {
      "counter": 5,
      "baseUrl": "https://www.example2.com",
    },
  );

  runApp(const MyApp());
}

App

import 'package:flutter/material.dart';
import 'package:flutter_flavor/flutter_flavor.dart';

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return FlavorBanner(
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
          useMaterial3: true,
        ),
        home: const MyHomePage(title: 'Flutter Demo Home Page'),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

VSCode Configuration

在工作区中创建.vscode文件夹(如果不存在的话),然后在该文件夹内创建launch.json文件并配置内容如下:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "PROD-Flavor",
      "program": "[project-folder]/lib/main_prod.dart",
      "request": "launch",
      "type": "dart"
    },
    {
      "name": "DEV-Flavor",
      "program": "[project-folder]/lib/main_dev.dart",
      "request": "launch",
      "type": "dart"
    }
  ]
}

更多信息请访问:

License

MIT License


更多关于Flutter项目配置管理插件flutter_flavor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter项目配置管理插件flutter_flavor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中,flutter_flavor 插件(注意:实际上更常用的插件是 flutter_flavorizr 或直接通过 flavor 配置管理多环境,因为 flutter_flavor 可能不是一个广为人知的官方或主流插件)可以帮助你管理不同环境的配置,比如开发(dev)、测试(staging)和生产(prod)环境。虽然 flutter_flavor 不是一个标准或广泛认可的插件名,但我会基于 Flutter 的 flavor 配置来展示如何实现多环境管理。

Flutter 本身支持通过 flavor 配置来管理不同的构建变体。以下是如何在 Flutter 项目中设置和使用 flavor 配置的示例。

1. 修改 pubspec.yaml

首先,你需要在 pubspec.yaml 文件中定义你的 flavor。虽然 pubspec.yaml 本身不直接支持 flavor 配置,但你可以通过创建不同的构建配置来达到类似效果。

2. 创建 Flutter 构建配置

在项目的根目录下,创建一个名为 ios/android/ 的并行配置文件夹(如果它们还不存在),并在其中添加特定于 flavor 的配置文件。

iOS 配置

  • ios/Runner/Info-dev.plist
  • ios/Runner/Info-staging.plist
  • ios/Runner/Info-prod.plist

每个 .plist 文件将包含特定于该 flavor 的配置,比如 CFBundleIdentifierCFBundleDisplayName 等。

Android 配置

  • android/app/src/dev/
  • android/app/src/staging/
  • android/app/src/prod/

在每个 flavor 文件夹中,你可以有 AndroidManifest.xmlres/ 文件夹来包含特定的资源文件。

3. 修改 build.gradleAppDelegate.swift/MainActivity.kt

Android

android/app/build.gradle 文件中,配置 productFlavors:

android {
    ...
    flavorDimensions "version"
    productFlavors {
        dev {
            dimension "version"
            applicationIdSuffix ".dev"
            versionNameSuffix "-dev"
        }
        staging {
            dimension "version"
            applicationIdSuffix ".staging"
            versionNameSuffix "-staging"
        }
        prod {
            dimension "version"
        }
    }
}

iOS

ios/Runner/AppDelegate.swiftios/Runner/MainActivity.kt(对于 Kotlin)中,你可以根据当前的 flavor 配置来动态设置一些参数。例如,在 AppDelegate.swift 中:

import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
    override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        let flavor = ProcessInfo.processInfo.environment["FLUTTER_FLAVOR"] ?? "prod"
        
        switch flavor {
        case "dev":
            // 设置开发环境的配置
            break
        case "staging":
            // 设置测试环境的配置
            break
        case "prod":
            // 设置生产环境的配置
            break
        default:
            break
        }
        
        GeneratedPluginRegistrant.register(with: self)
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }
}

注意:在 iOS 上,你需要确保在 Xcode 的 Scheme 配置中正确设置了 Build Configurations 以匹配你的 flavor。

4. 构建命令

使用以下命令来构建特定 flavor 的应用:

flutter build ios --flavor dev
flutter build ios --flavor staging
flutter build ios --flavor prod

flutter build apk --flavor dev -t lib/main_dev.dart
flutter build apk --flavor staging -t lib/main_staging.dart
flutter build apk --flavor prod -t lib/main.dart

注意:在 Android 上,你可能需要为每个 flavor 指定一个入口文件(如果它们有不同的初始化逻辑)。

结论

虽然 flutter_flavor 不是一个标准插件名,但 Flutter 本身提供了强大的 flavor 配置功能,允许你根据不同的环境构建不同的应用变体。上述步骤展示了如何在 Flutter 项目中设置和使用这些 flavor 配置。

回到顶部