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

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

特性

  • 动态管理环境变量:支持在运行时动态加载和切换不同的环境变量。
  • 多环境支持:支持开发、测试、生产等多个环境配置。
  • 简单易用:通过简单的API即可实现对环境变量的管理。

开始使用

要开始使用该插件,请确保已经安装了package_flutter_env。可以通过以下命令将其添加到您的pubspec.yaml文件中:

dependencies:
  package_flutter_env: ^1.0.0

然后执行以下命令以获取依赖项:

flutter pub get

使用方法

1. 导入包

首先,在您的main.dart文件中导入package_flutter_env

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

2. 初始化环境变量

在应用启动时,初始化环境变量。可以使用MIEnvConfig类来定义不同环境的配置。例如:

void main() async {
  // 初始化环境变量
  await MIEnvConfig.init({
    'development': {'baseUrl': 'https://dev.api.example.com'},
    'production': {'baseUrl': 'https://api.example.com'}
  }, defaultEnv: 'development');

  runApp(const MyApp());
}

上述代码定义了两个环境(developmentproduction),并设置了默认环境为development


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

可以在任何地方通过MIEnvConfig.currentEnv访问当前环境的变量。例如:

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

MyHomePage中使用环境变量:

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: MIAppBarWidget(
        automaticallyImplyLeading: true,
        title: const Text(
          "MI AppBar",
          style: TextStyle(color: Colors.white),
        ),
        toolbarHeight: 56,
        leadingWidth: 50,
        centerTitle: true,
        backgroundColor: Colors.blue,
        statusBarColor: Colors.blueGrey,
        elevation: 10,
        shadowColor: Colors.black,
        //sideMargin: 10,
        shapeBorder: const RoundedRectangleBorder(
          borderRadius: BorderRadius.only(
            bottomRight: Radius.circular(10),
            bottomLeft: Radius.circular(10),
          ),
        ),
        onBackButtonTapped: (BuildContext context) {},
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
            Text(
              'Current Base URL: ${MIEnvConfig.currentEnv['baseUrl']}', // 使用环境变量
              style: Theme.of(context).textTheme.bodyLarge,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

完整示例代码

以下是完整的示例代码,展示如何在Flutter应用中使用package_flutter_env管理环境变量:

// example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:package_flutter_env/package_flutter_env.dart';

void main() async {
  // 初始化环境变量
  await MIEnvConfig.init({
    'development': {'baseUrl': 'https://dev.api.example.com'},
    'production': {'baseUrl': 'https://api.example.com'}
  }, defaultEnv: 'development');

  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: MIAppBarWidget(
        automaticallyImplyLeading: true,
        title: const Text(
          "MI AppBar",
          style: TextStyle(color: Colors.white),
        ),
        toolbarHeight: 56,
        leadingWidth: 50,
        centerTitle: true,
        backgroundColor: Colors.blue,
        statusBarColor: Colors.blueGrey,
        elevation: 10,
        shadowColor: Colors.black,
        //sideMargin: 10,
        shapeBorder: const RoundedRectangleBorder(
          borderRadius: BorderRadius.only(
            bottomRight: Radius.circular(10),
            bottomLeft: Radius.circular(10),
          ),
        ),
        onBackButtonTapped: (BuildContext context) {},
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
            Text(
              'Current Base URL: ${MIEnvConfig.currentEnv['baseUrl']}', // 使用环境变量
              style: Theme.of(context).textTheme.bodyLarge,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}
1 回复

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


package_flutter_env 是一个用于管理 Flutter 应用环境变量的插件。它允许你在不同的环境(如开发、测试、生产)中轻松切换和管理环境变量。以下是如何使用 package_flutter_env 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  package_flutter_env: ^1.0.0  # 请使用最新版本

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

2. 创建环境配置文件

在项目的根目录下创建一个 env 文件夹,并在其中创建不同的环境配置文件,例如:

  • env/dev.env
  • env/staging.env
  • env/prod.env

每个 .env 文件可以包含键值对,例如:

# dev.env
API_URL=https://dev.api.example.com
DEBUG=true
# staging.env
API_URL=https://staging.api.example.com
DEBUG=false
# prod.env
API_URL=https://api.example.com
DEBUG=false

3. 初始化环境变量

lib/main.dart 文件中初始化环境变量。你可以根据当前环境加载相应的 .env 文件。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 加载环境变量
  await FlutterEnv.load(envPath: 'env/dev.env'); // 根据环境选择不同的文件

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Env Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Env Demo'),
        ),
        body: Center(
          child: Text('API URL: ${FlutterEnv.get('API_URL')}'),
        ),
      ),
    );
  }
}

4. 使用环境变量

你可以通过 FlutterEnv.get('KEY') 来获取环境变量中的值。例如:

String apiUrl = FlutterEnv.get('API_URL');
bool debug = FlutterEnv.get('DEBUG') == 'true';

5. 切换环境

在开发过程中,你可以通过更改 FlutterEnv.load 中的 envPath 来切换不同的环境。例如,在发布应用时,你可以加载 prod.env 文件:

await FlutterEnv.load(envPath: 'env/prod.env');
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!