Flutter环境变量读取插件env_reader的使用

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

Flutter环境变量读取插件env_reader的使用

env_reader 是一个强大的Flutter插件,用于从.env文件中读取、加密或生成环境变量到混淆的Dart模型中。本文将详细介绍如何在Flutter项目中使用该插件。

Features 🚀

  • 自动化生成:直接将.env文件转换为动态的Dart模型,无需添加注解。
  • 无缝集成:通过命令自动更新pubspec.yaml.gitignore,无需手动操作。
  • 强加密保护:使用加密保护你的.env配置文件,防止未授权访问。
  • 数据类型多样性:支持整数、小数、布尔值和字符串等数据类型的自动解析。
  • 多种加载方式:可以从资产文件、本地文件、内存、网络或字符串中加载.env文件。

Install 🚀

添加依赖

首先,在你的pubspec.yaml文件中添加env_reader

dart pub add env_reader

激活CLI工具

然后,激活env_reader的CLI工具:

dart pub global activate env_reader

Usage 🚀

1. 设置配置文件

在项目的根目录创建一个.env文件(与pubspec.yaml同级),内容示例如下:

API_KEY=VYIUJ7tLdJFqrBesnOJEpkbceBB5GNz0t1aYgHxK3BMxbJOc/g==
DEBUG=true
PORT=8080
DATABASE_URL=postgresql://user:password@localhost:5432/mydb

2. 运行命令(可选)

如果你想加密.env文件,可以运行以下命令:

env_reader --input=".env" --output="assets/env/" --key="MyOptionalSecretKey"

如果你想从.env文件生成Dart模型文件,可以运行:

env_reader --input=".env" --model="lib/src/env_model.dart" --null-safety

3. 加载.env文件

加载env_reader实例:

import 'package:env_reader/env_reader.dart';
import 'package:flutter/services.dart';

await Env.load(
  EnvStringLoader(await rootBundle.loadString('assets/env/.env')),
  "MyOptionalSecretKey");

或者创建自己的EnvReader实例:

EnvReader production = EnvReader();
await production.load(
  EnvStringLoader(await rootBundle.loadString('assets/env/.env')),
  "MyOptionalSecretKey");

4. 访问配置

获取并读取环境变量的值:

import 'package:env_reader/env_reader.dart';
import 'package:my_package/src/env_model.dart';

String api = Env.read("API_KEY") ?? "Got'cha 😎";
bool debug = Env.read<bool>("DEBUG") ?? false;

// 如果你有自己的实例,调用如下:
String api = production.read("API_KEY") ?? "Got'cha 😎";
bool debug = production.read<bool>("DEBUG") ?? false;

Text(
  text:
    debug ? "🤫 pssst, this is my api key y'all \n\n $api" : "Nothing to see here 🤪",
);

// 或者直接从之前生成的环境模型中访问值:

Text(
  text:
    EnvModel.debug ? "🤫 pssst, this is my api key y'all \n\n ${EnvModel.apiKey}" : "Nothing to see here 🤪",
);

示例代码

下面是一个完整的示例代码,展示了如何在Flutter应用中使用env_reader

import 'package:env_reader/env_reader.dart';
import 'package:example/src/env_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

Future<void> main(List<String> arguments) async {
  WidgetsFlutterBinding.ensureInitialized();
  await Env.load(
    EnvStringLoader(await rootBundle.loadString('assets/env/.env')),
    "Nigam.123",
  );
  runApp(
    const MaterialApp(
      title: "Env Reader",
      debugShowCheckedModeBanner: false,
      home: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.max,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(Env.read<String>("DATABASE_URL") ?? "Oops"),
            Text(EnvModel.apiKey),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用env_reader插件来读取环境变量的代码示例。env_reader插件允许你读取.env文件中的环境变量,这在开发、测试和生产环境中非常有用。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  env_reader: ^2.0.0  # 确保使用最新版本,版本号可能有所不同

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

步骤 2: 创建 .env 文件

在项目的根目录下创建一个名为.env的文件,并在其中定义你的环境变量。例如:

API_URL=https://api.example.com
API_KEY=your_api_key_here

步骤 3: 配置 env_reader

在你的Flutter应用的入口文件(通常是main.dart)中,配置env_reader以加载.env文件。

import 'package:flutter/material.dart';
import 'package:env_reader/env_reader.dart';

void main() async {
  // 加载环境变量
  await EnvReader.init();

  // 现在可以访问环境变量了
  String apiUrl = EnvReader.get('API_URL') ?? 'https://default-api.url';
  String apiKey = EnvReader.get('API_KEY') ?? 'default_api_key';

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

class MyApp extends StatelessWidget {
  final String apiUrl;
  final String apiKey;

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Env Reader Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(apiUrl: apiUrl, apiKey: apiKey),
    );
  }
}

class MyHomePage extends StatelessWidget {
  final String apiUrl;
  final String apiKey;

  MyHomePage({required this.apiUrl, required this.apiKey});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Env Reader Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('API URL: $apiUrl'),
            Text('API KEY: $apiKey'), // 注意:实际项目中不要直接显示API密钥
          ],
        ),
      ),
    );
  }
}

注意事项

  1. 安全性:在实际项目中,避免在客户端代码中硬编码或显示API密钥等敏感信息。可以考虑使用更安全的方法,如后端生成令牌或使用环境变量管理工具。
  2. 多环境配置:对于不同的环境(开发、测试、生产),你可以创建多个.env文件(例如.env.development, .env.production),并在构建过程中选择合适的文件加载。这通常需要在构建脚本中进行配置。

通过上述步骤,你已经成功在Flutter项目中集成并使用env_reader插件来读取环境变量。希望这个示例对你有帮助!

回到顶部