Flutter环境配置插件envied的使用

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

Flutter环境配置插件envied的使用

概述

envied 是一个用于在Dart/Flutter项目中更干净地处理环境变量的工具。它允许你通过 .env 文件或系统环境变量来定义和访问你的环境变量,并且可以与 build_runner 一起工作来自动生成代码。

安装

为了使用 envied,你需要安装以下三个包:

  • envied:包含注解的包。
  • envied_generator:代码生成器。
  • build_runner:运行代码生成器的工具。

Flutter项目

$ flutter pub add envied
$ flutter pub add --dev envied_generator
$ flutter pub add --dev build_runner

Dart项目

$ dart pub add envied
$ dart pub add --dev envied_generator
$ dart pub add --dev build_runner

使用方法

创建 .env 文件

在项目的根目录下创建一个 .env 文件,并添加你的环境变量。例如:

KEY1=VALUE1
KEY2=VALUE2

创建环境变量类

lib/env 目录下创建一个 env.dart 文件,并添加以下内容:

// lib/env/env.dart
import 'package:envied/envied.dart';

part 'env.g.dart';

@Envied(path: '.env')
abstract class Env {
    @EnviedField(varName: 'KEY1')
    static const String key1 = _Env.key1;

    @EnviedField()
    static const String KEY2 = _Env.KEY2;

    @EnviedField(defaultValue: 'test_')
    static const String key3 = _Env.key3;
}

重要提示:请确保将 .envenv.g.dart 文件添加到 .gitignore 中,以避免泄露环境变量。

运行生成器

运行以下命令来生成代码:

dart run build_runner build

访问环境变量

现在你可以使用 Env 类来访问你的环境变量:

print(Env.key1); // "VALUE1"
print(Env.KEY2); // "VALUE2"

高级用法

加密/混淆

通过在 EnviedField 注解中添加 obfuscate: true 参数来启用加密/混淆功能:

@EnviedField(obfuscate: true)
static const String secretKey = _Env.secretKey;

可选环境变量

启用 allowOptionalFields 来允许可选(nullable)类型的字段:

@Envied(allowOptionalFields: true)
abstract class Env {
    @EnviedField()
    static const String? optionalServiceApiKey = _Env.optionalServiceApiKey;
}

环境变量命名约定

通过设置 useConstantCase 参数为 true,可以让环境变量名称自动转换为大写形式:

@Envied(path: '.env', useConstantCase: true)
final class Env {
    @EnviedField()
    static const String apiKey = _Env.apiKey; // 自动转换为 'API_KEY'
}

构建配置覆盖

可以在项目的根目录下创建一个 build.yaml 文件来覆盖默认的 .env 文件路径:

targets:
  $default:
    builders:
      envied_generator|envied:
        options:
          path: .env.custom
          override: true 

使用系统环境变量

通过设置 environment: true 参数,可以从系统环境中读取环境变量:

@Envied(environment: true)
final class Env {
  @EnviedField(varName: 'API_KEY')
  static const String apiKey = _Env.apiKey;
}

从CLI设置文件

可以通过CLI参数来指定使用的 .env 文件:

dart run build_runner build --define=envied_generator:envied=path=my_other.env

已知问题

当你修改 .env 文件时,生成器可能无法检测到更改。如果遇到这种情况,请清理构建缓存并重新运行生成器:

dart run build_runner clean
dart run build_runner build --delete-conflicting-outputs

示例项目

你可以查看 这里 获取完整的示例项目。

希望这些信息能帮助你在Flutter项目中更好地使用 envied 插件进行环境配置管理。如果你有任何问题或需要进一步的帮助,请随时提问!


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

1 回复

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


当然,关于在Flutter项目中使用envied插件进行环境配置,以下是一个详细的代码案例,展示如何设置和使用envied来管理不同的环境变量。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加envied依赖:

dependencies:
  flutter:
    sdk: flutter
  envied: ^2.0.0  # 请检查最新版本号

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

2. 创建环境配置文件

在你的项目根目录下创建不同环境的配置文件。例如:

  • .env.development
  • .env.production

假设.env.development内容如下:

API_URL=https://dev.api.example.com
FEATURE_FLAG_A=true

.env.production内容如下:

API_URL=https://api.example.com
FEATURE_FLAG_A=false

3. 配置envied

在你的lib目录下创建一个新的Dart文件,比如env_config.dart,用于初始化envied并加载环境变量。

import 'package:envied/envied.dart';

class EnvConfig {
  static late Env _env;

  static Future<void> loadEnv(String envFile) async {
    _env = await Env.fromDotEnvFile(File(envFile).path);
  }

  static String get apiUrl => _env['API_URL'] ?? '';
  static bool get featureFlagA => _env['FEATURE_FLAG_A'] == 'true';
}

4. 在应用中使用环境变量

main.dart或任何你需要使用环境变量的地方,加载并使用环境变量。

import 'package:flutter/material.dart';
import 'env_config.dart';
import 'dart:io';

void main() async {
  // 根据你的构建配置选择环境文件
  String envFile = Platform.environment['FLUTTER_ENV'] ?? '.env.development';
  await EnvConfig.loadEnv(envFile);

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Envied Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('API URL: ${EnvConfig.apiUrl}'),
              Text('Feature Flag A: ${EnvConfig.featureFlagA.toString()}'),
            ],
          ),
        ),
      ),
    );
  }
}

5. 设置Flutter构建环境变量

为了确保在构建应用时能够正确加载对应的环境配置文件,你可以在构建命令中设置环境变量。例如,对于开发环境:

flutter run --dart-define=FLUTTER_ENV=.env.development

对于生产环境(假设你有一个构建脚本或CI/CD流程):

flutter build apk --dart-define=FLUTTER_ENV=.env.production

总结

通过上述步骤,你已经成功在Flutter项目中配置并使用了envied插件来管理不同的环境变量。这有助于在开发、测试和生产环境中保持配置的一致性,同时简化了环境变量的管理。

回到顶部