??????小菜在切換橫豎屏?xí)r用到 SystemChrome问畅,小菜理解它作為一個全局屬性六荒,很像 Android 的 Application,功能很強(qiáng)大卵皂。
setPreferredOrientations
??????在我們?nèi)粘?yīng)用中可能會需要設(shè)置橫豎屏砚亭,或鎖定單方向屏幕等不同要求捅膘,通過 setPreferredOrientations 配合實現(xiàn);簡單可以按 portraitUp 上 / portraitDown 下 / landscapeLeft 右 / landscapeRight 左 來區(qū)分刃泌;
??????Tips:landscapeLeft 是以 portraitUp 順時針旋轉(zhuǎn) 90 度署尤;landscapeRight 是以逆時針旋轉(zhuǎn) 90 度,故是視覺相反俗扇。
1. 單方向
??????若需要固定應(yīng)用為單一方向箕别,僅需設(shè)置所需要的方向?qū)傩约纯桑?/p>
// 豎直上
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
// 豎直下
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitDown]);
// 水平左
SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft]);
// 水平右
SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeRight]);
2. 多方向
??????若需要應(yīng)用隨重力感應(yīng)變化方向究孕,需設(shè)置多個方向?qū)傩裕?/p>
// 豎直方向
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
// 水平方向
SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeLeft]);
// 多方向
SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeLeft, DeviceOrientation.portraitUp]);
Tips:
- portraitDown 屬性請注意厨诸,多方向時一般不會有效果禾酱,系統(tǒng)默認(rèn)不會顛倒;
- 多方向設(shè)置時初始方向分兩種情況颗管,第一種:當(dāng)前重力感應(yīng)方向不在設(shè)置多方向列表中垦江,初始方向為列表第一個設(shè)置方法;第二種:當(dāng)前重力感應(yīng)方向在設(shè)置多方向列表中绽族,無論順序第幾位衩藤,默認(rèn)均展示當(dāng)前重力感應(yīng)方向(非 portraitDown)赏表。
setEnabledSystemUIOverlays
??????setEnabledSystemUIOverlays 是指定在應(yīng)用程序運(yùn)行時可見的系統(tǒng)疊加,主要對狀態(tài)欄的操作逢慌,讀起來比較拗口间狂,但是看測試用例就很明了;參數(shù)分 top 頂部 / bottom 底部 兩種坠韩;
1. SystemUiOverlay.top
??????默認(rèn)隱藏底部虛擬狀態(tài)欄(需手機(jī)支持虛擬狀態(tài)欄設(shè)備)炼列,即三大金剛鍵俭尖;獲取焦點后展示狀態(tài)欄,展示大小為去掉狀態(tài)欄時整體大醒嫱已亥;
SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.top]);
2. SystemUiOverlay.bottom
??????默認(rèn)隱藏頂部虛擬狀態(tài)欄虑椎,獲取焦點后展示狀態(tài)欄俱笛,展示大小為去掉狀態(tài)欄時整體大杏ぁ浆兰;
SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]);
3. 兩者皆有
??????即默認(rèn)情況簸呈,頂部底部狀態(tài)欄均展示;
SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.top, SystemUiOverlay.bottom]);
setSystemUIOverlayStyle
??????setSystemUIOverlayStyle 用來設(shè)置狀態(tài)欄頂部和底部樣式卸亮,默認(rèn)有 light 和 dark 模式玩裙,也可以按照需求自定義樣式;
1. systemNavigationBarColor
??????該屬性僅用于 Android 設(shè)備且 SDK >= O 時溶诞,底部狀態(tài)欄顏色螺垢;
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(systemNavigationBarColor: Colors.pink));
2. systemNavigationBarDividerColor
??????該屬性僅用于 Android 設(shè)備且 SDK >= P 時枉圃,底部狀態(tài)欄與主內(nèi)容分割線顏色庐冯,效果不是很明顯;
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(systemNavigationBarDividerColor: Colors.yellow));
3. systemNavigationBarIconBrightness
??????該屬性僅用于 Android 設(shè)備且 SDK >= O 時返劲,底部狀態(tài)欄圖標(biāo)樣式篮绿,主要是三大按鍵顏色吕漂;
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(systemNavigationBarColor: Colors.pink));
4. statusBarColor
??????該屬性僅用于 Android 設(shè)備且 SDK >= M 時,頂部狀態(tài)欄顏色菩收;
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(statusBarColor: Colors.red));
5. statusBarIconBrightness
??????該屬性僅用于 Android 設(shè)備且 SDK >= M 時,頂部狀態(tài)欄圖標(biāo)的亮度坡贺;但小菜感覺并不明顯遍坟;
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(statusBarIconBrightness: Brightness.dark));
6. statusBarBrightness
??????該屬性僅用于 iOS 設(shè)備頂部狀態(tài)欄亮度愿伴;
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(statusBarBrightness: Brightness.light));
setApplicationSwitcherDescription
??????小菜個人理解該屬性顯示效果是在應(yīng)用程序切換器相關(guān)的應(yīng)用程序的當(dāng)前狀態(tài)時,但是小菜反復(fù)測試并沒有實際效果鹅经,希望有理解的大神多多指點怎诫;
SystemChrome.setApplicationSwitcherDescription(
const ApplicationSwitcherDescription(
label: "Demo Flutter", primaryColor: 0xFFE53935))
.then((_) {
runApp(new MyApp());
});
??????整體來說 Flutter 對頂部底部狀態(tài)欄的設(shè)置很方便幻妓,只是有些小菜理解不夠深入的地方,有見解對朋友希望多多指導(dǎo)强胰!
來源:阿策小和尚