一尘不染

如何更改状态文本栏颜色

flutter

我正在尝试使用CupertinoNavigationBar将状态栏文本颜色放到Brightlight Light中

我已经尝试过将带有statusBarColor和亮度的SystemUiOverlayStyle放入主屏幕,但是不起作用
状态栏中的文本必须为白色

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

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


阅读 283

收藏
2020-08-13

共1个答案

一尘不染

更新资料

现在CupertinoNavigationBar也有一个brightness属性。

旧答案

这是不可能的。

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

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

实际上,CupertinoNavigationBar如果与进行比较,则设计不佳AppBar,因为它考虑了三个属性来定义其亮度:

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

请注意,有一个属性可以指定Cupertino
Widgets的亮度,该属性是CupertinoThemeData.brightness,但(在奇怪的情况下)不将其视为inside
_wrapWithBackground()

已经有一个问题了。您应该等待Flutter团队的回应,但是在之前,您可以使用替代方法。

2020-08-13