【问题标题】:Flavor for lib(dart) folder in Flutter like src folder in AndroidFlutter 中 lib(dart) 文件夹的风格,如 Android 中的 src 文件夹
【发布时间】:2021-08-02 13:21:51
【问题描述】:

您好,我的 Flutter 应用程序中有 5 种风味,分别是 A、B、C、D 和 E。对于 Android 应用,我在 app/build.gradle flye 中添加了所有风味:

productFlavors{
        A{
            applicationIdSuffix ".a"
        }
        B{
            applicationIdSuffix ".b"
        }
        ......
        ......
       E{
            applicationIdSuffix ".e"
        }
    }

类似地,在 src 文件夹中,我为所有风格创建了文件夹 A、B、C、D 和 E,以便我可以使用不同的 Java 类和资源。

src
 |--A
 |--B
 |--C
 |--D
 |--E
 |--main
 |--debug
 |--profile

但问题是,在 Flutter 中,我们只有一个 lib(dart code) 文件夹。我想明智地分离飞镖文件。因为可能所有风味都有不同的小部件。例如,如果 A 有一个小部件 xyz,那么我不想在构建其 APK 时将 xyz 小部件包含在其他风格中。

我想在 lib 文件夹中分离代码,如 Android 中的 src。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    对于 Flutter 中的风味,您需要创建 AppConfig.dart,您可以在其中添加以下内容:

    class AppConfig extends InheritedWidget {
      AppConfig(
          {this.appDisplayName,
          this.appInternalId,
          this.stringResource,
          this.colorResource,
          Widget child})
          : super(child: child);
    
      final String appDisplayName;
      final String appInternalId;
      final StringResource stringResource;
      final ColorResource colorResource;
    
      static AppConfig of(BuildContext context) {
        return context.dependOnInheritedWidgetOfExactType<AppConfig>();
      }
    
      @override
      bool updateShouldNotify(InheritedWidget oldWidget) => false;
    }
    
    abstract class StringResource {
      String APP_DESCRIPTION;
    }
    
    abstract class ColorResource {
      var basicColor;
    }
    

    您可以添加风味 dart 文件,例如: main_A.dart

    void main() {
      var configuredApp = AppConfig(
        appDisplayName: "App A",
        appInternalId: "A/",//this is for assets folder
        stringResource: StringResourceApp1(),
        colorResource: ColorA(),
        child: MyApp(),
      );
     mainCommon();
          runApp(configuredApp);
        }
    

    main_B.dart

    void main() {
      var configuredApp = AppConfig(
        appDisplayName: "App B",
        appInternalId: "B/",//this is for assets folder
        stringResource: StringResourceApp2(),
        colorResource: ColorB(),
        child: MyApp(),
      );
    
      mainCommon();
      runApp(configuredApp);
    }
    

    更改您的主 dart 文件将其重命名为 main_common.dart 并在需要时添加此方法。

    void mainCommon() {
      // Here would be background init code, if any
    }
    

    现在在编辑配置中并编辑如下风格

    Add path to your flavor main_flavor.dart file and add build flavor name as same used in gradle

    其他口味也一样!

    【讨论】:

    • 我们是否需要为 dart 代码创建多个 lib 文件夹?
    • 但这是我的问题。我知道如何在 android 中管理风味,但如何使用颤振管理飞镖代码?请再次检查我的问题并感谢您的回复。
    • 刚刚更新了我的答案,请尝试使用它。
    • 嗨,我在可能的应用程序中也在做同样的事情。但我的问题是,如果我有 2 个小部件说 AWidget(大小为 10kb)和 BWidget(大小为 10kb)。现在对于风味 A,只有 AWidget 必须包含在代码中,而不是 BWidget。与风味 B 类似。我的构建大小应保持小于 20kb。
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2011-06-26
    • 2016-09-03
    • 2011-04-30
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多