設(shè)置狀態(tài)欄顏色的方式有兩種(我常用的,其他方式不了解):
1、APPBar:
Scaffold(
appBar: AppBar(
brightness: Brightness.light,// 或Brightness.dark
),
body: Container()
)
2、SystemChrome
// 或SystemUiOverlayStyle.dark
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);
但有時(shí)會有這樣的需求:page1 -> page2、page3 -> page2,page1狀態(tài)欄為黑色,而page2和page3狀態(tài)欄顏色為白色,這時(shí)候我們就得在page2返回時(shí)修改狀態(tài)欄顏色。
具體做法:進(jìn)入page2時(shí)記錄上一個(gè)頁面的狀態(tài)欄顏色,并將當(dāng)前狀態(tài)欄顏色設(shè)為白色,退出時(shí)再將狀態(tài)欄顏色設(shè)置為之前的顏色。
// 記錄上一個(gè)頁面的狀態(tài)欄顏色
SystemUiOverlayStyle _lastStyle;
@override
void initState() {
// 獲取狀態(tài)欄最后
_lastStyle = SystemChrome.latestStyle;
// 設(shè)置當(dāng)前狀態(tài)欄顏色為白色
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);
super.initState();
}
@override
void dispose() {
// 將狀態(tài)欄顏色設(shè)置為之前的顏色
SystemChrome.setSystemUIOverlayStyle(_lastStyle);
super.dispose();
}
但是,有個(gè)特殊情況,就是上一個(gè)頁面有導(dǎo)航欄,而page2沒有導(dǎo)航欄時(shí),這樣設(shè)置是無效的。
解決方法:page2使用AnnotatedRegion組件,之前的邏輯保持不變:
@override
Widget build(BuildContext context) {
return AnnotatedRegion<SystemUiOverlayStyle>(
// 這里設(shè)置導(dǎo)航欄顏色
value: SystemUiOverlayStyle.light,
child: Scaffold()
}
參考文章:
FlutterUI開發(fā)-改變狀態(tài)欄顏色