我正在构建一个 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);
}
main_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());
}
main_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/