我如何覆盖我的主要 pubspec 依赖项(白色标签 flutter 应用程序)

How can I override my main pubspec dependencies (white labelling a flutter app)

我有一个项目必须卖给其他客户,所以我想找到一种方法来统一代码,当我发布一些更新时,我只需要操作一个代码(当然,保持每一个的特殊性)

问题是在我的第一个应用程序中,我使用了 firebase_messaging 及其 google-services.json。但是在这个新客户端中我不会使用它...我尝试 运行 但它抛出了这个错误:

E/flutter ( 7850): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: [core/not-initialized] Firebase has not been correctly initialized. Have you added the "google-services.json" file to the project? 
E/flutter ( 7850):     
E/flutter ( 7850):     View the Android Installation documentation for more information: https://firebase.flutter.dev/docs/installation/android
E/flutter ( 7850):     
E/flutter ( 7850): #0      MethodChannelFirebase.initializeApp (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:86:9)
E/flutter ( 7850): <asynchronous suspension>
E/flutter ( 7850): #1      Firebase.initializeApp (package:firebase_core/src/firebase.dart:44:9)
E/flutter ( 7850): <asynchronous suspension>
E/flutter ( 7850): #2      main (package:app_md/main.dart:72:3)
E/flutter ( 7850): <asynchronous suspension>
E/flutter ( 7850): 

如何处理不使用 firebase_messaging: 的子项目?我正在使用 'config' 参数来执行此 heritage

我是这样用的:https://medium.com/@ramiechaarani/how-to-make-a-white-label-app-in-flutter-6c3ea40fd7d5

总计:

我有一个主要的应用程序,最初是我为一个客户做的。此客户端使用 firebase。现在我只想保留主要功能并将其分开以在另一个客户端中使用。问题是,这个新客户端不使用 firebase,所以当我尝试 运行 应用程序时它会抛出该错误,因为我没有 google-services.json。我怎么能说在这个项目(继承主项目)中我不会使用firebase?

预期结果:在第二品牌应用中不使用 firebase..

也许有一种方法可以覆盖依赖关系?或者有另一种方法可以实现我的目标..

  1. 提取一个仅包含具有通用方法的客户端接口的通用模块
  2. 将实现添加到客户的模块(或创建模块 实现,取决于多个客户端是否要使用 相同的实现)
  3. 在您的 'core'(白标)模块的入口点添加第 1 步中的接口作为参数
  4. 在客户端模块中,将实现作为参数传递给入口点

这就是 Separation of conerns 的本质。您的 BLOC(或您用来执行业务逻辑的任何东西)不需要知道 'stuff' 来自哪里。他们只关心 'stuff' 来了。

为了更好地理解SoC,您可能希望阅读比维基百科文章更轻松的内容,例如:How do you explain Separation of Concerns to others?