dart - 如何为 qa/dev/prod 构建不同版本的 Flutter 应用程序?

我正在构建一个 Flutter 应用程序,并且我为不同的环境(QA、dev、prod 等)设置了具有不同值的变量。有什么好的方法来组织我的应用,以便我可以轻松地为 QA、开发、产品和其他环境构建?

最佳答案

基于 Seth 的想法,这里有一个示例,它设置了一个全局表示 BuildEnvironment,名为 env

env.dart

import 'package:meta/meta.dart';

enum BuildFlavor { production, development, staging }

BuildEnvironment get env => _env;
BuildEnvironment _env;

class BuildEnvironment {
  /// The backend server.
  final String baseUrl;
  final BuildFlavor flavor;

  BuildEnvironment._init({this.flavor, this.baseUrl});

  /// Sets up the top-level [env] getter on the first call only.
  static void init({@required flavor, @required baseUrl}) =>
      _env ??= BuildEnvironment._init(flavor: flavor, baseUrl: baseUrl);
}

ma​​in_dev.dart

import 'package:flutter/material.dart';
import 'env.dart';
import 'app.dart';

void main() {
  BuildEnvironment.init(
      flavor: BuildFlavor.development, baseUrl: 'http://dev.example.com');
  assert(env != null);
  runApp(App());
}

ma​​in_prod.dart

import 'package:flutter/material.dart';
import 'env.dart';
import 'app.dart';

void main() {
  BuildEnvironment.init(
      flavor: BuildFlavor.production, baseUrl: 'http://example.com');
  assert(env != null);
  runApp(App());
}
  • 导入 env.dart 以公开 env 变量。
  • 使用 target 选项运行和构建应用程序。

    flutter run -t lib/main_dev.dart flutter build -t lib/main_dev.dart

要与 VS Code 集成,请定义启动配置:

.vscode/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "development",
      "program": "lib/main_dev.dart",
      "request": "launch",
      "type": "dart"
    },
    {
      "name": "production",
      "program": "lib/main_prod.dart",
      "request": "launch",
      "type": "dart"
    }
  ]
}

我最初打算使用传递给 Dart 的 main 函数的命令行参数,但我认为目前不能使用 flutter run 在命令行上传递 args > 或 flutter build,尽管 VS Code 和 Android Studio 都支持将 args 传递给 main。它还 seems构建风格作为 main 的命令行参数是不合适的,因为 args 可以在构建过程之后传递

https://stackoverflow.com/questions/47438564/

相关文章:

flutter - 如何使用主题通用更改AppBar的文本颜色,FAB的图标颜色?

dart - 在 Flutter 中创建自定义时钟小部件

flutter - 如何从 Flutter 应用程序调用电话

dart - 是否可以将 Flutter 应用注册为 Android Intent 过滤器并处理传入

flutter - 如何在 ListView 中添加滚动指示器

dart - Flutter-环绕文本

flutter - 在 iphone 上安装使用 android studio 开发的 Flutte

dart - 如何将数据从子小部件传递到其父小部件

image - 如何在 Flutter 中拉伸(stretch)图像以适合整个背景(100% 高度

google-maps - 如何在 Flutter 中更改谷歌地图标记的图标大小?