当我们使用深色/浅色主题时,如何在颤动中更改状态栏的颜色?

时间:2021-05-24 04:10:10

标签: flutter dart

[重复]。我试图通过在主应用程序中使用以下代码来更改整个应用程序中状态栏的颜色,但是当主题为深色时,我无法将其设置为不同的颜色。现在我已将其设置为白色,但当它是深色主题时我想要黑色。这是一个重复的问题,但我无法得到它,因为他们中的一些人正在使用一些已停产的软件包,而在一些人中,他们正在使用 Appbar 的每个屏幕上都这样做。能够使用较早的答案执行此操作,但如何在主题更改时更改它。

我也试过这个:- statusBareColor:themeProvider.isDarkMode?黑色:白色,但这显示错误。

 class MyApp extends StatelessWidget {
 @override
Widget build(BuildContext context) => ChangeNotifierProvider(

create:(context) => ThemeProvider(),
builder:(context,_){
  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
    statusBarColor:white,
  ));
  final themeProvider = Provider.of<ThemeProvider>(context,listen: true);
  return MaterialApp(

    debugShowCheckedModeBanner: false,
    themeMode: themeProvider.thememode,
    theme: MyThemes.lightTheme,
    darkTheme: MyThemes.darkTheme,
    );

2 个答案:

答案 0 :(得分:0)

您可以使用 Brightness 小部件的 AppBar 属性

Brightness.light
Brightness.dark

在您的 ThemeData 集 appBarTheme 中,如下所示

MaterialApp(
   theme: ThemeData( 
      appBarTheme: AppBarTheme(
        brightness: Brightness.dark, // set dark of light
      ),
    ),
  ),

您可以在任何状态管理提供程序的帮助下更改 brightness

或者你可以使用这样的方法,把它放在你的 build 方法中

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);

答案 1 :(得分:0)

我认为您必须在 Build 函数和 ChangeNotifierProvider 之外使用此代码,请检查。

class MyApp extends StatelessWidget {
 @override
Widget build(BuildContext context) { 
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
    statusBarColor:white,
  ));
  return ChangeNotifierProvider(

create:(context) => ThemeProvider(),
builder:(context,_){
  
  final themeProvider = Provider.of<ThemeProvider>(context,listen: true);
  return MaterialApp(

    debugShowCheckedModeBanner: false,
    themeMode: themeProvider.thememode,
    theme: MyThemes.lightTheme,
    darkTheme: MyThemes.darkTheme,
    )};