android - flutter 中的底部导航栏颜色恢复为黑色

标签 android flutter dart

在 flutter 中使用 main 方法中的这些代码行更改底部导航栏颜色时:

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
  systemNavigationBarColor: Colors.white,
  statusBarColor: Colors.transparent,
));

它工作正常但底部导航栏颜色在主页中 使用 SilverAppBar 一段时间后恢复为黑色:

body: CustomScrollView(
    slivers: <Widget>[
      SliverAppBar(
        expandedHeight: 300,
        floating: false,
        pinned: true,
        snap: false,
        backgroundColor: Colors.white,
        flexibleSpace: FlexibleSpaceBar(),
      ),
      SliverList(
        delegate: SliverChildListDelegate(<Widget>[

        ]),
      )
    ],
  ),

当改变 expandedHeight: 250 的值时,底部导航栏的颜色不会改变, 所以问题出在 expandedHeight 值内,那么为什么以及如何解决这个问题。

最佳答案

问题实际上不在 expandedHeight 值内,而是在 sliver app bar 内部使用 AnnotatedRegion 设置系统 ui 覆盖样式的事实:https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/material/app_bar.dart#L599

由于您只在 main 方法中设置一次覆盖样式,因此应用栏中 AnnotatedRegion 暴露的新覆盖样式将覆盖旧样式。

所以你可以做的是用另一个 AnnotatedRegion 将你的 FlexibleSpaceBar 包裹在你的 SliverAppBar 中,以覆盖 AnnotatedRegion 已经在应用栏中:

SliverAppBar(
  expandedHeight: 300,
  floating: false, 
  pinned: true,
  snap: false,
  backgroundColor: Colors.white,
  flexibleSpace: AnnotatedRegion<SystemUiOverlayStyle>(
    value: SystemUiOverlayStyle(
      systemNavigationBarColor: Colors.white,
      statusBarColor: Colors.transparent,
    ),
    child: FlexibleSpaceBar(),
  ),
),

仅供您引用

AnnotatedRegion 是另一种改变ui叠加样式的方法,你可以在这里了解更多:https://stackoverflow.com/a/51013116/6064621

关于android - flutter 中的底部导航栏颜色恢复为黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59110837/

相关文章:

android - 在 android studio 中检测到的框架

android - 有没有办法让 react-native 忽略一些不 bundle 它们的文件?

java - Android - 带有外部类的Listview

android - 在 android flutter 中使用 gif 图像启动屏幕

flutter - 一旦用户启动,即使继续浏览,也会继续执行异步任务

dart - 使用类作为 Dart polymer 元素的属性

Android:未从 Activity 中调用 onSaveInstanceState

flutter - 在flutter中使用FCM时如何获取有效负载数据?

dart - 如何为 CustomClipper 创建的小部件制作合适的边框和阴影

firebase - 如何在 FutureBuilder Widget 的构建器函数中等待 - Flutter