Flutter修改状态栏的颜色

934 阅读1分钟

升级flutter走的坑还真是多,已经用了将近2周的时间来升级,太耗费精力了

这不,这个状态栏的问题也耗费了我2个小时的时间来解决

问题:我修改不了状态栏的颜色

代码为 原生

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }

flutter代码

Future<void> main() async {

  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
    systemNavigationBarColor: Color(0xFF000000),
    systemNavigationBarDividerColor: null,
    statusBarColor: Colors.transparent,
    systemNavigationBarIconBrightness: Brightness.light,
    statusBarIconBrightness: Brightness.dark,
    statusBarBrightness: Brightness.dark,
  ));


  runZoned<Future<Null>>(() async {

    runApp(ColorvApp(
        key: appKey,
        home: ColorvRouter.createRootPage(AppConfig.instance.defaultRoute),
      ));
  }, onError: (error, stackTrace) async {
    // await _reportError(error, stackTrace);
  });
  
}

有2处需要修改

  1. 把原生代码的
 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

注释掉,因为有这句话,修改flutter的代码就不起作用了,不知道为啥以前(flutter sdk 1.9.1)可以,现在不行了,现在版本是flutter sdk 2.5.1

  1. 将flutter的SystemChrome.setSystemUIOverlayStyle代码放到runApp的下方。 写在组件渲染之后,是为了在渲染后进行set赋值,覆盖状态栏,写在渲染之前MaterialApp组件会覆盖掉这个值。

参考: # Flutter修改状态栏的颜色