在Flutter中动态地改变应用启动器图标

沮鹄
• 阅读 1738

在本文中,我们将讨论如何在 Flutter 应用程序的运行时动态更改多个应用程序启动器图标。

在 pubspec.yaml 文件中添加以下依赖项。

flutter_dynamic_icon:https://pub.dev/packages/flutter_dynamic_icon

考虑我们已经准备好基本的 UI(包含图像和按钮小部件)。

import 'package:flutter/material.dart';

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int iconIndex = 0;

  List iconName = <String>['icon1', 'icon2', 'icon3'];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: buildAppBar(appBarTitle: widget.title),
      body: Padding(
          padding: EdgeInsets.all(kSpacing),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              buildIconTile(0, 'red'),
              buildIconTile(1, 'dark'),
              buildIconTile(2, 'blue'),
              HeightSpacer(myHeight: kSpacing),
              PrimaryBtn(
                  btnFun: () => changeAppIcon(), btnText: 'Set as app icon'),
            ],
          )),
    );
  }

  Widget buildIconTile(int index, String themeTxt) => Padding(
        padding: EdgeInsets.all(kSpacing / 2),
        child: GestureDetector(
          onTap: () => setState(() => iconIndex = index),
          child: ListTile(
              contentPadding: const EdgeInsets.only(left: 0.0, right: 0.0),
              leading: Image.asset(
                imagefiles[index],
                width: 45,
                height: 45,
              ),
              title: Text(themeTxt, style: const TextStyle(fontSize: 25)),
              trailing: iconIndex == index
                  ? const Icon(
                      Icons.check_circle_rounded,
                      color: Colors.green,
                      size: 30,
                    )
                  : Icon(
                      Icons.circle_outlined,
                      color: Colors.grey.withOpacity(0.5),
                      size: 30,
                    )),
        ),
      );

  changeAppIcon()  {}

在Flutter中动态地改变应用启动器图标

现在我们需要在按钮小部件的 onpress 事件 [changeAppIcon{}] 中编写更改应用启动器图标的逻辑。

changeAppIcon() async {
  try {
    if (await FlutterDynamicIcon.supportsAlternateIcons) {
      await FlutterDynamicIcon.setAlternateIconName(iconName[iconIndex]);
      debugPrint("App icon change successful");
      return;
    }
  } catch (e) {
    debugPrint("Exception: ${e.toString()}");
  }
  debugPrint("Failed to change app icon ");
}

至此,我们完成了配置动态应用图标的编码部分。

现在要使该功能正常工作,我们需要在项目的 ios 文件夹中的 info.plist 文件中添加一些更改。

因此,我们需要通过右键单击 ios 文件夹在 xCode 中打开项目。

⚠️(注意:此功能针对 iOS 平台,因此我们需要 macOS 设备进行设置)。

在Flutter中动态地改变应用启动器图标

在 xCode 中打开项目后,尝试在 Runner/Runner 文件夹中添加应用程序图标图像,如下所示。

在Flutter中动态地改变应用启动器图标

接下来我们需要设置 info.plist 文件(按照下面给出的步骤)。

👉将 Icon files (iOS 5) 添加到信息属性列表。

在Flutter中动态地改变应用启动器图标

👉将 CFBundleAlternateIcons作为一个字典添加到上面创建的 icon files(ios 5) 中。

在Flutter中动态地改变应用启动器图标

👉在 CFBundleAlternateIcons下创建3个字典,其名称与图标图像文件名相似(在我们的例子中是 icon1icon2icon3)。

在Flutter中动态地改变应用启动器图标

👉对于每个字典(icon1icon2icon3),需要创建两个属性——UIPrerenderedIconCFBundleIconFiles

在Flutter中动态地改变应用启动器图标

👉最后将 CFBundleIconFiles 改成一个 array ,并将 item0 的值添加到各自的字典中,作为 icon1icon2icon3

在Flutter中动态地改变应用启动器图标

现在运行命令行

flutter clean
flutter pub get

就是这样。 🎉 运行代码以查看它的实际效果。🥳

请参阅我的视频教程以获取完整指南:https://www.youtube.com/watch...
在此处获取完整的源代码:https://github.com/vijayinyou...

点赞
收藏
评论区
推荐文章
顺心 顺心
4年前
Flutter如何引用第三方库并使用
Flutter官网点击访问(https://link.jianshu.com/?thttps%3A%2F%2Fflutter.io)如何引用并安装第三方库pubspec.yaml管理第三方库在pubspec.yaml中添加第三方库名称及版本号。例如添加第三方库english_wordsdependencies:flut
浩浩 浩浩
4年前
【Flutter实战】第一个Flutter App
2.1计数器应用示例用AndroidStudio和VSCode创建的Flutter应用模板默认是一个简单的计数器示例。本节先仔细讲解一下这个计数器Demo的源码,让读者对Flutter应用程序结构有个基本了解,然后在随后的小节中将会基于此示例,一步一步添加一些新的功能来介绍Flutter应用的其它概念与技术。对于接下来的示例,希望读者可以跟着笔者一
Stella981 Stella981
3年前
Flutter 构建完整应用手册
这本食谱包含演示如何在写Flutter应用程序时解决常见问题的食谱。每个配方都是独立的,可以作为参考帮助您构建应用程序。使用主题共享颜色和字体样式为了在整个应用中共享颜色和字体样式,我们可以利用主题。定义主题有两种方式:应用程序范围或使用Theme小部件来定义应用程序特定部分的颜色和字体样式。事实上,应用程序范围
Stella981 Stella981
3年前
Flutter
在Flutter加载网页?也是有WebView的哦,和Android一样1.添加依赖dependencies:flutter\_webview\_plugin:^0.2.122.导入库import'import'package:flutter\_webview\_plugin/flutter\_webview\_plug
Stella981 Stella981
3年前
JOptionPane修改图标
1.在Linux平台下.JOptionPane会显示Java默认的图标,在window平台不显示图标,如何替换这个图标了?2JOptionPane.setIcon(Icon)修改的是内容区域的icon,而不是左上角的Icon.所以需要通过修改Jdialog/Frame的图标来达到修改默认图标的问题.3.代码:if(JOptio
深入理解 Flutter 图片加载原理 | 京东云技术团队
Flutter官方为我们提供了Image控件可实现图片的加载及显示,Image控件本身是一个StatefulWidget,那么在图片显示过程中是如何加载及显示出来的呢?本篇文章将逐步分析Flutter中图片加载原理,理解了Flutter图片源码的加载原理后对我们有什么帮助?
少湖说 少湖说
9个月前
鸿蒙Flutter实战:04-如何使用DevTools调试Webview
鸿蒙Flutter如何使用DevTools调试Webview在《鸿蒙Flutter开发中集成Webview》,介绍了如果在Flutter中集成Webview.本文则为Webview的调试方法。配置WebviewCustomView.ets文件中,在生命周期
少湖说 少湖说
9个月前
鸿蒙Flutter实战:08-如何调试代码
鸿蒙Flutter实战:如何调试代码1.环境搭建参考文章搭建好开发环境。IDE安装好DevEco和VsCode/AndroidStudio。2.配置如果是vscode,可以在.vscode/launch.json文件中,增加以下配置json"name":"