首页 > 解决方案 > 如何更改状态文本栏颜色

问题描述

我正在尝试使用 CupertinoNavigationBar 将状态栏文本颜色放入 Brightness Light

我已经尝试将带有 statusBarColor 和亮度的 SystemUiOverlayStyle 放在主要位置,但不起作用 状态栏中的文本需要是白色的

void main() {
  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
    systemNavigationBarColor: Colors.white,
    statusBarColor: Colors.white,
    statusBarBrightness: Brightness.light,
    statusBarIconBrightness: Brightness.light
  ));
  runApp(MyApp());
}

我正在尝试为 ios 和 android 创建 appbar,但我想将状态栏文本颜色设为 Light,我设置了一个条件,如果是 ios,我创建 CupertinoNavigationBar(),如果是 android,我放置正常的 AppBar(),如果只是具有亮度的 AppBar,他可以正常工作,但是使用 CupertinoNavigationBar(),没有

标签: iosflutter

解决方案


更新

现在CupertinoNavigationBar也有brightness房产了。

旧答案

这是不可能的。

CupertinoNavigationBar使用该方法_wrapWithBackground()来定义状态栏是亮还是暗,因此您所做的设置SystemChrome.setSystemUIOverlayStyle()永远不会被考虑。

一个典型的解决方案是创建自己的扩展导航栏CupertinoNavigationBar,但在这种情况下这并不容易,因为CupertinoNavigationBar有一个私有的State并调用其他私有类和方法。

事实上,CupertinoNavigationBar如果与 相比AppBar,它的设计很糟糕,它考虑了三个属性来定义其亮度:

  1. brightness可以通过构造函数传递的参数;
  2. ThemeData.AppBarTheme.brightness;
  3. ThemeData.primaryColorBrightness.

请注意,有一个属性可以指定 Cupertino Widgets 的亮度,它是CupertinoThemeData.brightness,但(奇怪的是)内部没有考虑它_wrapWithBackground()

这个已经有问题了。您应该等待 Flutter 团队的回复,但在此之前您可以使用解决方法。


推荐阅读