flutter狀態(tài)欄顏色設(shè)置 - 有APP Bar頁面push到無APP Bar頁面

設(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)欄顏色

Just do IT!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容