Flutter配置管理插件flavor_getter的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter配置管理插件flavor_getter的使用

Flavor Getter 插件简介

pub package

Flavor Getter 是一个Flutter插件,它帮助开发者直接从Flutter代码中检索应用程序当前运行的风味(或变体)。此插件目前支持iOS和Android平台。

安装

1. 添加依赖

在项目的pubspec.yaml文件中添加以下依赖:

dependencies:
  flavor_getter: ^0.0.3

请根据需要替换^0.0.3为你想要的Flavor Getter插件版本。

2. 获取依赖

运行以下命令来获取依赖项:

flutter pub get

3. 导入包

在Dart代码中导入Flavor Getter包:

import 'package:flavor_getter/flavor_getter.dart';

开始使用

要使用Flavor Getter插件,你需要根据目标平台执行一些设置步骤。请注意,本指南假设你已经为iOS和Android项目设置了风味(或变体)。

平台支持

平台 支持
iOS
Android

设置

iOS 设置

  1. 在Xcode中打开你的Flutter项目,导航至ios/Runner.xcworkspace
  2. 在Xcode中选择你的应用目标(Runner),然后转到Build Settings标签页。
  3. User-Defined部分,添加一个新的构建设置名为FLAVOR,并为每个方案设置所需的风味值。
  4. 打开位于ios/Runner目录下的Info.plist文件。
  5. 向信息属性列表添加一个新条目,键为FLAVOR,值为$(FLAVOR)。这将确保风味值可以在Info.plist文件中访问。
  6. 保存Info.plist文件。
  7. 使用所需方案和风味构建并运行你的应用程序。

Android 设置

  1. 在Android Studio中打开你的Flutter项目。

  2. 找到android/app/build.gradle文件。

  3. android块内,确保defaultConfig部分包含以下行:

    android {
        namespace "com.example.myapp" // 替换为你的命名空间
        // ...
        defaultConfig {
            // ...
            applicationId "com.example.myapp" // 替换为你的applicationId;确保与命名空间相似
            // ...
        }
    }
    

    applicationId应与你在AndroidManifest.xml文件中定义的包名匹配。

  4. 要添加风味,在android块中添加以下行:

    flavorDimensions "default"
    
    productFlavors {
        dev {
            applicationIdSuffix ".dev"  // com.example.myapp.dev
        }
        prod {
            applicationIdSuffix ".prod"  // com.example.myapp.prod
        }
    }
    

    自定义风味名称(如devprod)和applicationIdSuffix(如.dev.prod)以匹配你所需的风味。

  5. 当启用Proguard时(这是Android发布构建的默认设置),BuildConfig Java类会在混淆过程中被重命名,并阻止库引用它。为了避免这种情况,在android/app/proguard-rules.pro中添加规则:

    -keep class com.example.yourPackageName.BuildConfig { *; }
    

    包名应与app/src/main/AndroidManifest.xml文件中的android:label值匹配。

使用

要在Flutter代码中检索当前风味,你可以使用getFlavor()函数。

import 'package:flavor_getter/flavor_getter.dart';

void main() async {
    String currentFlavor = await FlavorGetter().getFlavor();
    print('Running in flavor: $currentFlavor');
}

示例

下面是一个完整的示例,展示了如何在Flutter应用中使用flavor_getter插件:

/*
 * File: main.dart
 * Flutter Plugin: Flavor Getter
 * Description: A plugin to retrieve the current flavor of the Flutter application.
 * Version: 0.0.3
 * Author: Momar Talla Cisse
 * License: BSD 3-Clause
 * Created: 2023-06-18
 * Last Modified: 2023-06-21
 */

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:flavor_getter/flavor_getter.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _flavor = 'Unknown';
  final _flavorGetterPlugin = FlavorGetter();

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    String flavor;
    // Platform messages may fail, so we use a try/catch PlatformException.
    // We also handle the message potentially returning null.
    try {
      flavor = await _flavorGetterPlugin.getFlavor() ?? 'Unknown flavor';
    } on PlatformException {
      flavor = 'Failed to get flavor';
    }

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      _flavor = flavor;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('flavor_getter example app'),
        ),
        body: Center(
          child: Text('Running in flavor: $_flavor\n'),
        ),
      ),
    );
  }
}

通过这个示例,你可以在Flutter应用启动时显示当前的应用程序风味。


更多关于Flutter配置管理插件flavor_getter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter配置管理插件flavor_getter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用flavor_getter插件进行配置管理的代码示例。flavor_getter插件允许你根据不同的构建配置(如开发、测试、生产等)来读取不同的配置信息。

1. 安装flavor_getter插件

首先,你需要在你的pubspec.yaml文件中添加flavor_getter依赖:

dependencies:
  flutter:
    sdk: flutter
  flavor_getter: ^x.y.z  # 替换为最新版本号

然后运行以下命令来安装依赖:

flutter pub get

2. 配置build.gradle文件

为了使用不同的构建配置,你需要在android/app/build.gradle文件中定义产品风格(Product Flavors)。例如:

android {
    ...
    flavorDimensions "version"
    productFlavors {
        dev {
            dimension "version"
            applicationIdSuffix ".dev"
            versionNameSuffix "-dev"
            buildConfigField "String", "API_BASE_URL", "\"https://dev.example.com/\""
        }
        prod {
            dimension "version"
            buildConfigField "String", "API_BASE_URL", "\"https://prod.example.com/\""
        }
    }
}

3. 使用flavor_getter读取配置

接下来,在你的Flutter项目中,你可以使用flavor_getter来读取这些配置。首先,确保你已经导入了插件:

import 'package:flavor_getter/flavor_getter.dart';

然后,你可以使用FlavorGetter.getBuildConfigField方法来读取你在build.gradle中定义的字段。例如:

void main() {
  // 初始化FlavorGetter
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 获取API基础URL
    String apiBaseUrl = FlavorGetter.getBuildConfigField<String>('API_BASE_URL') ?? 'https://default.example.com/';

    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(apiBaseUrl: apiBaseUrl),
    );
  }
}

class MyHomePage extends StatelessWidget {
  final String apiBaseUrl;

  MyHomePage({required this.apiBaseUrl});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'API Base URL:',
            ),
            Text(
              apiBaseUrl,
              style: TextStyle(fontSize: 20),
            ),
          ],
        ),
      ),
    );
  }
}

4. 构建应用

你可以使用以下命令来构建不同的产品风格:

flutter run --flavor dev
flutter run --flavor prod

或者,如果你是在Android Studio中运行,你可以通过Edit Configurations来设置运行/调试配置,选择对应的产品风格。

这样,当你运行不同的产品风格时,应用会显示相应的API基础URL。

注意事项

  • 确保你的android/app/build.gradle文件中已经正确配置了flavorDimensionsproductFlavors
  • flavor_getter插件目前只支持Android平台,如果你需要跨平台支持,可能需要自己实现类似的逻辑或使用其他插件。

希望这个示例能帮助你在Flutter项目中更好地使用flavor_getter插件进行配置管理。

回到顶部