Flutter项目配置管理插件flutter_flavor的使用
Flutter项目配置管理插件flutter_flavor的使用
flutter_flavor
flutter_flavor
插件帮助我们为应用程序的不同实例创建构建。例如,我们可以为开发环境、生产环境和演示环境创建不同的flavor。通过这种方式,可以在发布到App Store和Google Play之前拥有应用程序的不同版本。
flutter_flavor
允许快速配置和定义每个flavor的动态变量。flavors
及其名称由开发者或开发团队动态定义。在flavor配置中可以设置每个flavor的name
、color
以及其横幅的location
。当属性name
未定义或为空时,横幅将被隐藏。
你还可以独立配置横幅。上述属性是全局配置在FlavorConfig
中的,但可以在FlavorBanner
中更改。
Screenshot
PROD | DEV | 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.dart
和app.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
更多关于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 的配置,比如 CFBundleIdentifier
、CFBundleDisplayName
等。
Android 配置
android/app/src/dev/
android/app/src/staging/
android/app/src/prod/
在每个 flavor 文件夹中,你可以有 AndroidManifest.xml
和 res/
文件夹来包含特定的资源文件。
3. 修改 build.gradle
和 AppDelegate.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.swift
或 ios/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 配置。