简介
状态栏一直没有管过,反正在最上层,也就亮(白),暗(黑)两种模式。一直没有问题,也很少有人关心
问题
后来,重写了头部,抛弃了AppBar()
,用了一个Container()
来模拟。并且在暗黑模式下,UI设计给的颜色是暗黑模式下,给的背景色是纯黑。这就导致,“暗黑下时间栏看不到了”
![](https://img.haomeiwen.com/i1186939/2b8229380a776b54.png)
如何修改?
-
既然弃用了
AppBar()
,那么通过修改属性来改变状态栏样式的方式行不通了。 -
采用全局函数
static void setSystemUIOverlayStyle(SystemUiOverlayStyle style)
进行修改。 -
和模式应该联系起来:在暗黑模式下,状态栏应该是亮色;在明亮模式下,状态栏应该是暗色;
if (ThemeTool.isdark()) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);
} else {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
}
- 如果有页面有特殊要求,到时候再设置一遍就好。
修复效果
这种想法效果,对比很强烈,非常清晰
- 明亮模式,状态栏是暗色
![](https://img.haomeiwen.com/i1186939/4c2ac96d82495dbc.png)
- 暗黑模式,状态栏是亮色
![](https://img.haomeiwen.com/i1186939/b96e6c83feb78a1d.png)
问题
在实际尝试过程中,发现改变状态栏不是每一次都成功,非常郁闷。
后来尝试了延时执行,感觉上能够提高成功率。
class DeviceUtil {
/// 切换状态栏
static changeStatusBar() {
Future.delayed(const Duration(seconds: 1), () {
if (ThemeTool.isdark()) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);
} else {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
}
});
}
}
网友评论