Я хочу установить цвет строки состояния для каждого экрана. Например, на экране строка состояния имеет красный цвет, а на экране 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,
);
}
, но иногда не удается. и другая проблема этого решения заключается в том, что когда используется кнопка «Назад», цвет не изменяется. (Я пишу свой код для кнопки «Назад» в панели приложения). и даже при горячей перезагрузке цвет меняется на предыдущий. Как я могу решить эту проблему?
Обновление # 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.