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

我对所有这些颤动的东西都是新手。我到处寻找解决这个小问题的办法。 有办法改变状态栏的颜色吗? 另外,当我使用一个颜色,如 Colors.blue,我可以看到,质量的文本在状态栏是不好的。

谢谢

enter image description here

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,
),
],
),
56502 次浏览

@Antoine Basically you can set your theme Brightness, or you can manually override the appbar brightness using the following :

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

Do note that this will only switch between white and black status text color.

.dark will make the status bar text WHITE, while .light will make the status bar text BLACK.

Maybe for a more custom color, like the comment said you can view SystemChrome class.

@Antoine this problem was a headache for me. I used the statusbarColor plugin https://pub.dartlang.org/packages/flutter_statusbarcolor to change the status bar color to black. I then set the appbar brightness to dark because it was a dark background.

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

For IOS and Android:

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

When I don't use AppBar, the colour can be changed using AnnotatedRegion.

import 'package:flutter/services.dart';


...


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

AnnotatedRegion helps you change status bar text color on iOS.

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


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

But if you have AppBar in Scaffold then only AnnotatedRegion won't work. Here is solution.

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

Don't use AnnotatedRegion

Apps should not enclose an AppBar with their own [AnnotatedRegion].

You should rather use:

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

I was having trouble having different status bar colors for different screens. I am using slivers and the brightness (which affects status bar color) can be set the same way in SliverAppBars as in normal AppBars.

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

SliverAppBar's brightness, if null, defaults to AppBarTheme.brightness, ThemeData.appBarTheme or ThemeData.primaryColorBrightness in that order if any of them are null.

Example for setting AppBarTheme.brightness:

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

Answer for android too.

Call this if you need black text in the status bar:

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

and call this if you need white text in the status bar:

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

because statusBarBrightness parametr works just on iOS

We can make the status bar dark:

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);

or light:

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);