Flutter应用图标管理插件flutter_app_icons的使用

Flutter应用图标管理插件flutter_app_icons的使用

flutter_app_icons 插件允许开发者在Flutter应用程序中动态地更改应用图标。无论是Web还是Android平台,你都可以通过编程方式改变你的favicon或应用图标。

Web版本使用方法

对于Web版本来说,操作相对简单:

  1. 创建一个 FlutterAppIcons 对象实例。
  2. 在你需要更改favicon的地方调用 setIcon 方法。
final _flutterAppIconsPlugin = FlutterAppIcons();

// 更改favicon
_flutterAppIconsPlugin.setIcon(icon: 'favicon.png');

Android版本使用方法

Android端的操作稍微复杂一些,需要按照以下步骤进行:

Step 1: 修改AndroidManifest.xml

更新你的AndroidManifest.xml文件中的主活动(MainActivity),将原有的LAUNCHER类别改为LEANBACK_LAUNCHER:

<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>

Step 2: 添加activity-alias

为每个想要使用的图标添加对应的activity-alias配置。注意:图标名称需要符合Java类名规范,在这里以点号分隔路径部分。

<activity-alias 
    android:label="flutter_app_icons_example"
    android:icon="@mipmap/ic_launcher_f_round" 
    android:name=".favicon.png" 
    android:exported="true" 
    android:enabled="false" 
    android:targetActivity=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>

<activity-alias 
    android:label="flutter_app_icons_example" 
    android:icon="@mipmap/ic_launcher" 
    android:name=".favicon.failure.png" 
    android:exported="true" 
    android:enabled="true" 
    android:targetActivity=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>

Step 3: 使用API更改图标

创建 FlutterAppIcons 对象,并调用 setIcon 方法来更改图标,同时指定当前激活的旧图标名称。

final _flutterAppIconsPlugin = FlutterAppIcons();

// 更改应用图标,同时指定旧图标
_flutterAppIconsPlugin.setIcon(icon: 'favicon.png', oldIcon: 'favicon-failure.png');

Step 4: 解决Flutter无法识别的问题

由于移除了LAUNCHER类别并且增加了activity-alias,Flutter可能无法直接运行你的代码。你需要打开android/src/main/(java OR kotlin)/your_package_name/ClassName,然后点击顶部的通知“Open for Editing In Android Studio”,再从那里执行任何你需要的操作(如运行、发布等)。

示例代码

下面是一个完整的示例代码,展示了如何在Flutter应用中使用flutter_app_icons插件来切换应用图标:

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

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

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

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

class _MyAppState extends State<MyApp> {
  final _flutterAppIconsPlugin = FlutterAppIcons();
  String _icon = 'favicon.png';
  Timer? _autoChange;

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

  // 每隔两秒自动切换图标
  void startTimer() {
    final Timer timer =
        Timer.periodic(const Duration(seconds: 2), (Timer timer) {
      final String nextIcon = getOldIcon(_icon);
      setIcon(nextIcon);
    });
    setState(() {
      _autoChange = timer;
    });
  }

  // 停止自动切换图标
  void stopTimer() {
    _autoChange?.cancel();
    setState(() {
      _autoChange = null;
    });
  }

  // 设置图标
  void setIcon(String? nextIcon) {
    if (nextIcon == null) return;
    _flutterAppIconsPlugin.setIcon(
      icon: nextIcon,
      oldIcon: getOldIcon(nextIcon),
    );
    setState(() {
      _icon = nextIcon;
    });
  }

  // 获取旧图标名称
  String getOldIcon(String icon) {
    if (icon == 'favicon.png') {
      return 'favicon-failure.png';
    }
    return 'favicon.png';
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('FlutterAppIcons example'),
          surfaceTintColor: Theme.of(context).colorScheme.primary,
        ),
        body: Center(
          child: Container(
            constraints: const BoxConstraints(maxWidth: 500),
            child: ListView(
              shrinkWrap: true,
              children: [
                const ListTile(
                  title: Text('Select favicon:'),
                ),
                RadioListTile<String>(
                  value: 'favicon.png',
                  groupValue: _icon,
                  onChanged: _autoChange == null ? setIcon : null,
                  title: const Text(
                    'Blue',
                    style: TextStyle(color: Colors.blue),
                  ),
                ),
                RadioListTile<String>(
                  value: 'favicon-failure.png',
                  groupValue: _icon,
                  onChanged: _autoChange == null ? setIcon : null,
                  title: const Text(
                    'Red',
                    style: TextStyle(color: Colors.red),
                  ),
                ),
                const ListTile(
                  title: Text('Automatic mode:'),
                ),
                SwitchListTile(
                  title: const Text('Change every 2 seconds'),
                  value: _autoChange != null,
                  onChanged: (bool value) {
                    if (value) {
                      startTimer();
                    } else {
                      stopTimer();
                    }
                  },
                )
              ],
            ),
          ),
        ),
      ),
    );
  }
}

这个例子展示了如何通过用户交互或定时器来切换应用图标,以及如何处理图标之间的切换逻辑。希望这对您有所帮助!

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_app_icons插件来管理应用图标的示例代码。这个插件允许你通过配置文件来轻松管理多个平台(如iOS和Android)的应用图标。

1. 添加依赖

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

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

然后运行flutter pub get来安装依赖。

2. 配置应用图标

flutter_app_icons插件使用yaml文件来配置图标。在项目的根目录下创建一个名为app_icons.yaml的文件,并添加以下内容:

flutter_icons:
  image_path: "assets/icon/icon.png"  # 你的图标源文件路径
  android: true        # 是否为Android生成图标
  ios: true            # 是否为iOS生成图标
  remove_alpha_ios: true  # 移除iOS图标的透明通道
  adaptive_icon_background: "#FFFFFF"  # Android自适应图标背景色
  adaptive_icon_foreground: "assets/icon/foreground.png"  # Android自适应图标前景图

3. 更新Android和iOS配置

Android

android/app/src/main/res/目录下,flutter_app_icons插件会自动生成各种尺寸的图标。你不需要手动修改这些文件。

iOS

ios/Runner/Assets.xcassets/AppIcon.appiconset/目录下,插件同样会自动生成iOS所需的图标集。确保AppIcon.appiconset目录存在,并且内容被插件覆盖。

4. 运行Flutter命令生成图标

在项目的根目录下运行以下命令来生成图标:

flutter pub run flutter_launcher_icons:main

注意:虽然命令中提到了flutter_launcher_icons,但flutter_app_icons的使用方式是类似的,因为flutter_app_icons内部可能会调用类似的命令来生成图标。具体命令可能会根据插件版本有所不同,请参考插件的官方文档。

5. 验证

确保你的pubspec.yaml中正确引用了图标资源,并且assets目录中包含了你指定的图标文件(如icon.pngforeground.png)。

6. 清理和重建

有时候,你可能需要清理和重建项目来确保图标正确生成:

flutter clean
flutter pub get
flutter run

示例项目结构

your_flutter_project/
├── android/
   └── ...
├── ios/
   └── ...
├── assets/
   └── icon/
       ├── icon.png
       └── foreground.png
├── lib/
   └── main.dart
├── pubspec.yaml
└── app_icons.yaml

这样,通过配置app_icons.yaml文件,并使用flutter_app_icons插件,你就可以轻松地在Flutter项目中管理应用图标了。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!