如何在Flutter Flavor实现中使用不同的资源?

5

我已经创建了一个Flutter应用程序,并想设置3种不同的口味。每个口味都有不同的字体、图像和字符串文件。
我该如何为特定的口味使用特定的字体、图像和字符串文件?
先行致谢!


1
跟随GitHub问题。 这还没有被实现(Flutter 3.7.0 稳定版目前仍是如此)。 - MJ Studio
1个回答

3

您可以创建应用配置文件。

import 'package:flutter/material.dart';

enum Flavor { FLAV1, FLAV2 }

class AppConfig extends InheritedWidget {
  final String appTitle;
  final String buildFlavor;
  final Flavor flavor;
  final Widget child;
  final ThemeData themeData;
  final String s3BucketURL;
  final String stripeKey;

  AppConfig(
      {@required this.appTitle,
      @required this.buildFlavor,
      @required this.themeData,
      @required this.flavor,
      @required this.s3BucketURL,
      @required this.stripeKey,
      @required this.child});

  @override
  bool updateShouldNotify(covariant InheritedWidget oldWidget) => false;

  static AppConfig of(BuildContext context) {
    return context.dependOnInheritedWidgetOfExactType();
  }
}

创建文件夹

assets/ assets/1/ assets/2/

在pubspec.yaml中添加内容

当访问这些资源时,可以使用口味的索引来获取资源。

SvgPicture.asset(
                    'assets/${AppConfig.of(context).flavor.inex}/splash_logo.svg',
                    colorBlendMode: BlendMode.srcIn,
                    color: Theme.of(context).primaryColor,
                  )

您可以在初始化时添加不同的应用程序配置文件。创建不同的主文件,例如main_flav1.dart, main_flav2.dev。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  var configureApp = AppConfig(
    appTitle: 'App staging',
    buildFlavor: 'Staging',
    flavor: Flavor.FLAV1,
    themeData: PreOrderTheme.flav1Theme,
    stripeKey: 'pk_s',
    s3BucketURL: 'https://sssss.net',
    child: PreOrderApp(repository: Repository(baseURL:"https://webapi.net/api")),
  );
  return runApp(configureApp);
}

请参考此链接,了解如何在Flutter中为Android和iOS构建不同的flavors并使用不同的Firebase项目。


21
但是所有资产将加载在应用中并增加它们的大小... - Eng

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