如何为Flutter更改桌面Windows应用程序图标?

23

我正在使用桌面版Flutter,搜索了许多文章但找不到关于如何更改Windows桌面、Mac和Linux的应用程序启动器图标的方法。

6个回答

42

要更改图标,只需在您的项目中替换图标文件:

  • Windows:windows/runner/resources/app_icon.ico
  • macOS:macos/Runner/Assets.xcassets/AppIcon.appiconset

Linux 模板中尚未设置图标;您可以关注此问题以获取更新。


2
我用我的标志制作了一个ICO文件,并将其替换为resources/app_icon.ico中的ICO文件,但图标没有改变。 - Zuher Abud Said
2
“flutter build windows” 在发布版本中没有获取到“windows/runner/resources/app_icon.ico”。我错过了什么? - kakyo
我们有办法在运行时更改应用程序图标吗? - Mahesh Jamdade
1
对于任何遇到这个问题的人:起初,似乎替换app_icon.ico不会有任何作用。我尝试了几种其他方法,包括在下面提到的Runner.rc中指定另一个文件,但似乎都没有起作用。最后,我使Android Studio的缓存失效,重新启动了我的电脑,运行了flutter clean,然后重新构建了我的应用程序。最终,通过替换app_icon.ico更新了图标。 - il_boga
@il_boga 你应该提交一个 bug;如果需要 clean,那就应该修复这个问题。 - smorgan

8
为了在Windows中更改图标,您需要将图标文件放在以下位置:

windows/runner/resources/

然后进入windows/runner/resources/Runner.rc文件并搜索单词app_icon。您将到达此处:
IDI_APP_ICON            ICON                    "resources\\app_icon.ico"

app_icon替换为您的图标文件名称。 然后运行命令。

flutter build windows
flutter run --release -d windows

1

我有最好的方法,使用Flutter Launcher Icons来为您的Windows、Android等设备设置图标。

  1. 编辑您的pubspec.yaml文件:

dev_dependencies: flutter_launcher_icons: "^0.10.0"

flutter_icons:
  android: "launcher_icon"
  ios: true
  image_path: "assets/icon/icon.png"
  min_sdk_android: 21 # android min sdk min:16, default 21
  web:
    generate: true
    image_path: "path/to/image.png"
    background_color: "#hexcode"
    theme_color: "#hexcode"
  windows:
    generate: true
    image_path: "path/to/image.png"
    icon_size: 48 # min:48, max:256, default: 48
  1. 打开终端,运行以下命令:
flutter pub get
flutter pub run flutter_launcher_icons:main
注意: 你的图标名称应为小写,不要使用大写字母。


1

针对Linux系统

最佳和简单的方法是使用gtk_window_set_icon_from_file函数

编辑您的my_application.cc文件,该文件位于Linux文件夹linux/my_application.cc

  • gtk_widget_show(GTK_WIDGET(window));行之前
  • 添加新行gtk_window_set_icon_from_file(GTK_WINDOW(window),"assets/icon.ico",NULL);
  • 图标推荐为48x48像素

1
对我没有起作用。 - HII
请展示你的代码。 - Kiyan Ray
我添加了一行代码 gtk_window_set_icon_from_file(GTK_WINDOW(window),"images-icons/out/icons/win/icon.ico",NULL);,但是在 Linux 可执行文件的外观上没有任何变化。也许需要将图标放在 assets/ 目录下,并使用 pubspec.yaml 注册为资源? - abulka
实际上,在我进行上述代码更改之前,应用程序的默认图标仍然是我现在得到的相同通用灰色齿轮符号 - 甚至不是经典的Flutter图标。因此,如果Flutter团队无法更改图标,那么我们还有什么希望! - abulka
原来上面的gtk调用需要在运行时存在图标文件,例如在部署可执行文件的目录(或子目录)中。如果您指定的图标文件无法找到,则在运行时终端会出现警告。因此,最终我成功加载了图标。但是部署的可执行文件的图标仍然是通用的,并且在运行时显示在Ubuntu Dock中的图标仍然是通用的 - 就我所知,这行代码没有任何可见的有用效果。 - abulka

0
在尝试了这些步骤几个星期后,对我真正起作用的是在Runner.rc文件中更改应用程序描述的这些字段:
  • FileDescription
  • InternalName
  • OriginalFilename
  • ProductName
我还在CMakeLists.txt中更改了BINARY_NAME描述字段。
在更改描述后,图标会更新。我没有尝试过,但你可以在成功更新启动器应用程序图标后将应用程序名称切换回之前的名称。

0

这是我的 flutter doctor 设置

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.2.1, on Microsoft Windows [Version 10.0.19043.1110], locale en-CA)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[✓] Chrome - develop for the web
[✓] Visual Studio - develop for Windows (Visual Studio Community 2019 16.10.3)
[✓] Android Studio (version 4.1.0)
[✓] Android Studio
[✓] Connected device (3 available)

• No issues found!

最初仅仅替换图标并运行是无效的。

flutter build windows

也没有

flutter clean
flutter build windows

我发现在运行模式下图形用户界面上的图标会更新,但不幸的是 EXE 文件本身没有更新。

flutter run --release -d windows

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