【问题标题】:How to revert Status Bar to its default values after using AnnotatedRegion?使用 AnnotatedRegion 后如何将状态栏恢复为默认值?
【发布时间】:2020-09-17 23:06:31
【问题描述】:

在初始屏幕上,我使用AnnotatedRegion 将状态栏的颜色更改为白色。

AnnotatedRegion<SystemUiOverlayStyle>(
  value: SystemUiOverlayStyle.light.copyWith(statusBarColor: Colors.white),
  child: ...
)

上面的代码将状态栏颜色更改为白色,但它也会影响应用程序中我不使用AnnotatedRegion 的其他屏幕,现在所有屏幕的状态栏都是白色的,所以我如何将其恢复为默认值在那些特定的屏幕上。

在其他一些堆栈溢出答案中看到类似下面的内容,但在我的情况下它们不起作用:

SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);

那么我怎样才能让状态栏恢复默认行为,即它自动比应用栏的颜色有点暗?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    将每个屏幕包裹在AnnotatedRegion&lt;SystemUiOverlayStyle&gt;

    如果你已经在每个屏幕上都有AppBar,你应该配置它的亮度

    AppBar 本身将内容包装在 AnnotatedRegion 中并将其设置为 value: overlayStyle 这种方式

    final Brightness brightness = widget.brightness
      ?? appBarTheme.brightness
      ?? theme.primaryColorBrightness;
    final SystemUiOverlayStyle overlayStyle = brightness == Brightness.dark
      ? SystemUiOverlayStyle.light
      : SystemUiOverlayStyle.dark;
    

    第一次尝试解决您的问题,将所有屏幕的 AppBar 亮度设置为所需的值,如示例所示

    第1页:

    Scaffold(appBar: AppBar(brightness: Brightness.dark))
    

    第2页:

    Scaffold(appBar: AppBar(brightness: Brightness.light))
    

    【讨论】:

    • 如何获得上面代码中使用的3种不同亮度,即widget.brightness, appBarTheme.birghtnesstheme.primaryColorBrightness
    • 正如我之前所说,它是关于 AppBar 以及它如何计算在 SystemUiOverlayStyle 中使用的亮度。首先 AppBar 尝试构造函数参数,然后如果它为空,它会尝试从 appBarTheme 获取它,最后尝试是主题原色亮度。如果您不熟悉 Flutter 主题,请阅读此 flutter.dev/docs/cookbook/design/themes 第一次尝试解决您的问题,将所有屏幕 AppBar 亮度设置为所需值,例如 Page1 Scaffold(appBar: AppBar(brightness: Brightness.dark)) Page2 Scaffold(appBar: AppBar(brightness: Brightness.light))
    • 还没有,遇到了AnnotatedRegion 的其他问题,我想先了解一下,因为在我可以转到这个问题之前,这是必需的。
    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    相关资源
    最近更新 更多