如何为 Flutter Web 应用程序设置标题和图标?
How can you set title and icon for a flutter web app?
我想做的是构建一个 flutter web 应用程序,当在浏览器中显示时,选项卡会显示一个图标和一个标题(因为目前它只显示世界图标和本地主机...标题).
实际结果:
期望的结果:
编辑:
我现在可以添加标题,因为这是在主函数中设置的
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: Icon(Icons.menu, color: Colors.white,),
title: Text(_your title here_),
)
...
);
}
所以,我唯一需要编辑的是网站图标
假设您已经有一个 favicon.ico
文件,将它放在 your_project_dir\web
文件夹中 index.html
旁边,如下所示足以让浏览器选择它。
以下是放置 favicon.ico' in the
web` 文件夹的结果。确保进行干净的构建。
在其他情况下,您可以使用 index.html
中的 link
标签手动提及它,如本维基百科 page.
中所述
为了将标题更改为您想要的,您需要将参数 title
(这是一个 String
)添加到您的 MaterialApp
小部件。
return MaterialApp(
title: "MyTitle",
home: MyHomeWidget());
您可以设置 onGenerateTitle property of your MaterialApp 小部件,并提供回调函数来构建您的标题。每次 WidgetsApp
重建时都会调用 onGenerateTitle
回调。如果您希望页面标题动态更改或生成本地化标题,这将很有用。
MaterialApp(
...
onGenerateTitle: (BuildContext context) {
return AppLocalizations.of(context).myTitle;
}
...
);
- 编辑标题
这是最简单的。只需在每个页面上或直接在 materialApp 构造函数中使用 Title
小部件,并将标题字符串键设置为您需要的标题文本。
像这样:
...
Title(
color: myColors, //not important in web but still required
title: 'web page title',
child: myChildWidget,
),
...
- 编辑图标
如果您的应用仅适用于网络,请使用 dart:html
库使用 DOM 访问权限执行更改。
像这样
import 'dart:html';
...
...
updateIcon(String assetIcon){
LinkElement link = (document.querySelector("link[rel*='icon']") ??
document.createElement('link')) as LinkElement;
link.type = 'image/x-icon';
link.rel = 'shortcut icon';
link.href = assetIcon;
}
如果您的应用程序是 multi-platform,您需要为 Web 创建单独的主文件,例如 main_web.dart
.并在此文件中声明上一个函数。
现在,在任何需要设置图标的地方,您只需在使用关键字 kIsWeb
.
检查平台后调用该方法即可
例如:更改页面内的图标
...
initState(){
super.initSate();
if(kIsWeb){
WebMixin.updateIcon("assets/home_icon.png"); //WebMixin is just a helper. replace it by your one.
}
}
...
如果您想知道如何更改设备主页上的应用名称,您可以更新 web/manifest.json 中的“名称”和“short_name”值:
"name": "Ideasky",
"short_name": "Ideasky",
我想做的是构建一个 flutter web 应用程序,当在浏览器中显示时,选项卡会显示一个图标和一个标题(因为目前它只显示世界图标和本地主机...标题).
实际结果:
期望的结果:
编辑: 我现在可以添加标题,因为这是在主函数中设置的
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: Icon(Icons.menu, color: Colors.white,),
title: Text(_your title here_),
)
...
);
}
所以,我唯一需要编辑的是网站图标
假设您已经有一个 favicon.ico
文件,将它放在 your_project_dir\web
文件夹中 index.html
旁边,如下所示足以让浏览器选择它。
以下是放置 favicon.ico' in the
web` 文件夹的结果。确保进行干净的构建。
在其他情况下,您可以使用 index.html
中的 link
标签手动提及它,如本维基百科 page.
为了将标题更改为您想要的,您需要将参数 title
(这是一个 String
)添加到您的 MaterialApp
小部件。
return MaterialApp(
title: "MyTitle",
home: MyHomeWidget());
您可以设置 onGenerateTitle property of your MaterialApp 小部件,并提供回调函数来构建您的标题。每次 WidgetsApp
重建时都会调用 onGenerateTitle
回调。如果您希望页面标题动态更改或生成本地化标题,这将很有用。
MaterialApp(
...
onGenerateTitle: (BuildContext context) {
return AppLocalizations.of(context).myTitle;
}
...
);
- 编辑标题
这是最简单的。只需在每个页面上或直接在 materialApp 构造函数中使用 Title
小部件,并将标题字符串键设置为您需要的标题文本。
像这样:
...
Title(
color: myColors, //not important in web but still required
title: 'web page title',
child: myChildWidget,
),
...
- 编辑图标
如果您的应用仅适用于网络,请使用 dart:html
库使用 DOM 访问权限执行更改。
像这样
import 'dart:html';
...
...
updateIcon(String assetIcon){
LinkElement link = (document.querySelector("link[rel*='icon']") ??
document.createElement('link')) as LinkElement;
link.type = 'image/x-icon';
link.rel = 'shortcut icon';
link.href = assetIcon;
}
如果您的应用程序是 multi-platform,您需要为 Web 创建单独的主文件,例如 main_web.dart
.并在此文件中声明上一个函数。
现在,在任何需要设置图标的地方,您只需在使用关键字 kIsWeb
.
例如:更改页面内的图标
...
initState(){
super.initSate();
if(kIsWeb){
WebMixin.updateIcon("assets/home_icon.png"); //WebMixin is just a helper. replace it by your one.
}
}
...
如果您想知道如何更改设备主页上的应用名称,您可以更新 web/manifest.json 中的“名称”和“short_name”值:
"name": "Ideasky",
"short_name": "Ideasky",