如何在 Flutter 中设置不同的火力基地环境



我正在尝试弄清楚如何在颤振项目中设置不同的火基环境。

我了解如何在Firebase中执行此操作,我创建了两个项目,一个用于生产,一个用于测试。 然后,在 iOS 或 Android 项目中,我可以使用各种方法使用单独的google-services.jsonGoogleServices-Info.plist文件在这两个环境之间切换。

在 Flutter 中,我找到了关于如何分离环境的描述,但它只解释了如何在 Flutter 代码中区分环境。

如何让此环境在编译时更改 iOS 和 Android 构建的内容? 甚至只需在构建时允许文件复制钩子就足够了。

您可以使用 FirebaseApp.configure 切换帐户。您可以提供自己的解决方案或秘密开发面板来在它们之间切换。

具有构建风格的解决方案非常糟糕,当您部署 TestFlight + 时,plist 实现会将您锁定在构建中,它们既混乱又缓慢。

下面是一个没有愚蠢构建风格的示例:(您也可以使用资产。

// Load a named file.
let filePath = Bundle.main.path(forResource: "MyGoogleService", ofType: "plist")
guard let fileopts = FirebaseOptions(contentsOfFile: filePath!)
else { assert(false, "Couldn't load config file") }
FirebaseApp.configure(options: fileopts)

我写了一篇关于如何使用风格和平台通道在 dart 代码中为 Firebase 配置以及运行时配置执行此操作的文章。

https://medium.com/@matt.goodson.business/separating-build-environment-configurations-in-flutter-with-firebase-doing-it-the-right-way-c72c3ad3621f

Flutter 口味与 Android 口味无缝协作。对于 iOS,您需要为每种风格创建 Xcode 方案,并将它们链接到构建配置。

对于 dart 配置,可以使用平台通道在运行时获取生成期间使用的风格。这使你可以在没有多个 main.dart 文件或传递目标参数的情况下配置应用。

Salvatore Giordano写了一篇博客文章,详细描述了如何实现这一目标:

https://medium.com/@salvatoregiordanoo/flavoring-flutter-392aaa875f36

Flutter 接受一个参数--flavor=<flavor>允许您选择不同的构建风格。 在 Android 中,这按预期工作,选择不同的构建风格。 IOS有点棘手,因为每种风格都需要一个方案,并且还需要Release-<flavor>形式的构建配置。

一旦这些部件就位,就可以使用它们来选择Firebase配置,就像在任何iOS或Android项目中一样。

挑战在于让 Dart 代码也了解这种风味,而博客文章对此没有提供很好的解决方案。 它建议可以使用使用不同入口点的标准方法,但调用应用程序的人员必须手动将正确的入口点与正确的风格相匹配。

具体到Firebase env配置,您可以使用这篇文章和CodeMagic的这篇文章,它解释了如何使用构建环境变量设置plist文件。

如果您需要在 Dart 代码中具有一组不同的值,例如一个选项,您可以使用此包。它允许从控制台命令参数生成Dart类配置文件。

更新 12/05/2020

从 Flutter 1.17 开始,您实际上可以在flutter runflutter build命令中使用带有--dart-define参数的编译时变量

这是一篇介绍如何指定和使用它们的文章。

随着 Flutter for Web 发布到稳定频道,我整理了针对来自多个构建平台(即 iOS、Android 和 Web)的多个 Firebase 项目(例如开发、暂存、生产)的说明。

晚了派对,但为了将来的其他人。请阅读您是否正在使用Firebase和--dart-defined,因为我花了一整天的时间弄清楚这一点。

所以官方文档说在你的firebase.json文件中使用"source"。 https://firebase.google.com/docs/hosting/frameworks/flutter 不清楚的是,当你在配置中有源代码时,它会在你运行时构建颤振应用程序firebase deploy.这将清除您之前发送的任何构建参数,即使您只是使用--dart-define参数构建也是如此。

解决方案是将 firebase.conf 文件更改为如下所示的内容:

{
"hosting": {
"public": "build/web",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"frameworksBackend": {
"region": "us-central1"
},
"rewrites": [ {
"source": "**",
"destination": "/index.html"
} ]
}
}

然后构建应用

flutter build --dart-define=envFileName=local.env

然后部署

firebase deploy

相关内容

  • 没有找到相关文章

最新更新