Dart 中的构建时值注入

Build-time value injection in Dart

我对 Dart 比较陌生,但我正在尝试使用 Dart 2 和 Angular 5 构建一个相当简单的 UI 来与 API 通信。我为自己设定的两个目标是

  1. API 托管在 App Engine 上,UI 托管在 Firebase 托管上,作为单独的模块;
  2. 这两个模块可以在我的本地开发机器上轻松使用,而无需在部署前修改代码。

为了实现这一点,我正在考虑使用 Maven 的 属性 注入或 Gradle 的 BuildConfigField 在构建期间注入 API 主机,设置 http://localhost:8080在开发和 https://api.example.com 生产中,但我在 Dart/build_runner.

中找不到任何为此目的的东西

这在 Dart-Angular 中被认为是一种好的做法吗?如果是这样,我该如何实现?如果不是, 什么是好的做法?

听起来您正在寻找

https://github.com/dart-lang/webdev/issues/73
如果您使用 webdev

https://github.com/dart-lang/build/issues/1053 如果你使用 pub run build_runner --config=dev ...

您可以在 build.dev.yaml 中为不同的配置配置不同的变量

来自https://github.com/dart-lang/build/issues/1053#issuecomment-368345014

targets:
  runny:
    sources:
      exclude: ["lib/builder.dart"]
    builders:
      sass_builder|sass_builder:
        enabled: False
      angular_components|scss_builder:
        enabled: True
      build_web_compilers|entrypoint:
        generate_for:
        - web/main.dart
        options:
          compiler: dartdevc
          dart2js_args:
          - --define env=dev

您可以使用

读取值
const currentEnv = String.fromEnvironment('env');

https://docs.flutter.io/flutter/dart-core/String/String.fromEnvironment.html