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

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

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

env_native 是一个用于从Android资源和iOS配置中获取原生变量的Flutter插件。该插件提供了静态方法,可以在Flutter代码中获取Android资源文件中的变量以及iOS xcconfig文件中的变量。

使用方法

Android

在Android项目中,您需要将变量添加到 res/values/strings.xml 文件中。例如:

<resources>
    <string name="test_string">From Russia with love</string>
    <integer name="test_int">42</integer>
</resources>

iOS

在iOS项目中,您可以通过两种方式添加变量:一种是直接在 .xcconfig 文件中添加,另一种是在 Info.plist 文件中引用这些变量。

  1. .xcconfig 文件中添加变量
test_string = From Russia with love
test_int = 42
  1. Info.plist 文件中引用这些变量
<key>test_string</key>
<string>$(test_string)</string>
<key>test_int</key>
<string>$(test_int)</string>

Flutter

在Flutter代码中,您可以使用 EnvNative 类提供的静态方法来获取这些变量。例如:

final s = await EnvNative.getString('test_string');
final i = await EnvNative.getInt('test_int');

完整示例Demo

以下是一个完整的示例应用程序,展示了如何使用 env_native 插件从Android和iOS平台获取环境变量并在Flutter应用中显示。

import 'dart:async';

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

void main() {
  runApp(const MyApp());
}

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

  [@override](/user/override)
  MyAppState createState() => MyAppState();
}

class MyAppState extends State<MyApp> {
  String _message = 'Loading...';

  [@override](/user/override)
  void initState() {
    super.initState();
    getMessage();
  }

  Future<void> getMessage() async {
    String message;
    try {
      // 获取来自Android或iOS的字符串和整数变量
      final s = await EnvNative.getString('test_string'); // 获取字符串变量
      final i = await EnvNative.getInt('test_int'); // 获取整数变量
      message = '$s, $i'; // 将获取到的变量组合成一条消息
    } on PlatformException catch (e) {
      // 如果获取失败,捕获异常并显示错误信息
      message = 'Failed to get variables: $e';
    }

    if (!mounted) return;

    setState(() {
      _message = message; // 更新UI以显示获取到的消息
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) => MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: const Text('Plugin example app'), // 设置应用栏标题
          ),
          body: Center(
            child: Text(_message), // 在屏幕中央显示消息
          ),
        ),
      );
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用env_native插件来管理环境变量的详细代码案例。env_native插件允许你根据不同的构建环境(如开发、测试、生产)来管理环境变量。

第一步:添加依赖

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

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

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

第二步:配置环境变量

在Flutter项目的根目录下创建一个名为.env的文件(或者其他你选择的文件,如.env.development.env.production等),并在其中定义你的环境变量:

.env.development

API_URL=https://dev.example.com/api
FLAVOR=development

.env.production

API_URL=https://example.com/api
FLAVOR=production

第三步:配置build.gradle文件

为了根据构建变体加载不同的环境文件,你需要修改android/app/build.gradle文件。首先,你需要为不同的构建变体创建任务来复制相应的.env文件到项目的assets目录。

android/app/build.gradle中添加以下内容:

android {
    ...
    applicationVariants.all { variant ->
        def buildType = variant.buildType.name
        def flavorName = variant.flavorName
        def flavor = flavorName != null ? flavorName : "defaultFlavor"
        def envFile = ".env.${flavor.toLowerCase()}${buildType.toLowerCase() == 'release' ? '.production' : '.development'}"

        def copyEnvTask = tasks.create(name: "copy${flavor.capitalize()}${buildType.capitalize()}Env", type: Copy) {
            from ".."
            into "${buildDir}/intermediates/merged_assets/${variant.dirName}/mergeDebugAssets/out"
            include envFile
            rename { String fileName ->
                fileName.replace("${flavor.toLowerCase()}${buildType.toLowerCase() == 'release' ? '.production' : '.development'}", '')
            }
        }

        variant.preBuild.dependsOn copyEnvTask
    }
}

第四步:读取环境变量

在Flutter代码中,你可以使用env_native插件来读取这些环境变量。首先,在Dart代码中导入插件:

import 'package:env_native/env_native.dart';

然后,你可以在任何地方读取环境变量:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await EnvNative.init();  // 初始化插件

  String apiUrl = EnvNative.getString('API_URL') ?? 'https://default.example.com/api';
  String flavor = EnvNative.getString('FLAVOR') ?? 'unknown';

  print('API URL: $apiUrl');
  print('Flavor: $flavor');

  runApp(MyApp());
}

第五步:运行项目

现在,你可以通过选择不同的构建变体来运行你的Flutter项目。例如,你可以使用以下命令来运行开发版本的构建:

flutter run --flavor development --target lib/main_development.dart

或者运行生产版本的构建:

flutter run --flavor production --target lib/main_production.dart

注意:你可能需要在android/app/src目录下为不同的构建变体创建相应的源代码文件(如main_development.dartmain_production.dart),并确保它们在AndroidManifest.xml中正确配置。

通过上述步骤,你就可以在Flutter项目中使用env_native插件来管理不同构建环境下的环境变量了。

回到顶部