使用 Flutter 2.5.2,在 Pixel 2 和 Iphone SE (2020) 上进行测试,
因此,对于我的应用程序,我希望最大化屏幕空间,但在应用程序的大部分内容中保留顶部状态栏。我想隐藏底部系统导航,但似乎使用
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top]);
导致底部系统覆盖进入 LeanBack 模式或其他模式。
由于我自己的底部导航栏具有滚动功能,因此似乎我无法在不点击屏幕以在“手动”模式下显示系统覆盖的情况下滚动。然后应用程序手势没有系统底部导航,挡住了我的底部导航栏。 “immersiveSticky”可以工作,但我希望顶部状态栏几乎总是显示。使用
SystemUiMode.immersiveSticky
似乎忽略了``覆盖:[]``。
有谁知道如何使用
SystemChrome.setSystemUIChangeCallback
来完成我的手势,或者让 SystemUiOverlay.top
始终处于底部,如 immersiveSticky
所示:
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky, overlays: [SystemUiOverlay.top]);
?
或者是否有一种解决方法,我可以获取顶部状态栏的“副本”并创建我自己的小部件,我可以将其用作顶部状态栏并保留
SystemUiMode.immersiveSticky
?
通过添加
SystemChrome.setSystemUIChangeCallback
实际上可以解决您的问题。
首先,使用以下方法将您的应用程序设置为仅显示状态栏和隐藏导航栏:
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top]);
然后添加回调来侦听 UI 模式的更改,当检测到更改时,您可以重置 UI 模式
SystemChrome.setSystemUIChangeCallback((systemOverlaysAreVisible) async {
Future.delayed(Duration(seconds: 2), () {
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top]);
});
});
上面的代码将在导航栏重新出现时再次隐藏它。