如何在 Ios 上更改状态栏文本颜色

Posted

技术标签:

【中文标题】如何在 Ios 上更改状态栏文本颜色【英文标题】:How to change the status bar text color on Ios 【发布时间】:2019-01-13 12:12:48 【问题描述】:

我对所有这些颤抖的东西都不熟悉。我到处寻找解决这个小问题的方法。 有没有办法改变状态栏的颜色? 此外,当我使用 color.blue 之类的颜色时,我可以看到状态栏中的文本质量不好。

谢谢

appBar: AppBar(
    elevation : 0.0,
    leading: IconButton(
      icon: Icon(Icons.menu),
      tooltip: 'Navigation menu',
      onPressed: null,
    ),
    actions: <Widget>[
      IconButton(
        icon: Icon(Icons.search),
        tooltip: 'Search',
        onPressed: null,
      ),
    ],
  ),

【问题讨论】:

看看 SystemChrome 类是否有帮助...您也可以在 X-code 中选择浅色或深色设置。 docs.flutter.io/flutter/services/SystemChrome-class.html 【参考方案1】:

我们可以让状态栏变暗:

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);

或光:

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);

【讨论】:

【参考方案2】:

android 也有答案。

如果您需要在状态栏中显示黑色文本,请调用它:

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark.copyWith(
   statusBarColor: Colors.transparent, // optional
));

如果您需要状态栏中的白色文本,请调用它:

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light.copyWith(
   statusBarColor: Colors.transparent, // optional
));

因为 statusBarBrightness 参数只适用于 ios

【讨论】:

【参考方案3】:

@Antoine 基本上你可以设置你的主题亮度,或者你可以使用以下手动覆盖应用栏亮度:

appBar: new AppBar(
  title: new Text(widget.title),
  brightness: Brightness.light, // or use Brightness.dark
),

请注意,这只会在白色和黑色状态文本颜色之间切换。

.dark 将使状态栏文本WHITE,而.light 将使状态栏文本BLACK

也许是为了更自定义的颜色,就像评论说你可以查看 SystemChrome 类。

【讨论】:

需要注意的是,.dark 将使状态栏文本变为白色,而.light 将使状态栏文本变为黑色。起初这让我很困惑 @vikzilla 这应该包含在答案中。 它对我没有任何作用 应该使用 ThemeData: ThemeData(appBarTheme: AppBarTheme(brightness: Brightness.light),) AppBar的flutter 2.5亮度属性被弃用后。【参考方案4】:

我在为不同的屏幕设置不同的状态栏颜色时遇到了问题。我正在使用 slivers,亮度(影响状态栏颜色)可以在 SliverAppBars 中设置与在普通 AppBars 中相同的方式。

SliverAppBar(
  brightness: Brightness.light, //or Brightness.dark
  //...
);

SliverAppBar 的亮度,如果为 null,则默认为 AppBarTheme.brightness、ThemeData.appBarTheme 或 ThemeData.primaryColorBrightness,如果其中任何一个为 null。

AppBarTheme.brightness 设置示例:

MaterialApp(
  //...
  theme: ThemeData(
    appBarTheme: AppBarTheme(brightness: Brightness.dark),
  ),
  //...
);

【讨论】:

我正在为不同屏幕上不同的状态栏文本颜色而苦苦挣扎,你能解释一下你是如何让它工作的吗?我将主页设置为黑色文本,第二个屏幕设置为白色文本,这样就可以了。但不幸的是,回家保留了白色文字。【参考方案5】:

不要使用AnnotatedRegion

应用程序不应使用自己的 [AnnotatedRegion] 包围 AppBar。

你应该使用:

AppBar(
  backwardsCompatibility: false,
  systemOverlayStyle: SystemUiOverlayStyle(statusBarColor: Colors.orange),
)

【讨论】:

这是2021年的正确答案。谢谢。 SystemUiOverlayStyle.light 使状态栏文本和图标变为白色,SystemUiOverlayStyle.dark 使它们变为黑色。【参考方案6】:

AnnotatedRegion 帮助您更改 iOS 上的状态栏文本颜色。

import 'package:flutter/services.dart';
...    

Widget build(BuildContext context) 
   return AnnotatedRegion<SystemUiOverlayStyle>(
         value: SystemUiOverlayStyle.dark,                
         child: ...,
   );

但如果您在 Scaffold 中有 AppBar,那么只有 AnnotatedRegion 将不起作用。这是解决方案。

  Widget build(BuildContext context) 
    return AnnotatedRegion<SystemUiOverlayStyle>(
      value: SystemUiOverlayStyle.dark, // play with this
      child: Scaffold(
        appBar: AppBar(
          brightness: Brightness.light, // play with this
        ),
        body: Container(),
     );
  

【讨论】:

【参考方案7】:

对于 IOS 和 Android:

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark.copyWith(
   statusBarColor: Colors.white, // Color for Android
   statusBarBrightness: Brightness.dark // Dark == white status bar -- for IOS.
));

【讨论】:

在哪里写? @PratikButani 在“构建”函数中。或者您可以使用名为“AnnotatedRegion”的小部件 @PratikButani 在 main 函数中,'runApp' 所在的位置。【参考方案8】:

当我不使用 AppBar 时,可以使用AnnotatedRegion 更改颜色。

import 'package:flutter/services.dart';

...    

Widget build(BuildContext context) 
   return Scaffold(
      body: AnnotatedRegion<SystemUiOverlayStyle>(
         value: SystemUiOverlayStyle.light,                
         child: ...,
      ),
   );

【讨论】:

您的答案是唯一真正适用于我有动画 SliverPersistenheader 的答案。【参考方案9】:

@Antoine 这个问题让我很头疼。我使用 statusbarColor 插件https://pub.dartlang.org/packages/flutter_statusbarcolor 将状态栏颜色更改为黑色。然后我将应用栏的亮度设置为暗,因为它是深色背景。

import 'package:flutter/material.dart';
import 'package:flutter_statusbarcolor/flutter_statusbarcolor.dart';
import 'package:flutter/services.dart';

void main() async

  try 
    await FlutterStatusbarcolor.setStatusBarColor(Colors.black);
    catch (e) 
    print(e);
  


  runApp(MaterialApp(
    title: 'Using Keys',
    debugShowCheckedModeBanner: false,
    theme: ThemeData(
      primaryColor: Colors.white

    ),
    home: InputBox(),
  ));


class InputBox extends StatefulWidget 
  @override
  _InputBoxState createState() => _InputBoxState();


class _InputBoxState extends State<InputBox> 
  bool loggedIn = false;
  String _email, _username, _password;

  final scaffoldKey = GlobalKey<ScaffoldState>();     //a key for the state of the scaffold
  final formKey = GlobalKey<FormState>();             //a key for the state of the form

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      key: scaffoldKey,
      appBar: AppBar(
        //backgroundColor: Colors.white,
        centerTitle: false,
        brightness: Brightness.dark,
        title: Text("Using Keys",
            style: TextStyle(
              fontSize: 24.0,
            )),
        elevation: 4.0,
      ),
    );
  

【讨论】:

以上是关于如何在 Ios 上更改状态栏文本颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ios 上更改状态栏文本颜色

如何在 iOS 中更改状态栏文本颜色

Flutter:不使用AppBar时如何在Android和iOS上更改状态栏文本颜色[重复]

Swift:更改 iOS 13 的状态栏颜色

如何在互联网可达性上使用 ios 快速更改状态栏颜色?

(iOS 9 及以下)如何在用户交互期间指定标签栏项目文本颜色(选中状态和正常状态)