如何使用不同的资产来实现 Flutter 风味?

Posted

技术标签:

【中文标题】如何使用不同的资产来实现 Flutter 风味?【英文标题】:How to use different assets for flutter flavor implementation? 【发布时间】:2020-11-08 11:40:22 【问题描述】:

我创建了一个颤振应用程序,我想在其上设置 3 种风格。他们每个人都有不同的字体,不同的图像集和不同的字符串文件集。 我如何使用特定的字体、图像和字符串文件来实现特定的风格? 提前致谢!

【问题讨论】:

【参考方案1】:

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

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();
  

创建文件夹 资产/ 资产/1/ 资产/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);

请参考https://medium.com/@animeshjain/build-flavors-in-flutter-android-and-ios-with-different-firebase-projects-per-flavor-27c5c5dac10b。

【讨论】:

但是所有资产都将加载到应用程序中并增加它们的大小......

以上是关于如何使用不同的资产来实现 Flutter 风味?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:将风味配置添加到 Visual Studio

Flutter 网页风味

如何从 Flutter 应用的 versionName: 1.0.0-prod 中删除风味名称 (prod/dev)?

Flutter android风味生成apk

如何在产品风味中使用不同的启动器活动?

GoogleServices - 如何使用flavorDimensions 为每种风味组合设置不同的applicationId?