Flutter-How 在深色模式下更改状态栏文本颜色?

Flutter-How to change the Statusbar text color in Dark Mode?

希望在iOS13深色模式下控制状态栏文字颜色。我可以通过设置 Scaffold 的 AppBar 属性 "brightness" 来改变状态栏的颜色。 代码如下:

return Scaffold(
      appBar: AppBar(
        brightness: Brightness.light,  //<--Here!!!
        title: Text(widget.title),
      ),
...

这样的努力:

灯光亮度:

暗亮度:

但是当我启用模拟器的深色模式时,该方法不起作用。 打开模拟器的"Dark Appearance":

打开"Dark Appearance"后状态栏文字颜色无法再通过该方法改变,只是白色(亮度模式)。

我试过那些改变状态栏文本颜色的方法:

方法一:

void main() {
  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown
  ]);
  runApp(MyApp());
}

方法二:

return AnnotatedRegion<SystemUiOverlayStyle>(
      value: SystemUiOverlayStyle.light,
      child: Material(
        child: Scaffold(
          appBar: AppBar(
            brightness: Brightness.light,
            title: Text(widget.title),
          ),
          body: Center(

但是他们两个都不行。

希望得到您的帮助!谢谢。

如果您的应用是 MaterialApp,您可以设置 MaterialApp 的 darkTheme 属性:

return new MaterialApp(
  darkTheme: ThemeData.dark(),
);

这是文档的 link:https://api.flutter.dev/flutter/material/MaterialApp-class.html

如果它不能解决您的问题,您可以使用以下方法创建自己的深色主题:

return new MaterialApp(
  darkTheme: ThemeData(
    // Your theme config
  ),
);

Link 到 ThemeData 文档:https://api.flutter.dev/flutter/material/ThemeData-class.html

我发现我的问题和flutter一样Issue#41067 ---Flutter 不会自动将设备上的状态栏图标更改为黑色 运行 iOS 13.0 在深色模式下它仅在 iOS 13 上的深色模式时才会这样做关闭 #41067"

并且Issue状态为Opening,希望尽快解决。 下面的问题 link: flutter issue#41067

import 'package:flutter_statusbarcolor/flutter_statusbarcolor.dart';

这对我有用。如果你想要黑色文本使用:

@override
  Widget build(BuildContext context) {
    FlutterStatusbarcolor.setStatusBarWhiteForeground(false);
    return MaterialApp();
  } 

对于白色文本使用:

@override
  Widget build(BuildContext context) {
    FlutterStatusbarcolor.setStatusBarWhiteForeground(true);
    return MaterialApp();
  } 

在 Info.plist 中的 ios/Runner 下添加

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

对我有用。

首先转到 ios/Runner 文件夹。接下来打开 info.plist 并将以下行添加到 Dict 部分。

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

接下来。确保在 MaterialApp 的主题设置中有这些行:

...
MaterialApp(
    themeMode: ThemeMode.light, // Change it as you want
    theme: ThemeData(
        primaryColor: Colors.white,
        primaryColorBrightness: Brightness.light,
        brightness: Brightness.light,
        primaryColorDark: Colors.black,
        canvasColor: Colors.white,
        // next line is important!
        appBarTheme: AppBarTheme(brightness: Brightness.light)),
    darkTheme: ThemeData(
        primaryColor: Colors.black,
        primaryColorBrightness: Brightness.dark,
        primaryColorLight: Colors.black,
        brightness: Brightness.dark,
        primaryColorDark: Colors.black,      
        indicatorColor: Colors.white,
        canvasColor: Colors.black,
        // next line is important!
        appBarTheme: AppBarTheme(brightness: Brightness.dark)),
...

祝你好运!

P.S。 你不必在这里设置亮度!!不再:)

Scaffold(
    appBar: AppBar(
    brightness: Brightness.light,  //<--Here!!!
    title: Text(widget.title),
),

更改状态栏文本 color/icon brightness.flutter 2.2.3

材质应用( 标题:'Flutter Demo', 主题:主题数据( appBarTheme: Theme.of(上下文).appBarTheme.copyWith( 亮度:Brightness.dark, systemOverlayStyle: SystemUiOverlayStyle( statusBarIconBrightness: Brightness.light, ), ), primarySwatch: Colors.blue, ), 主页:我的主页(标题:'Flutter Demo Home Page'), );

在我的例子中,我想在我的浅色主题应用程序的状态栏中使用深色字体。问题是我的应用栏的背景颜色是透明的,所以状态栏的默认字体颜色是白色(我尝试将应用栏的颜色设置为白色,瞧瞧——状态栏文本字体是黑色的)。 因为我想保持我的透明状态栏,我的解决方案是像这样将 systemOverlayStyle 添加到我的主题的 appBarTheme 中。:

 AppBarTheme(
        systemOverlayStyle: SystemUiOverlayStyle(
          statusBarBrightness: Brightness.light,
        ),

app_bar_theme.dart 文件在 brightness 的弃用说明中告诉我这个解决方案:

@Deprecated( 'This property is no longer used, please use systemOverlayStyle instead. ' 'This feature was deprecated after v2.4.0-0.0.pre.', ) this.brightness,