如何确定Flutter应用程序是否处于生产模式?

4

我正在使用Flutter包dio配置API端点! 我有两个API端点:一个用于开发,另一个用于生产。 我希望我的dio baseURL可以在开发和生产端点之间自动切换。

就像这样:

Dio(
  baseURL: isProduction ? productionBaseURL : developmentBaseURL
  ......
      );

如何在Dart中判断我的应用程序是否处于生产环境?
3个回答

5

只需查看kReleaseMode全局常量。如果应用程序是在发布模式下编译的,则其值为true

或者,我建议将此信息来自环境变量,以便遵循Twelve-Factor App中的一个要点(即Config)。 要获取并检查,请执行以下操作。

例如:IS_PRODUCTION 系统环境变量:

final isProduction = Platform.environment['IS_PRODUCTION'] == '1';

或者,获取dart-defines编译时环境变量:

const isProduction = String.fromEnvironment('IS_PRODUCTION') == '1';

有两种方法可以设置dart-define:

  1. flutter run --dart-define=IS_PRODUCTION=1,或者;

  2. flutter build <bundle> --dart-define=IS_PRODUCTION=1;

    <bundle> 可以是: aar, apk, appbundle, bundle, web, 或 windows

请注意,dart-define编译到应用程序本身中。这就是它们接受const声明的原因。从命令行文档中可以看到:

附加的键值对将作为常量从String.fromEnvironmentbool.fromEnvironmentint.fromEnvironmentdouble.fromEnvironment构造函数中使用。


如果您想在生产服务器上运行调试版本或在开发服务器上运行发布版本,该怎么办? - activout.se
1
感谢@activout.se提供的提示。这就是为什么我在答案中添加了首选选项的原因。 - lepsch
1
我建议使用布尔值,这样缺失的布尔值将会自动被设置为 false。 - Randal Schwartz
好的!它完美地运行了。 - Baimam Boukar

1
您需要决定并检查适合您的应用程序的“生产”是什么意思。它可以是运行时设置,例如在shared_preferences中,也可以是编译时设置,您可以将其传递给flutter build
我已经实现了一个名为firebase_options_selector的pub.dev包,在Firebase后端上以运行时方式执行此操作。如果您想要,您可以使用我的源代码作为灵感。

1

使用Flutter中的flavors可以为应用程序设置两个不同的环境,一个是测试环境,一个是生产环境。您可以参考官方文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接