【发布时间】:2020-06-08 23:12:17
【问题描述】:
我想为每个屏幕设置状态栏颜色。 例如。在屏幕 A 中,状态栏颜色为红色,在屏幕 B 中为蓝色。 我尝试了很多解决方案。但每个人都有自己的问题。 喜欢:
AnnotatedRegion(
value: SystemUiOverlayStyle(
systemNavigationBarColor: navigationBarColor,
statusBarColor: statusBarColor,
),
child: child,
);
或者在构建方法中返回之前的这个:
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: Colors.white
));
我最后的尝试:
static void pushNamed({
BuildContext context,
String route,
Object arguments,
Color statusBarColor,
Color navigationBarColor = Colors.black,
}) async {
if (statusBarColor != null) {
await FlutterStatusbarcolor.setStatusBarColor(statusBarColor);
}
await Navigator.pushNamed(
context,
route,
arguments: arguments,
);
}
但有时会失败。 这个解决方案的其他问题是使用后退按钮时,颜色没有改变。(我在appbar中为后退按钮编写代码)。 甚至在热重装时颜色会变为以前的颜色。 我该如何处理这个问题?
更新 #2
我为我的路由创建了一个类。
static void pushNamedAndRemoveUntil({
BuildContext context,
String route,
Object arguments,
Color statusBarColor,
Color popStatucBarColor,
Color popNavigationBarColor,
Color navigationBarColor,
}) async {
changeSystemColor(statusBarColor, navigationBarColor);
Navigator.pushNamedAndRemoveUntil(
context,
route,
(Route<dynamic> route) => false,
arguments: arguments,
).then((res) {
changeSystemColor(popStatucBarColor, popNavigationBarColor);
});
}
和:
void changeSystemColor(Color statusBarColor, Color navigationBarColor) {
if (statusBarColor != null)
SystemChrome.setSystemUIOverlayStyle(
SystemUiOverlayStyle(
systemNavigationBarColor: navigationBarColor ?? Colors.black,
statusBarColor: statusBarColor,
),
);
}
为了使用这个
Routing.pushNamedAndRemoveUntil(
context: context,
route: Routes.homeScreen,
arguments: user,
statusBarColor: Colors.teal,
);
现在在使用 pushNamedAndRemoveUntil 时不起作用。
【问题讨论】:
-
@Eugene 一些屏幕没有应用栏,并且在使用应用栏时,状态栏颜色比应用栏颜色深。
-
你有什么解决办法吗?
-
@SumitShukla 我发布了我的解决方法。在大多数情况下,这可能不是最好的解决方案。