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

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

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

flutter_dotenv简介

flutter_dotenv 是一个用于在Flutter应用程序中加载和使用.env文件配置的库。它允许开发者在运行时从.env文件加载配置,这些配置可以在整个应用程序中使用。这种做法遵循了十二要素应用(twelve-factor app)的配置原则,即通过环境变量来存储配置信息。

关于

flutter_dotenv 是基于Dart的dotenv库进行修改以适应Flutter开发需求的一个分支版本。它将.env文件中的变量解析并合并到内置的Platform.environment映射中,从而模拟生产环境中的配置。

安全考虑

敏感的API密钥和令牌不应该直接存储在Flutter应用程序中,因为即使经过混淆处理也有可能被提取出来。因此,建议仅使用环境变量来保存非敏感的配置值,例如API端点和功能标志。有关移动应用安全的最佳实践,请参考OWASP Mobile Security Project

使用方法

1. 创建.env文件

在项目根目录下创建一个.env文件,并添加一些示例内容:

FOO=foo
BAR=bar
FOOBAR=$FOO$BAR
ESCAPED_DOLLAR_SIGN='$1000'
# This is a comment

注意:如果部署到Web服务器上,确保配置文件已上传且未被忽略。(可以将配置文件命名为不带.开头的名字)

2. 将.env文件添加到资源包中

编辑pubspec.yaml文件,将.env文件加入到assets列表里:

assets:
  - .env

确保路径与.env文件的实际位置相对应!

3. 如果不想将其包含在版本控制系统中,则需将.env文件添加到.gitignore文件中:

*.env

4. 在main.dart中加载.env文件

对于v5.0.0及更高版本:

import 'package:flutter_dotenv/flutter_dotenv.dart';

Future main() async {
  // 加载.env文件,默认文件名为.env,可根据需要指定其他名称
  await dotenv.load(fileName: ".env");
  
  runApp(MyApp());
}

然后你就可以在整个应用程序中访问.env文件中的变量了:

import 'package:flutter_dotenv/flutter_dotenv.dart';

final String foo = dotenv.env['FOO'];

对于v5.0.0之前的版本:

import 'package:flutter_dotenv/flutter_dotenv.dart' as DotEnv;

Future main() async {
  await DotEnv.load(fileName: ".env");
  
  runApp(MyApp());
}

访问方式为:

import 'package:flutter_dotenv/flutter_dotenv.dart';

final String foo = env['FOO'];

示例代码

以下是一个完整的示例程序,展示了如何使用flutter_dotenv读取环境变量并在UI中展示它们。

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';

Future<void> main() async {
  // 加载.env文件,并与平台环境变量合并
  await dotenv.load(fileName: "assets/.env", mergeWith: {
    'TEST_VAR': '5',
  });

  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'flutter_dotenv Demo',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Dotenv Demo'),
        ),
        body: SingleChildScrollView(
          child: FutureBuilder<String>(
            future: rootBundle.loadString('assets/.env'),
            initialData: '',
            builder: (context, snapshot) => Container(
              padding: const EdgeInsets.all(50),
              child: Column(
                children: [
                  Text(
                    'Env map: ${dotenv.env.toString()}',
                  ),
                  const Divider(thickness: 5),
                  const Text('Original'),
                  const Divider(),
                  Text(snapshot.data ?? ''),
                  Text(dotenv.get('MISSING', fallback: 'Default fallback value')),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

这个例子演示了如何在启动时加载.env文件,并在一个简单的Flutter界面中显示环境变量的内容。同时,还展示了当某个环境变量不存在时提供默认值的方法。

高级用法

  • 类型转换:可以直接获取已经转换为特定类型的环境变量,如布尔型、浮点数或整数。
  • 引用其他变量:可以在.env文件内部引用之前定义过的变量。
  • 合并外部映射:可以在加载时将额外的键值对映射到环境中。
  • 测试支持:提供了专门用于测试场景下的加载方法。
  • 空安全性:可以通过get()方法避免对已知存在的变量进行空检查,或者设置默认回退值。

讨论和支持

如果您有任何问题或建议,请通过GitHub上的issue tracker提交反馈。欢迎贡献Pull Request!

先行艺术

本项目受到了多个语言实现的影响,包括但不限于:

等等。

许可证

MIT License,详情请参见LICENSE文件。


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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_dotenv插件来管理环境变量的代码案例。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_dotenv: ^x.x.x  # 请使用最新版本号

然后运行flutter pub get来获取依赖。

2. 创建 .env 文件

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

API_URL=https://api.example.com
FEATURE_FLAG_NEW_UI=true

3. 加载环境变量

main.dart文件或任何需要访问环境变量的地方,首先导入flutter_dotenv包,并加载环境变量。确保在调用任何依赖环境变量的代码之前完成加载。

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

void main() async {
  // 加载环境变量
  await dotenv.load(fileName: ".env");

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Dotenv Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 访问环境变量
    String apiUrl = dotenv.env['API_URL'] ?? 'https://default-api.example.com';
    bool featureFlagNewUI = dotenv.env['FEATURE_FLAG_NEW_UI'] == 'true';

    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Dotenv Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'API URL: $apiUrl',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            Text(
              'New UI Feature Flag: $featureFlagNewUI',
              style: TextStyle(fontSize: 20),
            ),
          ],
        ),
      ),
    );
  }
}

4. 运行应用

确保.env文件包含你想要的环境变量,然后运行你的Flutter应用。你应该能够在UI中看到从.env文件中加载的环境变量值。

注意事项

  • 确保.env文件没有被Git等版本控制系统跟踪。你可以在.gitignore文件中添加.env来避免这个问题。
  • 在生产环境中,你可能需要使用不同的方法来管理敏感信息,例如使用环境变量管理工具或加密存储。

通过上述步骤,你可以在Flutter项目中有效地使用环境变量,并通过flutter_dotenv插件简化其管理过程。

回到顶部