【问题标题】:How can i change status text bar color如何更改状态文本栏颜色
【发布时间】:2019-10-27 12:02:17
【问题描述】:

我正在尝试使用 CupertinoNavigationBar 将状态栏文本颜色置于 Brightness Light 中

我已经尝试将带有 statusBarColor 和亮度的 SystemUiOverlayStyle 放在主目录中,但不起作用 That text in status bar need be white

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(),不行

【问题讨论】:

  • 您遇到了什么问题?使用CupertinoNavigationBar时,您的状态栏应该会自动亮起。
  • 我在 CupertinoNavigationBar 中的背景颜色是 0xFF81d8d0,这是蓝色/绿色,状态栏是黑色,但我不想要黑色,我想要白色
  • 我在帖子上放了一张图片,看看

标签: ios flutter


【解决方案1】:

更新

现在CupertinoNavigationBar 也有一个brightness 属性。

旧答案

这是不可能的。

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

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

事实上,CupertinoNavigationBarAppBar 相比设计不佳,AppBar 考虑三个属性来定义其亮度:

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

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

已经有一个issue 与此有关。您应该等待 Flutter 团队的回复,但在那之前您可以使用this 解决方法。

【讨论】:

    【解决方案2】:

    尝试将亮度设置为暗。在 AppBar 中,如果我将 Brightness 设置为 light,它将使状态栏文本变为黑色。

    statusBarBrightness: Brightness.dark,
    

    【讨论】:

    • 我说的是,但是,当我只使用应用栏、ios 和 android 时,它可以工作,但如果我把 if 放到 ios 并使用 cupertinoNavigation,他就不起作用
    • 我刚刚检查了 CupertinoNavigationBar,它似乎根据背景颜色更改状态栏颜色。我试过这个: CupertinoNavigationBar( backgroundColor: Colors.black24, ) 并将状态文本更改为白色。
    • 是的,他改了,但是,appbar需要是0xFF81d8d0,这个颜色的对比是黑色的,但是这个颜色的黑色太丑了
    【解决方案3】:

    https://github.com/flutter/flutter/issues/41067#issuecomment-571689955 (iOS 深色模式和 Android)

    Info.plist中添加一行

    <key>UIUserInterfaceStyle</key>
    <string>Light</string>
    <key>UIViewControllerBasedStatusBarAppearance</key>
    <true/>
    

    然后改变状态栏?

    import 'package:flutter/services.dart';
    /// ...
    SystemChrome.setSystemUIOverlayStyle(
        SystemUiOverlayStyle(statusBarBrightness: Brightness.light) // Or Brightness.dark
    );
    

    【讨论】:

      猜你喜欢
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 2019-01-13
      • 2013-07-14
      相关资源
      最近更新 更多