在安卓里面沉浸式效果可以下個第三方 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) 這句就不需要了
總結,就是多看源碼,可能就有你想要的
謝謝
