Flutter 填坑篇 - 沉浸式状态栏效果

在安卓里面沉浸式效果可以下个第三方 statusBarUtil.java 来设置下,很简单

在Flutter 里面我发现并不简单(sdk 1.17)

首先网上很多方案基本都是如下:

import 'package:flutter/services.dart';

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark); 

 或者

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
  statusBarIconBrightness: Brightness.dark,
  statusBarColor: Colors.white,
  statusBarBrightness: Brightness.dark,
  systemNavigationBarIconBrightness: Brightness.dark,
));


总之上述代码的意思就是我想让我的statusColor 是白色的,icon 是黑色的

但是,没有效果~


后来我找到一篇文章说要放runApp()的后面,避免被 appBar 颜色覆盖,我做了如下的实验
实验一:
Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
    return Scaffold(
      body: Container(
        child: Column(
          children: <Widget>[
            _headerWidget(context),
            
          ],
        ),
      ),
    );
  }
我在某个界面build 里面加上这句话,同时 Scaffold 里面不用App组件而是在body里面写了一个,然后生效了,icon 的颜色变成了黑色,换成 SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light); 变回白色了

实验二:
Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        elevation: 0,
        title: Text(
          '注册',
          style: TextStyle(
              color: Color.fromRGBO(51, 51, 51, 1),
              fontSize: ScreenUtil().setSp(36)),
        ),
        backgroundColor: Colors.black12,
      ),
      body: Center(
        child: _centerWidget(),
      ),
    );
  }
我在另一个界面加上这句,但是AppBar是有的,同时设置了backgroundColor(不设置也一样),这时会覆盖掉dark,所以可以肯定的是和AppBar 有关系~
这会我的项目布局已经完成了,如果AppBar不能改那我只能和设计商量了,然后我在AppBar里面发现了一个属性,顿时感觉有希望
brightness:这是属性,我显示设置成Brightness.dark,没有发生变化,心拔凉的~ 然后我就想试试 Brightness.light, 结果变黑了,我尼玛,爽

看下源码:
/// If this property is null, then [ThemeData.appBarTheme.brightness] is used,
  /// if that is also null, then [ThemeData.primaryColorBrightness] is used.
  final Brightness brightness;

 

enum Brightness {
  /// The color is dark and will require a light text color to achieve readable
  /// contrast.
  ///
  /// For example, the color might be dark grey, requiring white text.
  dark,

  /// The color is light and will require a dark text color to achieve readable
  /// contrast.
  ///
  /// For example, the color might be bright white, requiring black text.
  light,
}

 还有,SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark) 这句就不需要了

总结,就是多看源码,可能就有你想要的

谢谢




posted @ 2020-05-19 15:53  임문  阅读(1277)  评论(0编辑  收藏  举报