Flutter-如何在黑暗模式下更改状态栏文本的颜色?

时间:2019-10-10 14:42:48

标签: text flutter colors statusbar

我希望在iOS 13暗模式下控制状态栏文本的颜色。我可以通过设置脚手架的AppBar属性“亮度”来更改状态栏颜色。 代码如下:

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

这样的努力:

灯光亮度: enter image description here

暗亮度enter image description here

但是当我启用模拟器的 Dark Mode (黑暗模式)时,该方法不起作用。 打开模拟器的“深色外观”: enter image description here

打开“深色外观”后,状态栏文本颜色无法通过该方法进行任何更改,只能是白色(亮度模式)。 enter image description here

我已经尝试过使用这些方法来更改状态栏文本的颜色:

方法1:

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

方法2:

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

但是他们都不行。

希望您的帮助!谢谢。

6 个答案:

答案 0 :(得分:2)

我发现我的问题与颤抖 Issue#41067 ---“ Flutter不会在暗模式下运行iOS 13.0的设备上自动将状态栏图标更改为黑色,只有在关闭iOS 13的暗模式#41067

并且Issue状态为Opening,所以希望它能尽快得到解决。 问题链接如下: flutter issue#41067

答案 1 :(得分:2)

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

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

对我有用。

答案 2 :(得分:2)

首先转到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),
),

答案 3 :(得分:0)

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

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

以下是文档的链接:https://api.flutter.dev/flutter/material/MaterialApp-class.html

如果不能解决问题,则可以使用以下方法创建自己的Dark主题:

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

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

答案 4 :(得分:0)

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();
  } 

答案 5 :(得分:0)

更改状态栏文字颜色/图标亮度.flutter 2.2.3

材料应用( title: 'Flutter 演示', 主题:主题数据( appBarTheme: Theme.of(context).appBarTheme.copyWith( 亮度:Brightness.dark, systemOverlayStyle: SystemUiOverlayStyle( statusBarIconBrightness: Brightness.light, ), ), 主要色板:Colors.blue, ), home: MyHomePage(title: 'Flutter Demo Home Page'), );