You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Web项目:如何通过envied变量按环境自动生成JSON配置文件?

可行,以下是具体实现方案

1. 用envied管理环境变量

先给项目装上envied和envied_generator依赖,然后在根目录创建对应环境的.env文件,比如.env.dev、.env.acc、.env.prod,每个文件里写好该环境的配置项:

# .env.dev示例
API_URL=https://dev-api.example.com
APP_TITLE=MyApp Dev

接着写一个env配置类,靠envied注解生成对应的变量:

import 'package:envied/envied.dart';

part 'env.g.dart';

@Envied()
abstract class Env {
  @EnviedField(varName: 'API_URL')
  static const apiUrl = _Env.apiUrl;
  @EnviedField(varName: 'APP_TITLE')
  static const appTitle = _Env.appTitle;
}

2. 写生成JSON的Dart脚本

在项目根目录建个generate_config.dart脚本,用来读取env变量并把配置生成到web目录(Flutter Web会自动加载web下的静态资源):

import 'dart:io';
import 'dart:convert';
import 'lib/env.dart';

void main() {
  final configMap = {
    'apiUrl': Env.apiUrl,
    'appTitle': Env.appTitle,
    // 按需添加其他配置项
  };

  final configFile = File('web/config.json');
  configFile.writeAsStringSync(const JsonEncoder.withIndent('  ').convert(configMap));
  print('已生成${Env.appTitle}环境的config.json');
}

3. 把生成步骤集成到运行命令里

不用手动分步执行,直接把生成命令和flutter run绑定,不同环境对应不同命令:

# 开发环境
flutter pub run build_runner build --define=envied_generator:builder=path=.env.dev && dart generate_config.dart && flutter run -d chrome
# 测试环境
flutter pub run build_runner build --define=envied_generator:builder=path=.env.acc && dart generate_config.dart && flutter run -d chrome
# 生产环境
flutter pub run build_runner build --define=envied_generator:builder=path=.env.prod && dart generate_config.dart && flutter run -d chrome --release

4. 在Flutter Web里读取生成的JSON

用rootBundle加载web目录下的config.json就行:

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

Future<Map<String, dynamic>> loadAppConfig() async {
  final configContent = await rootBundle.loadString('config.json');
  return json.decode(configContent);
}

这样每次启动项目时,都会根据指定环境自动生成对应的JSON配置文件,完全符合你的需求。

内容的提问来源于stack exchange,提问作者hajer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:15:39