搜索插件、代码仓与 APP 分类

插件详情v0.2.0

flutter_env_native

一个为原生平台提供编译时变量的插件/工具。

AndroidiOS
近 30 天下载
6880
喜欢数
37
Pub 分数
150

安装插件

flutter pub add flutter_env_native

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

flutter_env_native 是一个 Flutter 插件,可为原生 Android 和 iOS 平台启用编译时变量。它允许开发者在编译过程中将环境特定的值(如 API 密钥或配置标志)安全地嵌入到应用程序的原生代码中。这种方法通过避免敏感数据在运行时暴露来增强安全性。该包可无缝集成到现有的 Flutter 项目中,并通过专用的构建时机制支持平台特定的配置。

适合场景

  • 在原生构建中安全地管理 API 密钥
  • 在编译时配置特定于环境的设置
  • 与原生平台特定逻辑集成
  • 通过减少运行时密钥来增强应用安全
  • 简化在多个环境中的部署

主要特点

  • 编译时变量注入
  • 支持 Android 和 iOS 平台
  • 通过减少运行时密钥提升安全性
  • 与 Flutter 构建流程无缝集成
  • 平台特定的配置处理

适合对象

  • 注重应用安全的开发者
  • 管理多个部署环境的团队
  • 需要原生级别配置的项目
  • 使用敏感凭据的应用程序
  • 构建需要确定性配置的流水线

使用建议

  • 需要原生构建配置
  • 仅限编译时的值
  • 不适用于动态运行时更改
  • 可能增加构建复杂性
  • 依赖原生项目文件中的正确设置

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

flutter_env_native

pub package

A plugin/utility that provides compile-time variables for native platform.

This plugin/utility makes env variables set in --dart-define and --dart-define-from-file available to the native platforms.

🎖 Installing

dev_dependencies:
  flutter_env_native: ^0.2.0

🎮 Setup Guide

Define .env file

APP_NAME=batcave
APP_SUFFIX=.dev
MAPS_API_KEY=someKeyString

Pass .env file to flutter run/build via --dart-define-from-file=.env

[!WARNING] In iOS *.xcconfig has some limitations when it comes to variable values it treats the sequence // as a comment delimiter, then for example, https://example.com, will be https:// in the code, everything after // will be ignored. For solve omit the https:// while specifying the env variable and prepend the https:// in code, read more about the solution here.

Android Installation

:open_file_folder: android/app/build.gradle

:exclamation: DO NOT OMIT ANY OF THE FOLLOWING CHANGES :exclamation:

// flutter_env_native
+Project flutter_env_native = project(':flutter_env_native')
+apply from: "${flutter_env_native.projectDir}/envConfig.gradle"
Usage in android manifest file
:open_file_folder: android/app/src/main/AndroidManifest.xml:

:exclamation: DO NOT OMIT ANY OF THE FOLLOWING CHANGES :exclamation:

defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId = "tech.mastersam.flutter_env_example"
        // You can update the following values to match your application needs.
        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
        minSdk = flutter.minSdkVersion
        targetSdk = flutter.targetSdkVersion
        versionCode = flutterVersionCode.toInteger()
        versionName = flutterVersionName

+       resValue "string", "app_name", APP_NAME ?: 'default_name'
    }

The above create a string resource with variable app_name set to the value of APP_NAME

<application
        android:label="flutter_env_example"
+       android:name="@string/app_name"
        android:icon="@mipmap/ic_launcher">

The above sets the android:name to the value of app_name in the string resource. The same applies for other .xml files.

Usage in kotlin file
:open_file_folder: android/app/src/main/AndroidManifest.xml:

:exclamation: DO NOT OMIT ANY OF THE FOLLOWING CHANGES :exclamation:

defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId = "tech.mastersam.flutter_env_example"
        // You can update the following values to match your application needs.
        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
        minSdk = flutter.minSdkVersion
        targetSdk = flutter.targetSdkVersion
        versionCode = flutterVersionCode.toInteger()
        versionName = flutterVersionName

+       buildConfigField "String", "APP_NAME", "\"${APP_NAME ?: 'default_name'}\""
    }

The above creates the BuildConfig field APP_NAME and sets its value to the env variable APP_NAME where available and defaults it to 'default_name'

:open_file_folder: android/.../MainActivity.kt:

:exclamation: DO NOT OMIT ANY OF THE FOLLOWING CHANGES :exclamation:

package tech.mastersam.flutter_env_example

import android.os.Bundle
import android.util.Log
import android.widget.Toast
import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity(){
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

         // Access BuildConfig values
+        val appName = BuildConfig.APP_NAME

         // Sample usage to display a toast message
         Toast.makeText(this, "APP_NAME: $appName", Toast.LENGTH_LONG).show()
    }
}

iOS Installation

:open_file_folder: ios/Podfile

:exclamation: DO NOT OMIT ANY OF THE FOLLOWING CHANGES :exclamation:

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)

+ # Run the setup_env.sh script from the plugin
+ system("sh \"#{flutter_env_plugin_path}\" \"#{root_dir}\"")
end
Usage in plist file
:open_file_folder: info.plist:

Reference the env variable directly as defined in the .env file

<key>CFBundleDisplayName</key>
<string>$(APP_NAME)</string>
Usage in swift file
:open_file_folder: AppDelegate.swift: (any swift file of choice)
+ var app_name: String = Bundle.main.infoDictionary?["APP_NAME"] as? String ?? ""
  NSLog("\nHere's your app name -> \(app_name)")

[!NOTE] Don't forget the env variable added in info.plist so you can access it in the swift file.

所属分类

源码仓库

使用此插件的项目

暂无相关数据。