Flutter环境变量管理插件envify的使用

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

Flutter环境变量管理插件Envify的使用

注意: Envify 已被弃用,推荐使用 Envied 作为替代。Envied 提供了更多的功能并且仍在积极维护中。如果你是第一次接触这类插件,请直接前往 Envied 的官方文档。

Envify简介

Envify 是一种更好且更安全的方式来处理 Flutter 中的环境变量。它通过代码生成的方式将 .env 文件中的环境变量转换为 Dart 代码中的常量表达式,从而解决了传统方法在安全性、加载时间和源码生成兼容性方面的问题。

目录

概述

对于一个简单的 .env 文件:

KEY=VALUE

以及一个类似下面定义的 Dart 类:

part 'env.g.dart';

@Envify()
abstract class Env {
    static const key = _Env.key;
}

Envify 将会生成 env.g.dart 文件,其中包含 _Env 类,并从 .env 文件中加载 KEY 的值。现在你可以使用 Env.key 来获取 VALUE

print(Env.key); // "VALUE"

安装

首先,在 pubspec.yaml 文件中添加 envifyenvify_generator 依赖项:

dependencies:
  envify: any

dev_dependencies:
  envify_generator: any
  build_runner: any

如果你还没有安装 build_runner,也需要一并添加。

使用

  1. 在项目的根目录下添加一个 .env 文件。该文件的语法和规则可以参考 dotenv rules
  2. 定义用于生成 API 的 Dart 文件(例如 lib/env/env.dart),建议将此文件放在 .gitignore 中以防止暴露环境变量。
// lib/env/env.dart

import 'package:envify/envify.dart';
part 'env.g.dart';

@Envify()
abstract class Env {
    static const key = _Env.key;
}
  1. 运行生成器:
# dart
pub run build_runner build
# flutter
flutter pub run build_runner build

提示: 别忘了将 .env 文件和 env.g.dart 添加到 .gitignore 文件中!

API文档

更改 .env 文件路径

你可以在 @Envify 注解中指定 .env 文件的路径,以便为不同的环境创建多个环境变量类。

@Envify(path: '.env.development')
abstract class DevEnv {}

@Envify(path: '.env.production')
abstract class ProdEnv {}

更改生成的类名

默认情况下,生成的类名为注解类名前加上一个下划线。你可以通过 name 字段自定义生成的类名。

@Envify(name: 'Secrets')
abstract class Env {
   static const key = _Secrets.key;
}

动机

传统的环境变量管理方式如 flutter_dotenv 存在以下问题:

  1. 环境变量容易暴露,因为它们存储在 APK 文件中;
  2. 加载环境变量需要时间,影响应用启动速度;
  3. 无法在编译时访问环境变量,限制了其在代码生成工具中的使用。

Envify 通过代码生成解决了这些问题,使环境变量更加安全且易于使用。

特性

  • 安全性:生成的代码经过混淆/编译过程,难以反向工程。
  • 灵活性:仅生成用户定义的键值对,便于跨项目共享环境变量。
  • 多环境支持:轻松切换不同环境文件,如 .env.production.env.development
  • 类型安全:支持 intdoublenumboolString 类型的解析。
  • 常量表达式:生成的字段为常量表达式,可用于代码生成和其他需要的地方。

致谢

感谢 json_serializable 和其他大型代码生成项目的贡献,使得 Envify 能够实现当前的功能和设计。


示例代码

你可以在这里查看完整的示例项目:Envify 示例


更多关于Flutter环境变量管理插件envify的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter环境变量管理插件envify的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用envify插件来管理环境变量的一个示例。envify插件可以帮助你在Flutter应用中方便地管理和使用不同环境的变量。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加envify依赖:

dependencies:
  flutter:
    sdk: flutter
  envify: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 创建环境文件

在项目的根目录下创建.env文件,用于存储环境变量。例如:

# .env
API_URL=https://dev.example.com/api
FEATURE_FLAG_NEW_UI=true

你还可以创建其他环境文件,比如.env.production.env.staging等,用于不同的环境配置。

3. 配置envify

pubspec.yaml中配置envify,指定要使用的环境文件。例如,如果你希望在开发环境中使用.env文件,可以这样做:

flutter:
  # 其他配置...
  plugins:
    - envify:
        .env: .env  # 指定开发环境使用的.env文件

4. 使用环境变量

在Flutter代码中,你可以通过Envify类来访问环境变量。首先,确保你已经导入了envify包:

import 'package:envify/envify.dart';

然后,你可以使用Envify().env['VARIABLE_NAME']来访问环境变量。例如:

void main() {
  // 初始化Envify
  Envify().init();

  // 访问环境变量
  String apiUrl = Envify().env['API_URL'] ?? 'https://default.example.com/api';
  bool featureFlagNewUI = Envify().env['FEATURE_FLAG_NEW_UI'] == 'true';

  runApp(MyApp(apiUrl: apiUrl, featureFlagNewUI: featureFlagNewUI));
}

class MyApp extends StatelessWidget {
  final String apiUrl;
  final bool featureFlagNewUI;

  MyApp({required this.apiUrl, required this.featureFlagNewUI});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // 应用的其他配置...
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Envify Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('API URL: $apiUrl'),
              Text('Feature Flag New UI: $featureFlagNewUI'),
            ],
          ),
        ),
      ),
    );
  }
}

5. 运行应用

确保你正在使用正确的环境文件(例如.env),然后运行你的Flutter应用:

flutter run

应用启动后,你应该能够在界面上看到从.env文件中读取的API URL和功能标志。

注意事项

  • 确保在访问环境变量之前调用Envify().init()
  • 环境变量的值默认是字符串类型,如果需要使用其他类型(如布尔值),你可能需要进行类型转换。
  • 在生产环境中,请确保你的环境文件不会被意外地提交到版本控制系统中(例如,将.env文件添加到.gitignore中)。

通过以上步骤,你就可以在Flutter项目中使用envify插件来管理环境变量了。

回到顶部