Flutter环境变量管理插件flutter_env_native的使用
Flutter环境变量管理插件flutter_env_native的使用
简介
flutter_env_native
是一个用于在Flutter项目中为原生平台提供编译时变量的插件/工具。它使得通过 --dart-define
和 --dart-define-from-file
设置的环境变量可以被原生平台访问。
安装
在pubspec.yaml
文件中添加依赖:
dev_dependencies:
flutter_env_native: ^0.1.0
设置指南
定义.env文件
创建一个.env
文件,用于定义环境变量:
APP_NAME=batcave
APP_SUFFIX=.dev
MAPS_API_KEY=someKeyString
通过命令行参数传递给Flutter运行或构建命令:
flutter run --dart-define-from-file=.env
Android安装
修改android/app/build.gradle
确保包含以下内容:
// flutter_env_native
Project flutter_env_native = project(':flutter_env_native')
apply from: "${flutter_env_native.projectDir}/envConfig.gradle"
在AndroidManifest.xml中使用
defaultConfig {
applicationId = "tech.mastersam.flutter_env_example"
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutterVersionCode.toInteger()
versionName = flutterVersionName
resValue "string", "app_name", APP_NAME ?: 'default_name'
}
<application
android:label="flutter_env_example"
android:name="@string/app_name"
android:icon="@mipmap/ic_launcher">
</application>
在Kotlin文件中使用
修改build.gradle
中的defaultConfig
部分以创建BuildConfig字段:
buildConfigField "String", "APP_NAME", "\"${APP_NAME ?: 'default_name'}\""
然后可以在MainActivity.kt
中访问这些值:
class MainActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val appName = BuildConfig.APP_NAME
Toast.makeText(this, "APP_NAME: $appName", Toast.LENGTH_LONG).show()
}
}
iOS安装
修改ios/Podfile
添加以下代码段:
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
flutter_env_plugin_path = File.join(Dir.pwd, '.symlinks', 'plugins', 'flutter_env_native', 'ios', 'setup_env.sh')
root_dir = File.expand_path('..', Dir.pwd)
system("sh \"#{flutter_env_plugin_path}\" \"#{root_dir}\"")
end
在Info.plist中使用
直接引用.env
文件中定义的环境变量:
<key>CFBundleDisplayName</key>
<string>$(APP_NAME)</string>
在Swift文件中使用
例如,在AppDelegate.swift
或其他Swift文件中:
var app_name: String = Bundle.main.infoDictionary?["APP_NAME"] as? String ?? ""
NSLog("\nHere's your app name -> \(app_name)")
示例代码
以下是使用flutter_env_native
读取环境变量并在Flutter应用中显示的完整示例:
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
// 使用const构造函数从环境变量中获取字符串值
String name = const String.fromEnvironment("APP_NAME");
String suffix = const String.fromEnvironment("APP_SUFFIX");
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('name: $name\n'),
Text('suffix: $suffix\n'),
],
),
),
),
);
}
}
以上就是flutter_env_native
插件的基本使用方法和一个完整的示例演示。希望这能帮助你更好地理解和使用这个有用的工具!
更多关于Flutter环境变量管理插件flutter_env_native的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter环境变量管理插件flutter_env_native的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 flutter_env_native
插件来管理 Flutter 应用中的环境变量的代码案例。flutter_env_native
插件允许你根据不同的构建变体(如开发、测试、生产)来管理不同的环境变量。
1. 添加依赖
首先,在你的 Flutter 项目的 pubspec.yaml
文件中添加 flutter_env_native
依赖:
dependencies:
flutter:
sdk: flutter
flutter_env_native: ^x.y.z # 请替换为最新版本号
然后在项目根目录下运行 flutter pub get
来获取依赖。
2. 配置环境变量
接下来,你需要在项目根目录下创建一个 .env
文件来定义你的环境变量。例如:
# .env (开发环境)
API_BASE_URL=https://dev.api.example.com
FEATURE_FLAG_A=true
你还可以为不同的构建变体创建不同的 .env
文件,比如 .env.production
:
# .env.production (生产环境)
API_BASE_URL=https://api.example.com
FEATURE_FLAG_A=false
3. 更新 build.gradle
文件
在 Android 的 app/build.gradle
文件中,你需要配置任务来根据构建变体复制相应的 .env
文件。以下是一个示例配置:
android {
...
applicationVariants.all { variant ->
def buildType = variant.buildType.name
def isRelease = buildType == 'release'
def envFile = isRelease ? ".env.production" : ".env"
def envFilePath = file(envFile)
if (envFilePath.exists()) {
def properties = new Properties()
properties.load(new FileInputStream(envFilePath))
variant.mergedFlavor.extraInfo.putAll(properties as Map<String, Object>)
// 将环境变量写入一个生成的文件中,供 Flutter 读取
def outputFile = file("${buildDir}/generated/res/raw/env_${variant.name}.properties")
outputFile.parentFile.mkdirs()
properties.store(outputFile.newWriter(), null)
variant.mergeResources.doLast {
copy {
from outputFile
into "${buildDir}/intermediates/merged_assets/${variant.dirName}/out/flutter_assets"
rename { "env.properties" }
}
}
}
}
}
4. 在 Flutter 中读取环境变量
在 Flutter 代码中,你可以使用 flutter_env_native
插件来读取这些环境变量。首先,确保你已经导入了插件:
import 'package:flutter_env_native/flutter_env_native.dart';
然后,你可以在任何地方读取环境变量,例如:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化插件并加载环境变量
await FlutterEnvNative.init();
// 读取环境变量
String apiBaseUrl = FlutterEnvNative.env['API_BASE_URL'] ?? 'https://default.api.example.com';
bool featureFlagA = FlutterEnvNative.env['FEATURE_FLAG_A'] == 'true';
print('API Base URL: $apiBaseUrl');
print('Feature Flag A: $featureFlagA');
runApp(MyApp(apiBaseUrl: apiBaseUrl, featureFlagA: featureFlagA));
}
class MyApp extends StatelessWidget {
final String apiBaseUrl;
final bool featureFlagA;
MyApp({required this.apiBaseUrl, required this.featureFlagA});
@override
Widget build(BuildContext context) {
// 你的应用逻辑
return MaterialApp(
// ...
);
}
}
5. 构建和运行
现在,你可以使用不同的构建命令来构建你的 Flutter 应用,例如:
flutter run --release # 使用生产环境变量
flutter run # 使用开发环境变量(默认)
这样,flutter_env_native
插件就会根据构建变体加载相应的 .env
文件,并在 Flutter 应用中提供这些环境变量。