【问题标题】:Can't change the status bar Icon Brightness in flutter app?无法更改颤振应用中的状态栏图标亮度?
【发布时间】:2020-03-28 22:54:34
【问题描述】:

在 main.dart 中

void main() {
SystemChrome.setSystemUIOverlayStyle(
SystemUiOverlayStyle(
  statusBarColor: Colors.black.withOpacity(0), //top bar color
  statusBarIconBrightness: Brightness.dark, //top bar icons
  systemNavigationBarColor: Colors.black, //bottom bar color
  systemNavigationBarIconBrightness: Brightness.light, //bottom bar icons
),
);
runApp(MyApp());
}

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
 Widget build(BuildContext context) {
return MaterialApp(
  theme: ThemeData(
    //primaryColor: Color.fromRGBO(113, 201, 206, 1),
    fontFamily: 'Montserrat',
    textTheme: TextTheme(
      headline: TextStyle(
        fontSize: 40,
        fontWeight: FontWeight.w500,
      ),
      title: TextStyle(
        fontWeight: FontWeight.w700,
        fontSize: 16,
      ),
      body1: TextStyle(
        fontSize: 12,
      ),
    ),
  ),
  home: Test(),
  routes: {
    MainScreen.routeName: (context) => MainScreen(),
  },
);
}
}

我在用上面的代码改变状态栏的颜色,statusBarIconBrightness: Brightness.dark没有效果。 它变成黑色,但几秒钟后又切换回“Brightness.light”。 怎么了?

在 Android 模拟器上运行。 我不想在 Test() 小部件中使用 appBar

【问题讨论】:

  • 你的代码很完美,但是在返回脚手架之前尝试在 MyApp 类中使用你上面的代码
  • 你在模拟器上试试吗?或真实的设备。如果是模拟器,那么是哪个安卓或苹果。这仅适用于 android。
  • 问题已更新

标签: flutter flutter-layout


【解决方案1】:

@CopsOnRoad 的回答对我有点影响。你有时会看到Brightness 类有这种有趣的方式来制造混乱。这意味着,如果你想让状态栏图标颜色为白色,你必须使用Brightness.dark 而不是Brightness.light。我就是这么做的,然后砰!它开始工作了。只需接受@CopsOnRoad 的回答并将light 更改为dark。至少这对我有用。 我得出结论,在这种特殊情况下,设置Brightness.light 意味着“将状态栏图标的颜色更改为适合浅色状态栏的颜色(白色或类似颜色的状态栏背景),这意味着系统将设置图标为黑色,以便用户能够看到图标。 希望这有帮助!

【讨论】:

    【解决方案2】:

    我正在尝试类似的东西,但状态栏是透明的而不是蓝色的。我添加了以下内容,它起作用了:

    theme: ThemeData(
      appBarTheme: AppBarTheme(
        brightness: Brightness.light,
    

    【讨论】:

      【解决方案3】:

      这是因为您没有在 Test 页面中明确更改 AppBarbrightness。运行这段代码,看看有什么不同:

      void main() {
        SystemChrome.setSystemUIOverlayStyle(
          SystemUiOverlayStyle(
            statusBarColor: Colors.black.withOpacity(0), //top bar color
             // statusBarIconBrightness: Brightness.dark, // don't use this
          ),
        );
        runApp(MyApp2());
      }
      
      class MyApp2 extends StatelessWidget {
      // This widget is the root of your application.
        @override
        Widget build(BuildContext context) {
          return MaterialApp(
            home: Scaffold(
              appBar: AppBar(
                title: Text("AppBar"),
                brightness: Brightness.light, // use this instead
              ),
            ),
          );
        }
      }
      

      输出 1(亮度.暗):

      输出 2(亮度.光):

      【讨论】:

      • 我的 appBar 小部件中没有 appBar。但它仍然无法正常工作。!
      • 你的,不工作,Test 小部件是非常复杂的小部件,没有appBar,还有一件事最初设置了Brightness.light,但是当我在应用程序的根目录中设置PrimaryColor 时,然后它更改为Brightnesss.dark 并且不会更改。
      • 我不知道为什么我的解决方案不起作用,它非常简单明了,请不要对其进行任何更改,只需放置并运行即可。它会起作用的。
      • @CopsOnRoad,此解决方案是否仅适用于包含的应用栏?如果我们不需要应用栏怎么办?
      猜你喜欢
      • 2019-06-07
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 2019-08-08
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多