颤振导航栏不会随主题更改

时间:2020-07-16 22:59:21

标签: flutter colors navigation themes navbar

我尝试在用户更改主题时设置导航栏颜色更改,但是它不起作用。我猜是因为我在定义主题之前就使用了主题?所以我把systemNavigationBarColor:Theme.of(context).accentColor放到home()中,但是还是不好。如果我删除了代码,则某些设备的导航栏中的颜色会变暗,而另一些设备的颜色会变浅,无论我设置的主题是什么。是什么原因,请帮帮我。

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
      systemNavigationBarColor:Theme.of(context).accentColor, 
    ));

    return StreamProvider<User>.value(
      value: AuthService().user,
      child: GestureDetector(
        onTap: (){
          FocusScope.of(context).requestFocus(FocusNode());
        },
        child: MaterialApp(
          theme: ThemeData(
            brightness: Brightness.light,
            primaryColor: Colors.white,
            accentColor: Colors.grey[300],
            disabledColor: Colors.grey[400],
          ),
          darkTheme: ThemeData(
            brightness: Brightness.dark,
            primaryColor: Colors.black,
            accentColor: Colors.grey[800],
            disabledColor: Colors.grey[700],
        ),
home: Home(),
         
          },
        ),
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

我想这是因为我在定义主题之前就使用了主题

就是这样。尝试使用AnnotatedRegion

import 'package:flutter/services.dart';

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return StreamProvider<User>.value(
      value: AuthService().user,
      child: GestureDetector(
        onTap: (){
          FocusScope.of(context).requestFocus(FocusNode());
        },
        child: MaterialApp(
          theme: ThemeData(
            brightness: Brightness.light,
            primaryColor: Colors.white,
            accentColor: Colors.grey[300],
            disabledColor: Colors.grey[400],
          ),
          darkTheme: ThemeData(
            brightness: Brightness.dark,
            primaryColor: Colors.black,
            accentColor: Colors.grey[800],
            disabledColor: Colors.grey[700],
        ),
        home: Builder( //so you can use the context down the tree for Theme.of(context)
          builder: (context) { 
            return AnnotatedRegion<SystemUiOverlayStyle>(
              value: SystemUiOverlayStyle(
                statusBarColor: Theme.of(context).accentColor,
              ),
              child: Home(),
            );
          }
        ),
         
          },
        ),
      ),
    );
  }
}