flutter - 如何在 Flutter Web 中动态更改 App 标题?

标签 flutter dart flutter-web

Web应用程序通常在选项卡的标题中反射(reflect)当前显示的内容。
title parameter提供给 MaterialApp WidgetsApp 意味着如果不重建整个树就无法更改它,即在返回setState的顶层调用MaterialApp

MaterialApp(
  title: 'Web app title',
  ...,
)

我希望能够随时在应用程序中的任何位置更改应用程序标题。我怎么做?

最佳答案

Flutter 中的动态应用标题
应用标题 可以是 在所有平台上使用 SystemChrome.setApplicationSwitcherDescription 动态更改:

@override
Widget build(BuildContext context) {
    SystemChrome.setApplicationSwitcherDescription(ApplicationSwitcherDescription(
      label: 'Dynamic web app title',
      primaryColor: Theme.of(context).primaryColor.value,
    ));


  return Container(...);
}
Screen captureSystemChrome 可用于 import 'package:flutter/services.dart'; 并且您想在 setApplicationSwitcherDescription 方法 中调用 build
这也是 Title 的做法(参见 source code ),这是 WidgetsAppMaterialApp 等使用的小部件。
因此,您也可以使用 Title 小部件而不是自己访问 SystemChrome:
@override
Widget build(Context context) {
  return Title(
    label: 'Dynamic app title',
    primaryColor: Theme.of(context).primaryColor,
    child: ..,
  );
}
labellabel 参数非常简单:它完全映射到 title 中的 MaterialApp 并且只是一个 StringprimaryColorprimaryColor 将确定系统可能在应用程序切换器中使用的颜色,例如Android 上最近的标题栏颜色。
这是一个 int 而不是 Color ,这就是为什么您需要调用 Color.value 将您的原色转换为整数。
干扰其他 Title s
您可能会问自己,在设置 setApplicationSwitcherDescription 上的 Title 属性时调用 title 或插入 MaterialApp 小部件是否会导致任何问题。
答案是: 没有 因为树中最深处的小部件将设置标题。本质上,即使整个应用程序重建,假设您在子进程中调用它,您的 setApplicationSwitcherDescription 也会在 MaterialApp 之后调用,因此您将覆盖 MaterialApp 标题。

关于flutter - 如何在 Flutter Web 中动态更改 App 标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60456687/

相关文章:

dart - 将一个 dart 文件中的列表返回到另一个 dart 文件

dart - 盒子装饰 : DecorationImage Fullscreen background image

flutter - 想在 flutter 中初始化 TimeZone 包,代码给出了这个错误

windows - flutter 3.3 ShaderCompilerException ink_sparkle.frag 失败,退出代码为 -1073740791

Flutter-web:浏览器刷新时提供程序丢失状态

Flutter 删除 GridView 行之间的空间

android - 在后台上传

dart - 访问范围外的变量

flutter - MobX 中 ObservableList 和 @observable List 有什么不同

flutter - 我如何在 flutter [go router] 中使用 go router 插件进行推送替换