在我的应用中,我可以将状态栏和导航颜色设置得很好。但是,我有多个屏幕,例如,当用户按下设备上的主屏幕按钮,然后稍后恢复应用程序时,如何在恢复时更改导航栏的颜色?
我的具体问题是我的导航栏背景颜色为白色,当我退出应用程序并稍后恢复运行时,图标变为白色,这使得它们无法看到。这是我的构建方法(去除了不必要的代码)。除了这里,我什么都不会改变颜色。
virtualenv-wrapper
答案 0 :(得分:0)
Benjamin,我能够在Pixel 2上重新创建问题。这很奇怪,这一定是系统错误,但是您可以通过在应用从后台恢复运行时再次设置底部系统导航菜单颜色来解决此问题。为此,您需要按如下所示检查AppLifeCycleState,
class MyApp extends StatefulWidget {
@override
MyAppState createState() => MyAppState();
}
class MyAppState extends State<MyApp> with WidgetsBindingObserver {
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: Colors.white,
systemNavigationBarColor: Colors.white,
systemNavigationBarIconBrightness: Brightness.dark,
));
}
}
@override
initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
Widget build(BuildContext context) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: Colors.white,
systemNavigationBarColor: Colors.white,
systemNavigationBarIconBrightness: Brightness.dark,
));
return MaterialApp(
home: Scaffold(
appBar: AppBar(
elevation: 0,
title: Text("App", style: TextStyle(color: Colors.black)),
centerTitle: true,
backgroundColor: Colors.white,
brightness: Brightness.light,
actions: <Widget>[
Icon(
Icons.info_outline,
color: Colors.grey,
)
],
),
body: Center(
child: Column(
children: <Widget>[],
),
),
));
}
}
答案 1 :(得分:0)
我遇到了同样的问题。我的解决方法是下面代码中的最后一个 if 语句
FlutterStatusbarcolor.setStatusBarColor(
Theme.of(context).colorScheme.surface,
);
FlutterStatusbarcolor.setNavigationBarColor(
Theme.of(context).colorScheme.background,
);
if (MediaQuery.platformBrightnessOf(context) == Brightness.dark) {
FlutterStatusbarcolor.setNavigationBarWhiteForeground(true);
} else
FlutterStatusbarcolor.setNavigationBarWhiteForeground(false);