以下步骤使我能够从同一个 .env 文件中的颤振代码、android 代码和 ios 代码访问我的 env 变量:
1.通过添加到项目的pubspec.yaml 文件中来安装包flutter_config,如下所示
dependencies:
flutter_config: ^1.0.8
2.在项目的根目录下创建一个.env 文件,并将环境变量添加到其中
GOOGLE_MAPS_API_KEY=googlemapsapikey
FABRIC_ID=abcdefgh
3.在你的主函数中初始化插件
import 'package:flutter_config/flutter_config.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized(); // Required by FlutterConfig
await FlutterConfig.loadEnvVariables();
runApp(MyApp());
}
4.现在在你的 dart 代码中的任何地方访问你的环境变量
import 'package:flutter_config/flutter_config.dart';
FlutterConfig.get('FABRIC_ID')
- 在项目的 android 文件中访问环境变量。
首先,您需要手动将插件应用到您的应用程序,来自android/app/build.gradle:
正下方apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
添加以下行:
apply from: project(':flutter_config').projectDir.getPath() + "/dotenv.gradle"
在我的情况下,我需要访问 AndroidManifest.xml 文件中的 google maps api 密钥,例如
`<meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/GOOGLE_MAPS_API_KEY" />`
您还可以访问 gradle 文件和 Java/Kotlin 代码中的环境变量。更多详情请参考docs
6.从您的项目 ios 文件中访问您的环境变量:
在我的情况下,我需要从 AppDelegate.swift 访问 maps api 密钥,比如
import flutter_config
FlutterConfigPlugin.env(for: "GOOGLE_MAPS_API_KEY")
还可以从您的 Obj-C 类、构建设置和 Info.plist 中访问您的环境变量。更多详情请参考docs
构建发布版本
在构建您的 apk 以供发布时,R8 代码收缩器会混淆 BuildConfig 类,该类包含所有 env 变量,从而导致所有 env 变量为空。为了防止这种情况发生,必须做到以下几点:
- 将文件 android/app/proguard-rules.pro 添加到您应用的项目中。
- 将以下行添加到新创建的 proguard-rules.pro 文件中:
-keep class com.yourcompany.app.BuildConfig { *; }
com.yourcompany.app 应替换为您的应用程序包名称。